Browse Source

Added Start/End date and validation in forum - Refs #8195

José Loguercio 8 years ago
parent
commit
ece817c544
4 changed files with 71 additions and 6 deletions
  1. 25 0
      main/forum/forumfunction.inc.php
  2. 12 4
      main/forum/index.php
  3. 9 0
      main/forum/viewforum.php
  4. 25 2
      main/inc/lib/api.lib.php

+ 25 - 0
main/forum/forumfunction.inc.php

@@ -282,6 +282,25 @@ function show_add_forum_form($inputvalues = array(), $lp_id)
     $form->addButtonAdvancedSettings('advanced_params');
     $form->addElement('html', '<div id="advanced_params_options" style="display:none">');
 
+    $form->addDateTimePicker(
+        'start_time',
+        array(get_lang('ForumStartDate'), get_lang('ForumStartDateComment')),
+        array('id' => 'start_time')
+    );
+
+    $form->addDateTimePicker(
+        'end_time',
+        array(get_lang('ForumEndDate'), get_lang('ForumEndDateComment')),
+        array('id' => 'end_time')
+    );
+
+    $form->addRule(
+        array('start_time', 'end_time'),
+        get_lang('StartDateMustBeBeforeTheEndDate'),
+        'compare_datetime_text',
+        '< allow_empty'
+    );
+
     $group = array();
     $group[] = $form->createElement('radio', 'moderated', null, get_lang('Yes'), 1);
     $group[] = $form->createElement('radio', 'moderated', null, get_lang('No'), 0);
@@ -378,6 +397,8 @@ function show_add_forum_form($inputvalues = array(), $lp_id)
         $defaults['forum_id'] = isset($inputvalues['forum_id']) ? $inputvalues['forum_id'] : null;
         $defaults['forum_title'] = prepare4display(isset($inputvalues['forum_title']) ? $inputvalues['forum_title'] : null);
         $defaults['forum_comment'] = prepare4display(isset($inputvalues['forum_comment']) ? $inputvalues['forum_comment'] : null);
+        $defaults['start_time'] = isset($inputvalues['start_time']) ? api_get_local_time($inputvalues['start_time']) : null;
+        $defaults['end_time'] = isset($inputvalues['end_time']) ? api_get_local_time($inputvalues['end_time']) : null;
         $defaults['moderated']['moderated'] = isset($inputvalues['moderated']) ? $inputvalues['moderated'] : 0;
         $defaults['forum_category'] = isset($inputvalues['forum_category']) ? $inputvalues['forum_category'] : null;
         $defaults['allow_anonymous_group']['allow_anonymous'] = isset($inputvalues['allow_anonymous']) ? $inputvalues['allow_anonymous'] : null;
@@ -697,6 +718,8 @@ function store_forum($values, $courseInfo = array(), $returnId = false)
             'forum_of_group'=> isset($values['group_forum']) ? $values['group_forum'] : null,
             'forum_group_public_private'=> isset($values['public_private_group_forum_group']['public_private_group_forum']) ? $values['public_private_group_forum_group']['public_private_group_forum'] : null,
             'moderated'=> isset($values['moderated']['moderated']) ? 1 : 0,
+            'start_time' => isset($values['start_time']) ? api_get_utc_datetime($values['start_time']) : null,
+            'end_time' => isset($values['end_time']) ? api_get_utc_datetime($values['end_time']) : null,
             'forum_order'=> isset($new_max) ? $new_max : null,
             'session_id'=> $session_id,
             'lp_id' => isset($values['lp_id']) ? intval($values['lp_id']) : 0
@@ -738,6 +761,8 @@ function store_forum($values, $courseInfo = array(), $returnId = false)
             'forum_of_group'=> isset($values['group_forum']) ? $values['group_forum'] : null,
             'forum_group_public_private'=> isset($values['public_private_group_forum_group']['public_private_group_forum']) ? $values['public_private_group_forum_group']['public_private_group_forum'] : null,
             'moderated'=> isset($values['moderated']['moderated']) ? 1 : 0,
+            'start_time' => isset($values['start_time']) ? $values['start_time'] : null,
+            'end_time' => isset($values['end_time']) ? $values['end_time'] : null,
             'forum_order'=> isset($new_max) ? $new_max : null,
             'session_id'=> $session_id,
             'lp_id' => isset($values['lp_id']) ? intval($values['lp_id']) : 0,

+ 12 - 4
main/forum/index.php

@@ -486,24 +486,32 @@ if (is_array($forumCategories)) {
                             null,
                             ICON_SIZE_MEDIUM
                         );
+
                         $linkForum = Display::tag(
                             'a',
                             $forum['forum_title'],
-                            array (
+                            [
                                 'href' => 'viewforum.php?' . api_get_cidreq()
                                     . '&gidReq=' . intval($groupid)
                                     . '&forum=' . intval($forum['forum_id']),
                                 'class' => return_visible_invisible(strval(intval($forum['visibility'])))
-                            )
+                            ]
                         );
 
+                        if (!empty($forum['start_time']) && !empty($forum['end_time'])) {
+                            $res = apiIsDateInDateRange($forum['start_time'], $forum['end_time']);
+                            if (!$res) {
+                                $linkForum = $forum['forum_title'];
+                            }
+                        }
+
                         $html .= '<h3 class="title">' . $iconForum . $linkForum . '</h3>';
                         $html .= Display::tag(
                             'p',
                             Security::remove_XSS($forum['forum_comment']),
-                            array(
+                            [
                                 'class'=>'description'
-                            )
+                            ]
                         );
                         $html .= '</div>';
                         $html .= '</div>';

+ 9 - 0
main/forum/viewforum.php

@@ -60,6 +60,15 @@ $isTutor = GroupManager::is_tutor_of_group($userId, $groupId, $courseId);
 $my_forum = isset($_GET['forum']) ? $_GET['forum'] : '';
 // Note: This has to be validated that it is an existing forum.
 $current_forum = get_forum_information($my_forum);
+$isForumOpenByDateAccess = apiIsDateInDateRange($current_forum['start_time'], $current_forum['end_time']);
+
+if (!$isForumOpenByDateAccess) {
+    if ($origin) {
+        api_not_allowed();
+    } else {
+        api_not_allowed(true);
+    }
+}
 
 if (empty($current_forum)) {
     api_not_allowed();

+ 25 - 2
main/inc/lib/api.lib.php

@@ -7956,16 +7956,39 @@ function api_protect_course_group($tool, $showHeader = true)
     }
 }
 
+/**
+ * Check if a date is in a date range
+ *
+ * @param datetime $startDate
+ * @param datetime $endDate
+ * @param datetime $currentDate
+ * @return bool true if date is in rage, false otherwise
+ */
+function apiIsDateInDateRange ($startDate, $endDate, $currentDate = null)
+{
+    $startDate = strtotime(api_get_local_time($startDate));
+    $endDate = strtotime(api_get_local_time($endDate));
+    $currentDate = strtotime(api_get_local_time($currentDate));
+
+    if (($currentDate >= $startDate) && ($currentDate <= $endDate)) {
+        return true;
+    }
+
+    return false;
+}
+
 /**
  * Eliminate the duplicates of a multidimensional array by sending the key
+ *
  * @param array $array multidimensional array
  * @param int $key key to find to compare
+ * @return array
  *
  */
 function api_unique_multidim_array($array, $key){
-    $temp_array = array();
+    $temp_array = [];
     $i = 0;
-    $key_array = array();
+    $key_array = [];
 
     foreach($array as $val){
         if(!in_array($val[$key],$key_array)){