Browse Source

Merge pull request #747 from AngelFQC/BT9889

Improvements and fixes related to extra fields - refs BT#9889 #TMI
Angel Fernando Quiroz Campos 9 years ago
parent
commit
0d5708da86

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

@@ -1339,12 +1339,10 @@ EOF;
                         );
 
                         if (is_array($extraData) && array_key_exists($fieldVariable, $extraData)) {
-                            $cleanImagePath = str_replace(api_get_path(SYS_PATH), '', $extraData[$fieldVariable]);
-                            $webImagePath = api_get_path(WEB_PATH) . $cleanImagePath;
 
-                            if (file_exists(api_get_path(SYS_PATH) . $cleanImagePath)) {
+                            if (file_exists(api_get_path(SYS_UPLOAD_PATH) . $extraData[$fieldVariable])) {
                                 $fieldTexts[] = Display::img(
-                                    $webImagePath,
+                                    api_get_path(WEB_UPLOAD_PATH) . $extraData[$fieldVariable],
                                     $field_details['display_text'],
                                     array('width' => '300')
                                 );
@@ -1406,13 +1404,10 @@ EOF;
                         if (is_array($extraData) &&
                             array_key_exists($fieldVariable, $extraData)
                         ) {
-                            $cleanFilePath = str_replace(api_get_path(SYS_PATH), '', $extraData[$fieldVariable]);
-                            $webFilePath = api_get_path(WEB_PATH) . $cleanFilePath;
-
-                            if (file_exists(api_get_path(SYS_PATH) . $cleanFilePath)) {
+                            if (file_exists(api_get_path(SYS_UPLOAD_PATH) . $extraData[$fieldVariable])) {
                                 $fieldTexts[] = Display::url(
-                                    $webFilePath,
-                                    $webFilePath,
+                                    api_get_path(WEB_UPLOAD_PATH) . $extraData[$fieldVariable],
+                                    api_get_path(WEB_UPLOAD_PATH) . $extraData[$fieldVariable],
                                     array(
                                         'title' => $field_details['display_text'],
                                         'target' => '_blank'

+ 62 - 0
main/inc/lib/extra_field_value.lib.php

@@ -875,4 +875,66 @@ class ExtraFieldValue extends Model
     public function compareItemValues($item_id, $item_to_compare)
     {
     }
+
+    /**
+     * Get all values for an item
+     * @param int $itemId The item ID
+     * @param boolean $onlyVisibleFields Get the visible extra field only
+     * @return array
+     */
+    public function getAllValuesForAnItem($itemId, $onlyVisibleFields = false)
+    {
+        $em = Database::getManager();
+        $queryBuilder = $em->createQueryBuilder();
+        $fieldOptionsRepo = $em->getRepository('ChamiloCoreBundle:ExtraFieldOptions');
+
+        $queryBuilder = $queryBuilder->select('fv')
+            ->from('ChamiloCoreBundle:ExtraFieldValues', 'fv')
+            ->innerJoin(
+                'ChamiloCoreBundle:ExtraField',
+                'f',
+                Doctrine\ORM\Query\Expr\Join::WITH,
+                'fv.field = f'
+            )
+            ->where(
+                $queryBuilder->expr()->andX(
+                    $queryBuilder->expr()->eq('fv.itemId', ':item'),
+                    $queryBuilder->expr()->eq('f.extraFieldType', ':field_type')
+                )
+            );
+
+        if ($onlyVisibleFields) {
+            $queryBuilder->andWhere(
+                $queryBuilder->expr()->eq('f.visible', true)
+            );
+        }
+
+        $fieldValues = $queryBuilder
+            ->setParameter('item', $itemId)
+            ->setParameter('field_type', $this->getExtraField()->getExtraFieldType())
+            ->getQuery()
+            ->getResult();
+
+        $valueList = [];
+
+        foreach ($fieldValues as $fieldValue) {
+            $item = [
+                'value' => $fieldValue
+            ];
+
+            switch ($fieldValue->getField()->getFieldType()) {
+                case ExtraField::FIELD_TYPE_SELECT:
+                    $item['option'] = $fieldOptionsRepo->findOneBy([
+                        'field' => $fieldValue->getField(),
+                        'value' => $fieldValue->getValue()
+                    ]);
+                    break;
+            }
+
+            $valueList[] = $item;
+        }
+
+        return $valueList;
+    }
+
 }

+ 2 - 2
main/inc/lib/sessionmanager.lib.php

@@ -6247,7 +6247,7 @@ class SessionManager
      *
      * @return array
      */
-    public static function setForm(FormValidator & $form)
+    public static function setForm(FormValidator & $form, $sessionId = 0)
     {
         $categoriesList = SessionManager::get_all_session_category();
         $userInfo = api_get_user_info();
@@ -6479,7 +6479,7 @@ class SessionManager
 
         // Extra fields
         $extra_field = new ExtraField('session');
-        $extra = $extra_field->addElements($form, null);
+        $extra = $extra_field->addElements($form, $sessionId);
 
         $form->addElement('html','</div>');
 

+ 10 - 20
main/session/about.php

@@ -26,7 +26,6 @@ $courses = [];
 
 $entityManager = Database::getManager();
 $fieldsRepo = $entityManager->getRepository('ChamiloCoreBundle:ExtraField');
-$fieldValuesRepo = $entityManager->getRepository('ChamiloCoreBundle:ExtraFieldValues');
 $fieldTagsRepo = $entityManager->getRepository('ChamiloCoreBundle:ExtraFieldRelTag');
 $userRepo = $entityManager->getRepository('ChamiloUserBundle:User');
 
@@ -35,12 +34,11 @@ $tagField = $fieldsRepo->findOneBy([
     'variable' => 'tags'
 ]);
 
-foreach ($sessionCourses as $sessionCourse) {
-    $courseFieldValues = $fieldValuesRepo->getVisibleValues(
-        Chamilo\CoreBundle\Entity\ExtraField::COURSE_FIELD_TYPE,
-        $sessionCourse->getId()
-    );
+$courseValues = new ExtraFieldValue('course');
+$userValues = new ExtraFieldValue('user');
+$sessionValues = new ExtraFieldValue('session');
 
+foreach ($sessionCourses as $sessionCourse) {
     $courseTags = [];
 
     if (!is_null($tagField)) {
@@ -54,21 +52,9 @@ foreach ($sessionCourses as $sessionCourse) {
         $coachData = [
             'complete_name' => $courseCoach->getCompleteName(),
             'image' => UserManager::getUserPicture($courseCoach->getId(), USER_IMAGE_SIZE_ORIGINAL),
-            'extra_fields' => []
+            'extra_fields' => $userValues->getAllValuesForAnItem($courseCoach->getId(), true)
         ];
 
-        $extraFieldValues = $fieldValuesRepo->getVisibleValues(
-            ExtraField::USER_FIELD_TYPE,
-            $courseCoach->getId()
-        );
-
-        foreach ($extraFieldValues as $value) {
-            $coachData['extra_fields'][] = [
-                'field' => $value->getField()->getDisplayText(),
-                'value' => $value->getValue()
-            ];
-        }
-
         $coachesData[] = $coachData;
     }
 
@@ -107,7 +93,7 @@ foreach ($sessionCourses as $sessionCourse) {
         'objectives' => $courseObjectives,
         'topics' => $courseTopics,
         'coaches' => $coachesData,
-        'extra_fields' => $courseFieldValues
+        'extra_fields' => $courseValues->getAllValuesForAnItem($sessionCourse->getId())
     ];
 }
 
@@ -135,6 +121,10 @@ $template->assign(
 );
 $template->assign('courses', $courses);
 $template->assign('essence', \Essence\Essence::instance());
+$template->assign(
+    'session_extra_fields',
+    $sessionValues->getAllValuesForAnItem($session->getId(), true)
+);
 
 $templateFolder = api_get_configuration_value('default_template');
 

+ 1 - 1
main/session/session_edit.php

@@ -87,7 +87,7 @@ $formAction .= http_build_query(array(
 
 $form = new FormValidator('edit_session', 'post', $formAction);
 $form->addElement('header', $tool_name);
-$result = SessionManager::setForm($form);
+$result = SessionManager::setForm($form, $id);
 
 $htmlHeadXtra[] = '
 <script>

+ 4 - 4
main/template/default/session/about.tpl

@@ -21,8 +21,8 @@
         {% set course_video = '' %}
 
         {% for extra_field in course_data.extra_fields %}
-            {% if extra_field.getField().getVariable() == 'video_url' %}
-                {% set course_video = extra_field.getValue() %}
+            {% if extra_field.value.getField().getVariable() == 'video_url' %}
+                {% set course_video = extra_field.value.getValue() %}
             {% endif %}
         {% endfor %}
 
@@ -109,8 +109,8 @@
 
                                         {% for extra_field in coach.extra_fields %}
                                             <dl>
-                                                <dt>{{ extra_field.field }}</dt>
-                                                <dd>{{ extra_field.value }}</dd>
+                                                <dt>{{ extra_field.value.getField().getDisplayText() }}</dt>
+                                                <dd>{{ extra_field.value.getValue() }}</dd>
                                             </dl>
                                         {% endfor %}
                                     </div>