Jelajahi Sumber

Merge pull request #818 from AngelFQC/BT10219

Improve date/datetime pickers, about session page, tag extrafield, search sessions - refs BT#9881 BT#10129 #TMI
Angel Fernando Quiroz Campos 9 tahun lalu
induk
melakukan
33a7ca2b6b

+ 9 - 1
main/auth/courses.php

@@ -53,7 +53,8 @@ $actions = array(
     'subscribe_user_with_password',
     'display_sessions',
     'subscribe_to_session',
-    'search_tag'
+    'search_tag',
+    'search_session'
 );
 
 $action = CoursesAndSessionsCatalog::is(CATALOG_SESSIONS) ? 'display_sessions' : 'display_random_courses';
@@ -309,4 +310,11 @@ switch ($action) {
 
         $courses_controller->sessionsListByCoursesTag($limit);
         break;
+    case 'search_session':
+        if (!$user_can_view_page) {
+            api_not_allowed(true);
+        }
+
+        $courses_controller->sessionListBySearch($limit);
+        break;
 }

+ 31 - 0
main/auth/courses_controller.php

@@ -676,6 +676,37 @@ class CoursesController
         $tpl->display($contentTemplate);
     }
 
+    /**
+     * Show the Session Catalogue with filtered session by a query term
+     * @param array $limit
+     */
+    public function sessionListBySearch(array $limit)
+    {
+        $q = isset($_REQUEST['q']) ? Security::remove_XSS($_REQUEST['q']) : null;
+        $hiddenLinks = isset($_GET['hidden_links']) ? intval($_GET['hidden_links']) == 1 : false;
+        $courseUrl = getCourseCategoryUrl(1, $limit['length'], null, 0, 'subscribe');
+        $searchDate = isset($_POST['date']) ? $_POST['date'] : date('Y-m-d');
+
+        $sessions = $this->model->browseSessionsBySearch($q, $limit);
+        $sessionsBlocks = $this->getFormatedSessionsBlock($sessions);
+
+        $tpl = new Template();
+        $tpl->assign('show_courses', CoursesAndSessionsCatalog::showCourses());
+        $tpl->assign('show_sessions', CoursesAndSessionsCatalog::showSessions());
+        $tpl->assign('show_tutor', (api_get_setting('show_session_coach')==='true' ? true : false));
+        $tpl->assign('course_url', $courseUrl);
+        $tpl->assign('already_subscribed_label', $this->getAlreadyRegisteredInSessionLabel());
+        $tpl->assign('hidden_links', $hiddenLinks);
+        $tpl->assign('search_token', Security::get_token());
+        $tpl->assign('search_date', Security::remove_XSS($searchDate));
+        $tpl->assign('search_tag', Security::remove_XSS($q));
+        $tpl->assign('sessions', $sessionsBlocks);
+
+        $contentTemplate = $tpl->get_template('auth/session_catalog.tpl');
+
+        $tpl->display($contentTemplate);
+    }
+
     /**
      * Get the formated data for sessions block to be displayed on Session Catalog page
      * @param array $sessions The session list

+ 32 - 0
main/inc/lib/auth.lib.php

@@ -769,4 +769,36 @@ SQL;
         return $sessionsToBrowse;
     }
 
+    /**
+     * Search sessions by searched term by session name
+     * @param string $queryTerm Term for search
+     * @param array $limit Limit info
+     * @return array The sessions
+     */
+    public function browseSessionsBySearch($queryTerm, array $limit)
+    {
+        $sessionsToBrowse = [];
+
+        $criteria = Doctrine\Common\Collections\Criteria::create()
+            ->where(
+                Doctrine\Common\Collections\Criteria::expr()->contains('name', $queryTerm)
+            )
+            ->setFirstResult($limit['start'])
+            ->setMaxResults($limit['length']);
+
+        $sessions = Database::getManager()
+                ->getRepository('ChamiloCoreBundle:Session')
+                ->matching($criteria);
+
+        foreach ($sessions as $session) {
+            if ($session->getNbrCourses() === 0) {
+                continue;
+            }
+
+            $sessionsToBrowse[] = $session;
+        }
+
+        return $sessionsToBrowse;
+    }
+
 }

+ 14 - 16
main/inc/lib/extra_field_value.lib.php

@@ -122,6 +122,18 @@ class ExtraFieldValue extends Model
                                 );
                             } else {
                                 $em = Database::getManager();
+                                
+                                $currentTags = $em
+                                    ->getRepository('ChamiloCoreBundle:ExtraFieldRelTag')
+                                    ->findBy([
+                                        'fieldId' => $extraFieldInfo['id'],
+                                        'itemId' => $params['item_id']
+                                    ]);
+
+                                foreach ($currentTags as $extraFieldtag) {
+                                    $em->remove($extraFieldtag);
+                                }
+
                                 $tagValues = is_array($value) ? $value : [$value];
                                 $tags = [];
 
@@ -144,23 +156,8 @@ class ExtraFieldValue extends Model
                                 }
 
                                 foreach ($tags as $tag) {
-                                    $fieldTags = $em->getRepository('ChamiloCoreBundle:ExtraFieldRelTag')->findBy([
-                                        'fieldId' => $extraFieldInfo['id'],
-                                        'itemId' => $params['item_id'],
-                                        'tagId' => $tag->getId()
-                                    ]);
-
-                                    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']);
@@ -168,8 +165,9 @@ class ExtraFieldValue extends Model
                                     $fieldRelTag->setTagId($tag->getId());
 
                                     $em->persist($fieldRelTag);
-                                    $em->flush();
                                 }
+
+                                $em->flush();
                             }
                             break;
                         case ExtraField::FIELD_TYPE_FILE_IMAGE:

+ 3 - 1
main/inc/lib/formvalidator/Element/DatePicker.php

@@ -90,7 +90,9 @@ class DatePicker extends HTML_QuickForm_text
                     showOn: 'both',
                     buttonImage: '" . Display::return_icon('attendance.png', null, [], ICON_SIZE_TINY, true, true) . "',
                     buttonImageOnly: true,
-                    buttonText: '" . get_lang('SelectDate') . "'
+                    buttonText: '" . get_lang('SelectDate') . "',
+                    changeMonth: true,
+                    changeYear: true
                 });
             });
         </script>";

+ 3 - 1
main/inc/lib/formvalidator/Element/DateTimePicker.php

@@ -88,7 +88,9 @@ class DateTimePicker extends HTML_QuickForm_text
                     showOn: 'both',
                     buttonImage: '" . Display::return_icon('attendance.png', null, [], ICON_SIZE_TINY, true, true) . "',
                     buttonImageOnly: true,
-                    buttonText: '" . get_lang('SelectDate') . "'
+                    buttonText: '" . get_lang('SelectDate') . "',
+                    changeMonth: true,
+                    changeYear: true
                 });
             });
         </script>";

+ 11 - 5
main/template/default/session/about.tpl

@@ -176,13 +176,19 @@
         </div>
     {% endfor %}
 
-    {% if _u.logged and not is_subscribed %}
-        <div class="row">
-            <div class="col-md-4 col-md-offset-4">
+    <div class="row">
+        <div class="col-md-4 col-md-offset-4">
+            {% if _u.logged and not is_subscribed %}
                 <div class="text-center">
                     {{ subscribe_button }}
                 </div>
-            </div>
+            {% elseif not _u.logged %}
+                {% if 'allow_registration'|get_setting == 'true' %}
+                    <a href="{{ _p.web_main ~ 'auth/inscription.php' }}" class="btn btn-info btn-lg">
+                        <i class="fa fa-sign-in fa-fw"></i> {{ 'SignUp'|get_lang }}
+                    </a>
+                {% endif %}
+            {% endif %}
         </div>
-    {% endif %}
+    </div>
 </div>