Example #1
0
 /** cron log, INTERNAL
  *  daily cron
  *
  * @return array results of running this cron
  */
 function _cronPageImpressionAndUserActivity()
 {
     include_once 'functions/misc_functions.php';
     $time_start = getmicrotime();
     $cron_array = array();
     $cron_array['title'] = 'page impression and user activity cron';
     $cron_array['description'] = 'count page impressions and user activity';
     $cron_array['success'] = true;
     $cron_array['success_text'] = 'cron failed';
     $log_manager = $this->_environment->getLogManager();
     $room_list = $this->getRoomList();
     $count_rooms = 0;
     if ($room_list->isNotEmpty()) {
         $room_item = $room_list->getFirst();
         while ($room_item) {
             // get latest timestamp of page impressions and user actitivty
             // from extra field PIUA_LAST
             $piua_last = $room_item->getPageImpressionAndUserActivityLast();
             if (!empty($piua_last)) {
                 $oldest_date = $piua_last;
             } else {
                 // if there is no entry take creation_date
                 $creation_date = $room_item->getCreationDate();
                 $oldest_date = getYearFromDateTime($creation_date) . getMonthFromDateTime($creation_date) . getDayFromDateTime($creation_date);
             }
             $current_date = getCurrentDate();
             $day_diff = getDifference($oldest_date, $current_date);
             $pi_array = $room_item->getPageImpressionArray();
             $ua_array = $room_item->getUserActivityArray();
             $pi_input = array();
             $ua_input = array();
             // for each day, get page impressions and user activity
             for ($i = 1; $i < $day_diff; $i++) {
                 $log_manager->resetLimits();
                 $log_manager->setContextLimit($room_item->getItemID());
                 $log_manager->setRequestLimit("commsy.php");
                 $older_limit_stamp = datetime2Timestamp(date("Y-m-d 00:00:00")) - ($i - 1) * 86400;
                 $older_limit = date('Y-m-d', $older_limit_stamp);
                 $log_manager->setTimestampOlderLimit($older_limit);
                 $log_manager->setTimestampNotOlderLimit($i);
                 $pi_input[] = $log_manager->getCountAll();
                 $ua_input[] = $log_manager->countWithUserDistinction();
             }
             // put actual date in extra field PIUA_LAST
             $room_item->setPageImpressionAndUserActivityLast($current_date);
             $room_item->setPageImpressionArray(array_merge($pi_input, $pi_array));
             $room_item->setUserActivityArray(array_merge($ua_input, $ua_array));
             $room_item->saveWithoutChangingModificationInformation();
             $count_rooms++;
             unset($room_item);
             $room_item = $room_list->getNext();
         }
     }
     unset($room_list);
     unset($log_manager);
     $cron_array['success_text'] = 'count page impressions and user activity of ' . $count_rooms . ' rooms';
     $time_end = getmicrotime();
     $time = round($time_end - $time_start, 0);
     $cron_array['time'] = $time;
     return $cron_array;
 }
Example #2
0
function isDatetimeCorrect($language, $date, $time = '')
{
    $retour = false;
    $date_result = convertDateFromInput($date, $language);
    if (empty($time) or preg_replace('/[A-Za-z ]/', '', $time) != $time) {
        $time_result['conforms'] = '1';
        $time_result['datetime'] = '00:00:00';
    } else {
        $time_result = convertTimeFromInput($time);
    }
    if (empty($date_result['error']) and empty($time_result['error']) and !empty($date_result['conforms']) and !empty($time_result['conforms'])) {
        if (!empty($time_result['datetime']) and !empty($date_result['datetime'])) {
            $value = $date_result['datetime'] . ' ' . $time_result['datetime'];
            if ($value == date('Y-m-d H:i:s', datetime2Timestamp($value))) {
                $retour = true;
            }
        }
    }
    return $retour;
}
Example #3
0
 protected function getListContent($ftItemIdArray = array())
 {
     $return = array();
     $converter = $this->_environment->getTextConverter();
     $session = $this->_environment->getSessionItem();
     // find max count for relevanz bar
     if ($this->_indexed_search === true) {
         $max_count = 0;
         $entry = $this->_list->getFirst();
         while ($entry) {
             if ($this->_items[$entry->getType()][$entry->getItemID()] > $max_count) {
                 $max_count = $this->_items[$entry->getType()][$entry->getItemID()];
             }
             $entry = $this->_list->getNext();
         }
     }
     $id_array = array();
     $disc_id_array = array();
     $item = $this->_list->getFirst();
     while ($item) {
         $id_array[] = $item->getItemID();
         if ($item->getType() == CS_DISCUSSION_TYPE) {
             $disc_id_array[] = $item->getItemID();
         } elseif ($item->getType() == CS_MATERIAL_TYPE) {
             $section_id_array[] = $item->getItemID();
         }
         if ($item->getType() == CS_TODO_TYPE) {
             $step_id_array[] = $item->getItemID();
         }
         $item = $this->_list->getNext();
     }
     $discarticle_manager = $this->_environment->getDiscussionArticleManager();
     $discarticle_list = $discarticle_manager->getAllDiscArticlesItemListByIDArray($disc_id_array);
     $item = $discarticle_list->getFirst();
     $disc_id_array = array();
     while ($item) {
         $disc_id_array[] = $item->getItemID();
         $item = $discarticle_list->getNext();
     }
     $section_manager = $this->_environment->getSectionManager();
     $section_list = $section_manager->getAllSectionItemListByIDArray($section_id_array);
     $item = $section_list->getFirst();
     $section_id_array = array();
     while ($item) {
         $section_id_array[] = $item->getItemID();
         $item = $section_list->getNext();
     }
     $step_manager = $this->_environment->getStepManager();
     $step_list = $step_manager->getAllStepItemListByIDArray($step_id_array);
     $item = $step_list->getFirst();
     $step_id_array = array();
     while ($item) {
         $step_id_array[] = $item->getItemID();
         $item = $step_list->getNext();
     }
     $link_manager = $this->_environment->getLinkManager();
     $file_id_array = $link_manager->getAllFileLinksForListByIDs($id_array);
     $file_id_array = array_merge($file_id_array, $link_manager->getAllFileLinksForListByIDs($disc_id_array));
     $file_id_array = array_merge($file_id_array, $link_manager->getAllFileLinksForListByIDs($section_id_array));
     $file_id_array = array_merge($file_id_array, $link_manager->getAllFileLinksForListByIDs($step_id_array));
     $file_manager = $this->_environment->getFileManager();
     $file_manager->setIDArrayLimit($file_id_array);
     $file_manager->select();
     // search in indexed files
     $ftsearch_manager = $this->_environment->getFTSearchManager();
     $ftsearch_manager->setSearchStatus(true);
     $ftsearch_manager->setWords($this->_search_words[0]);
     $maxRelevanzPoints = 0;
     $entry = $this->_list->getFirst();
     while ($entry) {
         $file_count = 0;
         $type = $entry->getType() === CS_LABEL_TYPE ? $entry->getLabelType() : $entry->getType();
         // files
         $attachment_infos = array();
         if ($entry->getItemType() == CS_MATERIAL_TYPE) {
             $file_count = $entry->getFileListWithFilesFromSections()->getCount();
             $file_list = $entry->getFileListWithFilesFromSections();
         } elseif ($entry->getItemType() == CS_DISCUSSION_TYPE) {
             $file_count = $entry->getFileListWithFilesFromArticles()->getCount();
             $file_list = $entry->getFileListWithFilesFromArticles();
         } elseif ($entry->getItemType() == CS_TODO_TYPE) {
             $file_count = $entry->getFileListWithFilesFromSteps()->getCount();
             $file_list = $entry->getFileListWithFilesFromSteps();
         } else {
             $file_count = $entry->getFileList()->getCount();
             $file_list = $entry->getFileList();
         }
         $file = $file_list->getFirst();
         while ($file) {
             $lightbox = false;
             if ((!isset($_GET['download']) || $_GET['download'] !== 'zip') && in_array($file->getExtension(), array('png', 'jpg', 'jpeg', 'gif'))) {
                 $lightbox = true;
             }
             $info = array();
             #$info['file_name']	= $converter->text_as_html_short($file->getDisplayName());
             $info['file_name'] = $converter->filenameFormatting($file->getDisplayName());
             $info['file_icon'] = $file->getFileIcon();
             $info['file_url'] = $file->getURL();
             $info['file_size'] = $file->getFileSize();
             $info['lightbox'] = $lightbox;
             $attachment_infos[] = $info;
             $file = $file_list->getNext();
         }
         $relevanz = 0;
         $title = $entry->getType() === CS_USER_TYPE ? $entry->getFullname() : $entry->getTitle();
         $modificationDate = $entry->getModificationDate();
         if ($this->_indexed_search === true) {
             $isInAttachedFiles = in_array($entry->getItemID(), $ftItemIdArray);
             $titleCount = 0;
             foreach ($this->_search_words as $searchWord) {
                 if (mb_stristr($title, $searchWord) !== false) {
                     $titleCount++;
                     break;
                 }
             }
             $contextCount = $this->_items[$entry->getType()][$entry->getItemID()] - $titleCount;
             $modificationTimestamp = datetime2Timestamp($modificationDate);
             $timestampDiffToday = time() - $modificationTimestamp;
             $modificationPoints = 0;
             if ($timestampDiffToday <= 604800) {
                 $modificationPoints = 4;
             } else {
                 if ($timestampDiffToday <= 604800 * 4) {
                     $modificationPoints = 3;
                 } else {
                     if ($timestampDiffToday <= 604800 * 4 * 6) {
                         $modificationPoints = 2;
                     } else {
                         if ($timestampDiffToday <= 604800 * 4 * 6 * 2) {
                             $modificationPoints = 1;
                         }
                     }
                 }
             }
             $relevanzPoints = $titleCount * 10 + round(4 * $contextCount / $max_count) + $modificationPoints + ($isInAttachedFiles ? 1 : 0);
             if ($relevanzPoints > $maxRelevanzPoints) {
                 $maxRelevanzPoints = $relevanzPoints;
             }
         }
         $return['items'][] = array('title' => $this->_compareWithSearchText($title), 'type' => $type, 'type_sort' => $this->_environment->getTranslationObject()->getMessage(strtoupper($type) . '_INDEX'), 'relevanz' => $relevanzPoints, 'item_id' => $entry->getItemID(), 'attachment_count' => $file_count, 'attachment_infos' => $attachment_infos, 'activated' => !$entry->isNotActivated(), 'modificator' => $this->_compareWithSearchText($this->getItemModificator($entry)), 'modification_date' => $modificationDate, 'modification_date_print' => $this->_environment->getTranslationObject()->getDateInLang($entry->getModificationDate()));
         $entry = $this->_list->getNext();
     }
     foreach ($return["items"] as &$item) {
         $item["relevanz"] = 100 * $item["relevanz"] / $maxRelevanzPoints;
     }
     /************************************************************************************
      * Now we can sort results
      * This must be done here, because we need to sort the results from all managers
      * (at least when not using the indexed search)
      ************************************************************************************/
     if (!empty($this->_list_parameter_arrray['sort'])) {
         $sortBy = $this->_list_parameter_arrray['sort'];
         // look for "_" and determ sort order
         list($sortBy, $reverse) = explode("_", $sortBy);
         $reverse = $reverse === null ? false : true;
         // different sort cases
         switch ($sortBy) {
             case "title":
                 usort($return['items'], array($this, "sortByTitle"));
                 break;
             case "rubric":
                 usort($return['items'], array($this, "sortByRubric"));
                 break;
             case "modified":
                 usort($return['items'], array($this, "sortByModified"));
                 $return['items'] = array_reverse($return['items']);
                 break;
             case "modificator":
                 usort($return['items'], array($this, "sortByModificator"));
                 break;
             case "relevanz":
                 usort($return['items'], array($this, "sortByRelevanz"));
                 break;
         }
         if ($reverse === true) {
             $return['items'] = array_reverse($return['items']);
         }
     }
     // create id array
     $ids = array();
     foreach ($return['items'] as $entry) {
         $ids[] = $entry['item_id'];
     }
     $session->setValue('cid' . $this->_environment->getCurrentContextID() . '_campus_search_index_ids', $ids);
     $this->_browsing_icons_parameter_array = $this->getBrowsingIconsParameterArray($this->_list_parameter_arrray['from'], $this->_list_parameter_arrray['interval'], sizeof($ids));
     $return['count_all'] = sizeof($ids);
     // limit output
     $limited_return = array();
     $count = 0;
     foreach ($return['items'] as $entry) {
         if ($this->_list_parameter_arrray['interval'] === "all") {
             if ($count >= $this->_list_parameter_arrray['from'] - 1) {
                 $limited_return[] = $entry;
             }
         } else {
             if ($count >= $this->_list_parameter_arrray['from'] - 1 && sizeof($limited_return) < $this->_list_parameter_arrray['interval']) {
                 $limited_return[] = $entry;
             }
         }
         $count++;
     }
     $return['items'] = $limited_return;
     return $return;
 }