|
@@ -79,11 +79,14 @@ class ExtraFieldValue extends Model
|
|
|
{
|
|
|
foreach ($params as $key => $value) {
|
|
|
$found = strpos($key, '__persist__');
|
|
|
- if ($found) {
|
|
|
- $tempKey = str_replace('__persist__', '', $key);
|
|
|
- if (!isset($params[$tempKey])) {
|
|
|
- $params[$tempKey] = array();
|
|
|
- }
|
|
|
+
|
|
|
+ if ($found === FALSE) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ $tempKey = str_replace('__persist__', '', $key);
|
|
|
+ if (!isset($params[$tempKey])) {
|
|
|
+ $params[$tempKey] = array();
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -94,169 +97,186 @@ class ExtraFieldValue extends Model
|
|
|
$type = $this->getExtraField()->getExtraFieldType();
|
|
|
// Parse params.
|
|
|
foreach ($params as $key => $value) {
|
|
|
- if (substr($key, 0, 6) == 'extra_' ||
|
|
|
- substr($key, 0, 7) == '_extra_'
|
|
|
+ if (
|
|
|
+ substr($key, 0, 6) != 'extra_' &&
|
|
|
+ substr($key, 0, 7) != '_extra_'
|
|
|
) {
|
|
|
- // An extra field.
|
|
|
- $field_variable = substr($key, 6);
|
|
|
- $extraFieldInfo = $this->getExtraField()->get_handler_field_info_by_field_variable($field_variable);
|
|
|
-
|
|
|
- if ($extraFieldInfo) {
|
|
|
- $commentVariable = 'extra_'.$field_variable.'_comment';
|
|
|
- $comment = isset($params[$commentVariable]) ? $params[$commentVariable] : null;
|
|
|
-
|
|
|
- switch ($extraFieldInfo['field_type']) {
|
|
|
-
|
|
|
- case ExtraField::FIELD_TYPE_TAG:
|
|
|
- if ($type == EntityExtraField::USER_FIELD_TYPE) {
|
|
|
-
|
|
|
- UserManager::delete_user_tags(
|
|
|
- $params['item_id'],
|
|
|
- $extraFieldInfo['id']
|
|
|
- );
|
|
|
-
|
|
|
- UserManager::process_tags(
|
|
|
- $value,
|
|
|
- $params['item_id'],
|
|
|
- $extraFieldInfo['id']
|
|
|
- );
|
|
|
- } else {
|
|
|
- $em = Database::getManager();
|
|
|
-
|
|
|
- $currentTags = $em
|
|
|
- ->getRepository('ChamiloCoreBundle:ExtraFieldRelTag')
|
|
|
- ->findBy([
|
|
|
- 'fieldId' => $extraFieldInfo['id'],
|
|
|
- 'itemId' => $params['item_id']
|
|
|
- ]);
|
|
|
-
|
|
|
- foreach ($currentTags as $extraFieldtag) {
|
|
|
- $em->remove($extraFieldtag);
|
|
|
- }
|
|
|
+ continue;
|
|
|
+ }
|
|
|
|
|
|
- $tagValues = is_array($value) ? $value : [$value];
|
|
|
- $tags = [];
|
|
|
-
|
|
|
- foreach ($tagValues as $tagValue) {
|
|
|
- $tagsResult = $em->getRepository('ChamiloCoreBundle:Tag')->findBy([
|
|
|
- 'tag' => $tagValue,
|
|
|
- 'fieldId' => $extraFieldInfo['id']
|
|
|
- ]);
|
|
|
-
|
|
|
- if (empty($tagsResult)) {
|
|
|
- $tag = new \Chamilo\CoreBundle\Entity\Tag();
|
|
|
- $tag->setCount(0);
|
|
|
- $tag->setFieldId($extraFieldInfo['id']);
|
|
|
- $tag->setTag($tagValue);
|
|
|
-
|
|
|
- $tags[] = $tag;
|
|
|
- } else {
|
|
|
- $tags = array_merge($tags, $tagsResult);
|
|
|
- }
|
|
|
- }
|
|
|
+ // An extra field.
|
|
|
+ $field_variable = substr($key, 6);
|
|
|
+ $extraFieldInfo = $this->getExtraField()->get_handler_field_info_by_field_variable($field_variable);
|
|
|
|
|
|
- foreach ($tags as $tag) {
|
|
|
- $tag->setCount($tag->getCount() + 1);
|
|
|
- $em->persist($tag);
|
|
|
+ if (!$extraFieldInfo) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
|
|
|
- $fieldRelTag = new Chamilo\CoreBundle\Entity\ExtraFieldRelTag();
|
|
|
- $fieldRelTag->setFieldId($extraFieldInfo['id']);
|
|
|
- $fieldRelTag->setItemId($params['item_id']);
|
|
|
- $fieldRelTag->setTagId($tag->getId());
|
|
|
+ $commentVariable = 'extra_'.$field_variable.'_comment';
|
|
|
+ $comment = isset($params[$commentVariable]) ? $params[$commentVariable] : null;
|
|
|
|
|
|
- $em->persist($fieldRelTag);
|
|
|
- }
|
|
|
+ switch ($extraFieldInfo['field_type']) {
|
|
|
+ case ExtraField::FIELD_TYPE_TAG:
|
|
|
+ if ($type == EntityExtraField::USER_FIELD_TYPE) {
|
|
|
+ UserManager::delete_user_tags(
|
|
|
+ $params['item_id'],
|
|
|
+ $extraFieldInfo['id']
|
|
|
+ );
|
|
|
+
|
|
|
+ UserManager::process_tags(
|
|
|
+ $value,
|
|
|
+ $params['item_id'],
|
|
|
+ $extraFieldInfo['id']
|
|
|
+ );
|
|
|
+ break;
|
|
|
+ }
|
|
|
|
|
|
- $em->flush();
|
|
|
- }
|
|
|
- break;
|
|
|
- case ExtraField::FIELD_TYPE_FILE_IMAGE:
|
|
|
- $dirPermissions = api_get_permissions_for_new_directories();
|
|
|
- switch ($this->type) {
|
|
|
- case 'course':
|
|
|
- $fileDir = api_get_path(SYS_UPLOAD_PATH)."courses/";
|
|
|
- $fileDirStored = "courses/";
|
|
|
- break;
|
|
|
- case 'session':
|
|
|
- $fileDir = api_get_path(SYS_UPLOAD_PATH)."sessions/";
|
|
|
- $fileDirStored = "sessions/";
|
|
|
- break;
|
|
|
- case 'user':
|
|
|
- $fileDir = UserManager::getUserPathById($params['item_id'], 'system');
|
|
|
- $fileDirStored = UserManager::getUserPathById($params['item_id'], 'last');
|
|
|
- break;
|
|
|
- }
|
|
|
+ $em = Database::getManager();
|
|
|
|
|
|
- $fileName = ExtraField::FIELD_TYPE_FILE_IMAGE . "_{$params['item_id']}.png";
|
|
|
+ $currentTags = $em
|
|
|
+ ->getRepository('ChamiloCoreBundle:ExtraFieldRelTag')
|
|
|
+ ->findBy([
|
|
|
+ 'fieldId' => $extraFieldInfo['id'],
|
|
|
+ 'itemId' => $params['item_id']
|
|
|
+ ]);
|
|
|
|
|
|
- if (!file_exists($fileDir)) {
|
|
|
- mkdir($fileDir, $dirPermissions, true);
|
|
|
- }
|
|
|
+ foreach ($currentTags as $extraFieldtag) {
|
|
|
+ $em->remove($extraFieldtag);
|
|
|
+ }
|
|
|
|
|
|
- if ($value['error'] == 0) {
|
|
|
- $imageExtraField = new Image($value['tmp_name']);
|
|
|
- $imageExtraField->send_image($fileDir . $fileName, -1, 'png');
|
|
|
- $newParams = array(
|
|
|
- 'item_id' => $params['item_id'],
|
|
|
- 'field_id' => $extraFieldInfo['id'],
|
|
|
- 'value' => $fileDirStored . $fileName,
|
|
|
- 'comment' => $comment
|
|
|
- );
|
|
|
-
|
|
|
- self::save($newParams);
|
|
|
- }
|
|
|
- break;
|
|
|
- case ExtraField::FIELD_TYPE_FILE:
|
|
|
- $dirPermissions = api_get_permissions_for_new_directories();
|
|
|
+ $em->flush();
|
|
|
|
|
|
- switch ($this->type) {
|
|
|
- case 'course':
|
|
|
- $fileDir = api_get_path(SYS_UPLOAD_PATH)."courses/";
|
|
|
- $fileDirStored = "courses/";
|
|
|
- break;
|
|
|
- case 'session':
|
|
|
- $fileDir = api_get_path(SYS_UPLOAD_PATH)."sessions/";
|
|
|
- $fileDirStored = "sessions/";
|
|
|
- break;
|
|
|
- case 'user':
|
|
|
- $fileDir = UserManager::getUserPathById($params['item_id'], 'system');
|
|
|
- $fileDirStored = UserManager::getUserPathById($params['item_id'], 'last');
|
|
|
- break;
|
|
|
- }
|
|
|
+ $tagValues = is_array($value) ? $value : [$value];
|
|
|
+ $tags = [];
|
|
|
|
|
|
- $cleanedName = api_replace_dangerous_char($value['name']);
|
|
|
- $fileName = ExtraField::FIELD_TYPE_FILE . "_{$params['item_id']}_$cleanedName";
|
|
|
- if (!file_exists($fileDir)) {
|
|
|
- mkdir($fileDir, $dirPermissions, true);
|
|
|
- }
|
|
|
+ foreach ($tagValues as $tagValue) {
|
|
|
+ $tagsResult = $em
|
|
|
+ ->getRepository('ChamiloCoreBundle:Tag')
|
|
|
+ ->findBy([
|
|
|
+ 'tag' => $tagValue,
|
|
|
+ 'fieldId' => $extraFieldInfo['id']
|
|
|
+ ]);
|
|
|
|
|
|
- if ($value['error'] == 0) {
|
|
|
- moveUploadedFile($value, $fileDir . $fileName);
|
|
|
+ if (empty($tagsResult)) {
|
|
|
+ $tag = new \Chamilo\CoreBundle\Entity\Tag();
|
|
|
+ $tag->setFieldId($extraFieldInfo['id']);
|
|
|
+ $tag->setTag($tagValue);
|
|
|
|
|
|
- $new_params = array(
|
|
|
- 'item_id' => $params['item_id'],
|
|
|
- 'field_id' => $extraFieldInfo['id'],
|
|
|
- 'value' => $fileDirStored . $fileName
|
|
|
- );
|
|
|
+ $tags[] = $tag;
|
|
|
+ } else {
|
|
|
+ $tags = array_merge($tags, $tagsResult);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- if ($this->type !== 'session' && $this->type !== 'course') {
|
|
|
- $new_params['comment'] = $comment;
|
|
|
- }
|
|
|
+ foreach ($tags as $tag) {
|
|
|
+ $tagUses = $em
|
|
|
+ ->getRepository('ChamiloCoreBundle:ExtraFieldRelTag')
|
|
|
+ ->findBy([
|
|
|
+ 'tagId' => $tag->getId()
|
|
|
+ ]);
|
|
|
|
|
|
- self::save($new_params);
|
|
|
- }
|
|
|
+ $tag->setCount(count($tagUses) + 1);
|
|
|
+ $em->persist($tag);
|
|
|
+ }
|
|
|
+
|
|
|
+ $em->flush();
|
|
|
+
|
|
|
+ foreach ($tags as $tag) {
|
|
|
+ $fieldRelTag = new Chamilo\CoreBundle\Entity\ExtraFieldRelTag();
|
|
|
+ $fieldRelTag->setFieldId($extraFieldInfo['id']);
|
|
|
+ $fieldRelTag->setItemId($params['item_id']);
|
|
|
+ $fieldRelTag->setTagId($tag->getId());
|
|
|
+
|
|
|
+ $em->persist($fieldRelTag);
|
|
|
+ }
|
|
|
+
|
|
|
+ $em->flush();
|
|
|
+ break;
|
|
|
+ case ExtraField::FIELD_TYPE_FILE_IMAGE:
|
|
|
+ $dirPermissions = api_get_permissions_for_new_directories();
|
|
|
+ switch ($this->type) {
|
|
|
+ case 'course':
|
|
|
+ $fileDir = api_get_path(SYS_UPLOAD_PATH)."courses/";
|
|
|
+ $fileDirStored = "courses/";
|
|
|
break;
|
|
|
- default:
|
|
|
- $newParams = array(
|
|
|
- 'item_id' => $params['item_id'],
|
|
|
- 'field_id' => $extraFieldInfo['id'],
|
|
|
- 'value' => $value,
|
|
|
- 'comment' => $comment
|
|
|
- );
|
|
|
+ case 'session':
|
|
|
+ $fileDir = api_get_path(SYS_UPLOAD_PATH)."sessions/";
|
|
|
+ $fileDirStored = "sessions/";
|
|
|
+ break;
|
|
|
+ case 'user':
|
|
|
+ $fileDir = UserManager::getUserPathById($params['item_id'], 'system');
|
|
|
+ $fileDirStored = UserManager::getUserPathById($params['item_id'], 'last');
|
|
|
+ break;
|
|
|
+ }
|
|
|
|
|
|
- self::save($newParams);
|
|
|
+ $fileName = ExtraField::FIELD_TYPE_FILE_IMAGE . "_{$params['item_id']}.png";
|
|
|
+
|
|
|
+ if (!file_exists($fileDir)) {
|
|
|
+ mkdir($fileDir, $dirPermissions, true);
|
|
|
}
|
|
|
- }
|
|
|
+
|
|
|
+ if ($value['error'] == 0) {
|
|
|
+ $imageExtraField = new Image($value['tmp_name']);
|
|
|
+ $imageExtraField->send_image($fileDir . $fileName, -1, 'png');
|
|
|
+ $newParams = array(
|
|
|
+ 'item_id' => $params['item_id'],
|
|
|
+ 'field_id' => $extraFieldInfo['id'],
|
|
|
+ 'value' => $fileDirStored . $fileName,
|
|
|
+ 'comment' => $comment
|
|
|
+ );
|
|
|
+
|
|
|
+ self::save($newParams);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case ExtraField::FIELD_TYPE_FILE:
|
|
|
+ $dirPermissions = api_get_permissions_for_new_directories();
|
|
|
+
|
|
|
+ switch ($this->type) {
|
|
|
+ case 'course':
|
|
|
+ $fileDir = api_get_path(SYS_UPLOAD_PATH)."courses/";
|
|
|
+ $fileDirStored = "courses/";
|
|
|
+ break;
|
|
|
+ case 'session':
|
|
|
+ $fileDir = api_get_path(SYS_UPLOAD_PATH)."sessions/";
|
|
|
+ $fileDirStored = "sessions/";
|
|
|
+ break;
|
|
|
+ case 'user':
|
|
|
+ $fileDir = UserManager::getUserPathById($params['item_id'], 'system');
|
|
|
+ $fileDirStored = UserManager::getUserPathById($params['item_id'], 'last');
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ $cleanedName = api_replace_dangerous_char($value['name']);
|
|
|
+ $fileName = ExtraField::FIELD_TYPE_FILE . "_{$params['item_id']}_$cleanedName";
|
|
|
+ if (!file_exists($fileDir)) {
|
|
|
+ mkdir($fileDir, $dirPermissions, true);
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($value['error'] == 0) {
|
|
|
+ moveUploadedFile($value, $fileDir . $fileName);
|
|
|
+
|
|
|
+ $new_params = array(
|
|
|
+ 'item_id' => $params['item_id'],
|
|
|
+ 'field_id' => $extraFieldInfo['id'],
|
|
|
+ 'value' => $fileDirStored . $fileName
|
|
|
+ );
|
|
|
+
|
|
|
+ if ($this->type !== 'session' && $this->type !== 'course') {
|
|
|
+ $new_params['comment'] = $comment;
|
|
|
+ }
|
|
|
+
|
|
|
+ self::save($new_params);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ $newParams = array(
|
|
|
+ 'item_id' => $params['item_id'],
|
|
|
+ 'field_id' => $extraFieldInfo['id'],
|
|
|
+ 'value' => $value,
|
|
|
+ 'comment' => $comment
|
|
|
+ );
|
|
|
+
|
|
|
+ self::save($newParams);
|
|
|
}
|
|
|
}
|
|
|
}
|