/** 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; }
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; }
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; }