Browse Source

Merge branch '1.10.x' of ssh://github.com/chamilo/chamilo-lms into 1.10.x

Julio Montoya 9 years ago
parent
commit
43764d5f67

+ 20 - 1
main/inc/ajax/extra_field.ajax.php

@@ -25,7 +25,26 @@ switch ($action) {
         $fieldId = isset($_REQUEST['field_id']) ? $_REQUEST['field_id'] : null;
         $tag = isset($_REQUEST['tag']) ? $_REQUEST['tag'] : null;
         $extraFieldOption = new ExtraFieldOption($type);
-        echo $extraFieldOption->getSearchOptionsByField($tag, $fieldId, 10, 'json');
+
+        $result = [];
+        $tags = Database::getManager()
+            ->getRepository('ChamiloCoreBundle:Tag')
+            ->createQueryBuilder('t')
+            ->where("t.tag LIKE :tag")
+            ->andWhere('t.fieldId = :field')
+            ->setParameter('field', $fieldId)
+            ->setParameter('tag', "$tag%")
+            ->getQuery()
+            ->getResult();
+
+        foreach ($tags as $tag) {
+            $result[] = [
+                'caption' => $tag->getTag(),
+                'value' => $tag->getTag()
+            ];
+        }
+
+        echo json_encode($result);
         break;
     default:
         exit;

+ 1 - 0
main/inc/lib/database.constants.inc.php

@@ -78,6 +78,7 @@ define('TABLE_MAIN_CALENDAR_EVENT_VALUES', 'calendar_event_values');*/
 //User tags
 define('TABLE_MAIN_TAG', 'tag');
 define('TABLE_MAIN_USER_REL_TAG', 'user_rel_tag');
+define('TABLE_MAIN_EXTRA_FIELD_REL_TAG', 'extra_field_rel_tag');
 
 //User groups
 /*define('TABLE_MAIN_GROUP', 'groups');

+ 24 - 10
main/inc/lib/extra_field.lib.php

@@ -1192,19 +1192,33 @@ EOF;
                             }
                             $url = api_get_path(WEB_AJAX_PATH).'user_manager.ajax.php';
                         } else {
-                            $extraFieldValue = new ExtraFieldValue($this->type);
-                            $tags = array();
-                            if (!empty($itemId)) {
-                                $tags = $extraFieldValue->getAllValuesByItemAndField($itemId, $field_id);
-                            }
                             $tag_list = '';
-                            if (is_array($tags) && count($tags) > 0) {
-                                $extraFieldOption = new ExtraFieldOption($this->type);
-                                foreach ($tags as $tag) {
-                                    $option = $extraFieldOption->get($tag['value']);
-                                    $tag_list .= '<option value="'.$option['id'].'" class="selected">'.$option['display_text'].'</option>';
+                            $em = Database::getManager();
+
+                            $fieldTags = $em
+                                ->getRepository('ChamiloCoreBundle:ExtraFieldRelTag')
+                                ->findBy([
+                                    'fieldId' => $field_id,
+                                    'itemId' => $itemId
+                                ]);
+
+                            foreach ($fieldTags as $fieldTag) {
+                                $tag = $em->find('ChamiloCoreBundle:Tag', $fieldTag->getTagId());
+
+                                if (empty($tag)) {
+                                    continue;
                                 }
+
+                                $tag_list .= Display::tag(
+                                    'option',
+                                    $tag->getTag(),
+                                    [
+                                        'value' => $tag->getTag(),
+                                        'class' => 'selected'
+                                    ]
+                                );
                             }
+
                             $url = api_get_path(WEB_AJAX_PATH).'extra_field.ajax.php';
                         }
 

+ 44 - 28
main/inc/lib/extra_field_value.lib.php

@@ -125,39 +125,55 @@ class ExtraFieldValue extends Model
                                     $extraFieldInfo['id']
                                 );
                             } else {
-                                /*  $old = self::getAllValuesByItemAndField(
-                                    $params['item_id'],
-                                    $extraFieldInfo['id']
-                                );
-
-                                $deleteItems = array();
-                                if (!empty($old)) {
-                                    $oldIds = array();
-                                    foreach ($old as $oldItem) {
-                                        $oldIds[] = $oldItem['value'];
+                                $em = Database::getManager();
+                                $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);
                                     }
-                                    $deleteItems = array_diff($oldIds, $value);
                                 }
 
-                                foreach ($value as $optionId) {
-                                    $newParams = array(
-                                        'item_id' => $params['item_id'],
-                                        'field_id' => $extraFieldInfo['id'],
-                                        'value' => $optionId,
-                                        'comment' => $comment
-                                    );
-                                    self::save($newParams);
-                                }
+                                foreach ($tags as $tag) {
+                                    $fieldTags = $em->getRepository('ChamiloCoreBundle:ExtraFieldRelTag')->findBy([
+                                        'fieldId' => $extraFieldInfo['id'],
+                                        'itemId' => $params['item_id'],
+                                        'tagId' => $tag->getId()
+                                    ]);
 
-                                if (!empty($deleteItems)) {
-                                    foreach ($deleteItems as $deleteFieldValue) {
-                                        self::deleteValuesByHandlerAndFieldAndValue(
-                                            $params['item_id'],
-                                            $extraFieldInfo['id'],
-                                            $deleteFieldValue
-                                        );
+                                    foreach ($fieldTags as $fieldTag) {
+                                        $em->remove($fieldTag);
+
+                                        $tag->setCount($tag->getCount() - 1);
+                                        $em->persist($tag);
+                                        $em->flush();
                                     }
-                                }*/
+
+                                    $tag->setCount($tag->getCount() + 1);
+                                    $em->persist($tag);
+                                    $em->flush();
+
+                                    $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:

+ 118 - 0
src/Chamilo/CoreBundle/Entity/ExtraFieldRelTag.php

@@ -0,0 +1,118 @@
+<?php
+
+namespace Chamilo\CoreBundle\Entity;
+
+use Doctrine\ORM\Mapping as ORM;
+
+/**
+ * FieldRelTag
+ *
+ * @ORM\Table(name="extra_field_rel_tag")
+ * @ORM\Entity
+ */
+class ExtraFieldRelTag
+{
+    /**
+     * @var integer
+     *
+     * @ORM\Column(name="field_id", type="integer", nullable=false)
+     */
+    private $fieldId;
+
+    /**
+     * @var integer
+     *
+     * @ORM\Column(name="tag_id", type="integer", nullable=false)
+     */
+    private $tagId;
+
+    /**
+     * @var integer
+     *
+     * @ORM\Column(name="item_id", type="integer", nullable=false)
+     */
+    private $itemId;
+
+    /**
+     * @var integer
+     *
+     * @ORM\Column(name="id", type="integer")
+     * @ORM\Id
+     * @ORM\GeneratedValue(strategy="IDENTITY")
+     */
+    private $id;
+
+    /**
+     * Set fieldId
+     * @param integer $fieldId
+     * @return \Chamilo\CoreBundle\Entity\ExtraFieldRelTag
+     */
+    public function setFieldId($fieldId)
+    {
+        $this->fieldId = $fieldId;
+
+        return $this;
+    }
+
+    /**
+     * Set tagId
+     * @param integer $tagId
+     * @return \Chamilo\CoreBundle\Entity\ExtraFieldRelTag
+     */
+    public function setTagId($tagId)
+    {
+        $this->tagId = $tagId;
+
+        return $this;
+    }
+
+    /**
+     * Set itemId
+     * @param integer $itemId
+     * @return \Chamilo\CoreBundle\Entity\ExtraFieldRelTag
+     */
+    public function setItemId($itemId)
+    {
+        $this->itemId = $itemId;
+
+        return $this;
+    }
+
+    /**
+     * Get fieldId
+     *
+     * @return integer
+     */
+    public function getFieldId()
+    {
+        return $this->fieldId;
+    }
+
+    /**
+     * Get tagId
+     * @return integer
+     */
+    public function getTagId()
+    {
+        return $this->tagId;
+    }
+
+    /**
+     * Get itemId
+     * @return integer
+     */
+    public function getItemId()
+    {
+        return $this->itemId;
+    }
+
+    /**
+     * Get id
+     * @return integer
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+
+}

+ 68 - 0
src/Chamilo/CoreBundle/Migrations/Schema/V110/Version20150608104600.php

@@ -0,0 +1,68 @@
+<?php
+/* For licensing terms, see /license.txt */
+
+namespace Chamilo\CoreBundle\Migrations\Schema\V110;
+
+use Chamilo\CoreBundle\Migrations\AbstractMigrationChamilo;
+use Doctrine\DBAL\Schema\Schema;
+use Doctrine\DBAL\Types\Type as TableColumnType;
+
+/**
+ * Session date changes
+ */
+class Version20150608104600 extends AbstractMigrationChamilo
+{
+    /**
+     * @param Schema $schema
+     */
+    public function up(Schema $schema)
+    {
+        $extraFieldRelTag = $schema->createTable('extra_field_rel_tag');
+        $extraFieldRelTag->addColumn(
+            'id',
+            TableColumnType::INTEGER,
+            ['unsigned' => true, 'autoincrement' => true, 'notnull' => true]
+        );
+        $extraFieldRelTag->addColumn(
+            'field_id',
+            TableColumnType::INTEGER,
+            ['unsigned' => true, 'notnull' => true]
+        );
+        $extraFieldRelTag->addColumn(
+            'item_id',
+            TableColumnType::INTEGER,
+            ['unsigned' => true, 'notnull' => true]
+        );
+        $extraFieldRelTag->addColumn(
+            'tag_id',
+            TableColumnType::INTEGER,
+            ['unsigned' => true, 'notnull' => true]
+        );
+        $extraFieldRelTag->setPrimaryKey(['id']);
+        $extraFieldRelTag->addIndex(
+            ['field_id'],
+            'idx_frt_field'
+        );
+        $extraFieldRelTag->addIndex(
+            ['item_id'],
+            'idx_frt_item'
+        );
+        $extraFieldRelTag->addIndex(
+            ['tag_id'],
+            'idx_frt_tag'
+        );
+        $extraFieldRelTag->addIndex(
+            ['field_id', 'item_id', 'tag_id'],
+            'idx_frt_field_item_tag'
+        );
+    }
+
+    /**
+     * @param Schema $schema
+     */
+    public function down(Schema $schema)
+    {
+        $schema->dropTable('extra_field_rel_tag');
+    }
+
+}