Exemplo n.º 1
0
 public function lastlist($path = "", $template = "default", $per_page = false, $ignore_paging = false, $sDaysInterval = '', $bSkipOrderByTime = false)
 {
     if (!$per_page) {
         $per_page = $this->per_page;
     }
     if (strlen($sDaysInterval)) {
         $sStartDaysOffset = '';
         $iStartDaysOffset = 0;
         $sFinishDaysOffset = '';
         $iFinishDaysOffset = 0;
         $arrDaysInterval = preg_split("/\\s+/is", $sDaysInterval);
         if (isset($arrDaysInterval[0])) {
             $sStartDaysOffset = $arrDaysInterval[0];
         }
         if (isset($arrDaysInterval[1])) {
             $sFinishDaysOffset = $arrDaysInterval[1];
         }
         $iNowTime = time();
         if ($sStartDaysOffset === '+') {
             $iStartDaysOffset = PHP_INT_MAX - $iNowTime;
         } elseif ($sStartDaysOffset === '-') {
             $iStartDaysOffset = 0 - PHP_INT_MAX + $iNowTime;
         } else {
             $iStartDaysOffset = intval($sStartDaysOffset);
             $sPostfix = substr($sStartDaysOffset, -1);
             if ($sPostfix === 'm') {
                 // minutes
                 $iStartDaysOffset *= 60;
             } elseif ($sPostfix === 'h' || $sPostfix === 'H') {
                 // hours
                 $iStartDaysOffset *= 60 * 60;
             } else {
                 // days
                 $iStartDaysOffset *= 60 * 60 * 24;
             }
         }
         if ($sFinishDaysOffset === '+') {
             $iFinishDaysOffset = PHP_INT_MAX - $iNowTime;
         } elseif ($sFinishDaysOffset === '-') {
             $iFinishDaysOffset = 0 - PHP_INT_MAX + $iNowTime;
         } else {
             $iFinishDaysOffset = intval($sFinishDaysOffset);
             $sPostfix = substr($sFinishDaysOffset, -1);
             if ($sPostfix === 'm') {
                 // minutes
                 $iFinishDaysOffset *= 60;
             } elseif ($sPostfix === 'h' || $sPostfix === 'H') {
                 // hours
                 $iFinishDaysOffset *= 60 * 60;
             } else {
                 // days
                 $iFinishDaysOffset *= 60 * 60 * 24;
             }
         }
         $iPeriodStart = $iNowTime + $iStartDaysOffset;
         $iPeriodFinish = $iNowTime + $iFinishDaysOffset;
         $bPeriodOrder = $iPeriodStart >= $iPeriodFinish ? false : true;
     } else {
         $iPeriodStart = false;
         $iPeriodFinish = false;
         $bPeriodOrder = false;
     }
     //
     list($template_block, $template_block_empty, $template_line, $template_archive) = def_module::loadTemplates("news/" . $template, "lastlist_block", "lastlist_block_empty", "lastlist_item", "lastlist_archive");
     $curr_page = (int) getRequest('p');
     if ($ignore_paging) {
         $curr_page = 0;
     }
     $parent_id = $this->analyzeRequiredPath($path);
     if ($parent_id === false && $path != KEYWORD_GRAB_ALL) {
         throw new publicException(getLabel('error-page-does-not-exist', null, $path));
     }
     $month = (int) getRequest('month');
     $year = (int) getRequest('year');
     $day = (int) getRequest('day');
     $hierarchy_type_id = umiHierarchyTypesCollection::getInstance()->getTypeByName("news", "item")->getId();
     $object_type_id = umiObjectTypesCollection::getInstance()->getBaseType("news", "item");
     $object_type = umiObjectTypesCollection::getInstance()->getType($object_type_id);
     $publish_time_field_id = $object_type->getFieldId('publish_time');
     $sel = new umiSelection();
     $sel->addElementType($hierarchy_type_id);
     if ($path != KEYWORD_GRAB_ALL) {
         $sel->addHierarchyFilter($parent_id, 0, true);
     }
     $sel->addPermissions();
     if (!$bSkipOrderByTime) {
         $sel->setOrderByProperty($publish_time_field_id, $bPeriodOrder);
     }
     if (!empty($month) && !empty($year) && !empty($day)) {
         $date1 = mktime(0, 0, 0, $month, $day, $year);
         $date2 = mktime(23, 59, 59, $month, $day, $year);
         $sel->addPropertyFilterBetween($publish_time_field_id, $date1, $date2);
     } elseif (!empty($month) && !empty($year)) {
         $date1 = mktime(0, 0, 0, $month, 1, $year);
         $date2 = mktime(23, 59, 59, $month + 1, 0, $year);
         $sel->addPropertyFilterBetween($publish_time_field_id, $date1, $date2);
     } elseif (!empty($year)) {
         $date1 = mktime(0, 0, 0, 1, 1, $year);
         $date2 = mktime(23, 59, 59, 12, 31, $year);
         $sel->addPropertyFilterBetween($publish_time_field_id, $date1, $date2);
     } elseif ($iPeriodStart !== $iPeriodFinish) {
         if ($iPeriodStart != false && $iPeriodFinish != false) {
             if ($sDaysInterval && $sDaysInterval != '+ -') {
                 if ($iPeriodStart < $iPeriodFinish) {
                     $sel->addPropertyFilterBetween($publish_time_field_id, $iPeriodStart, $iPeriodFinish);
                 } else {
                     $sel->addPropertyFilterBetween($publish_time_field_id, $iPeriodFinish, $iPeriodStart);
                 }
             }
         }
     }
     if ($object_type_id) {
         $this->autoDetectOrders($sel, $object_type_id);
         $this->autoDetectFilters($sel, $object_type_id);
     }
     $sel->addLimit($per_page, $curr_page);
     $result = umiSelectionsParser::runSelection($sel);
     $total = umiSelectionsParser::runSelectionCounts($sel);
     if (($sz = sizeof($result)) > 0) {
         $block_arr = array();
         $lines = array();
         for ($i = 0; $i < $sz; $i++) {
             $line_arr = array();
             $element_id = $result[$i];
             $element = umiHierarchy::getInstance()->getElement($element_id);
             if (!$element) {
                 continue;
             }
             $line_arr['attribute:id'] = $element_id;
             $line_arr['node:name'] = $element->getName();
             $line_arr['attribute:link'] = umiHierarchy::getInstance()->getPathById($element_id);
             $line_arr['xlink:href'] = "upage://" . $element_id;
             $line_arr['void:header'] = $lines_arr['name'] = $element->getName();
             if ($publish_time = $element->getValue('publish_time')) {
                 $line_arr['attribute:publish_time'] = $publish_time->getFormattedDate("U");
             }
             $lent_id = $element->getParentId();
             if ($lent_element = umiHierarchy::getInstance()->getElement($lent_id)) {
                 $lent_name = $lent_element->getName();
                 $lent_link = umiHierarchy::getInstance()->getPathById($lent_id);
             } else {
                 $lent_name = "";
                 $lent_link = "";
             }
             $line_arr['attribute:lent_id'] = $lent_id;
             $line_arr['attribute:lent_name'] = $lent_name;
             $line_arr['attribute:lent_link'] = $lent_link;
             $lines[] = self::parseTemplate($template_line, $line_arr, $element_id);
             $this->pushEditable("news", "item", $element_id);
             umiHierarchy::getInstance()->unloadElement($element_id);
         }
         if (is_array($parent_id)) {
             list($parent_id) = $parent_id;
         }
         $block_arr['subnodes:items'] = $block_arr['void:lines'] = $lines;
         $block_arr['archive'] = $total > $i ? $template_archive : "";
         $block_arr['archive_link'] = umiHierarchy::getInstance()->getPathById($parent_id);
         $block_arr['total'] = $total;
         $block_arr['per_page'] = $per_page;
         $block_arr['category_id'] = $parent_id;
         return self::parseTemplate($template_block, $block_arr, $parent_id);
     } else {
         return $template_block_empty;
     }
 }
Exemplo n.º 2
0
 /**
  * Применение выбранных фильтров для подсчёта кол-ва
  *
  * @param umiSelection $selection Объект umiSelection
  */
 public function applySelectedCountFilters(&$selection)
 {
     $filters = $_REQUEST;
     foreach ($filters as $key => $value) {
         if (preg_match("/^filter\\-[\\d]+\$/i", $key)) {
             $iFieldId = substr($key, strpos($key, "-") + 1);
             $value = is_array($value) ? $value : array($value);
             $arEquals = array();
             if (isset($value['gt']) && isset($value['lt'])) {
                 $selection->addPropertyFilterBetween($iFieldId, $value['gt'], $value['lt']);
                 unset($value['gt']);
                 unset($value['lt']);
             }
             foreach ($value as $type => $val) {
                 if ($type === 'gt') {
                     $selection->addPropertyFilterMore($iFieldId, $val);
                 } elseif ($type === 'lt') {
                     $selection->addPropertyFilterLess($iFieldId, $val);
                 } elseif (is_numeric($type)) {
                     $arEquals[] = $val;
                 }
             }
             $selection->addPropertyFilterEqual($iFieldId, $arEquals);
         }
     }
 }
Exemplo n.º 3
0
 public function collectAllChanges($module, $method, $parentElementId = false)
 {
     $endTime = time();
     $beginTime = $endTime - 3600 * 24 * 30;
     $hierarchy_type_id = umiHierarchyTypesCollection::getInstance()->getTypeByName($module, $method)->getId();
     $object_type_id = umiObjectTypesCollection::getInstance()->getBaseType($module, $method);
     $object_type = umiObjectTypesCollection::getInstance()->getType($object_type_id);
     $publish_time_field_id = $object_type->getFieldId('publish_time');
     $sel = new umiSelection();
     $sel->setElementTypeFilter();
     $sel->addElementType($hierarchy_type_id);
     $sel->setPermissionsFilter();
     $sel->addPermissions();
     $sel->setOrderFilter();
     $sel->setOrderByProperty($publish_time_field_id, false);
     $sel->setPropertyFilter();
     $sel->addPropertyFilterBetween($publish_time_field_id, $beginTime, $endTime);
     if ($parentElementId !== false) {
         if (!is_numeric($parentElementId)) {
             $parentElementId = umiHierarchy::getInstance()->getIdByPath($parentElementId);
         }
         $sel->setHierarchyFilter();
         $sel->addHierarchyFilter($parentElementId);
     }
     $result = umiSelectionsParser::runSelection($sel);
     $total = umiSelectionsParser::runSelectionCounts($sel);
     $res = array();
     foreach ($result as $elementId) {
         $childs = sizeof(umiHierarchy::getInstance()->getChilds($elementId));
         $res[] = array("id" => $elementId, "childs" => $childs);
     }
     return array("result" => $res, "total" => $total);
 }
Exemplo n.º 4
0
    function getDateLink($day, $month, $year)
    {
        
        $hierarchy_type_id = umiHierarchyTypesCollection::getInstance()->getTypeByName("news", "item")->getId();

        $object_type_id = umiObjectTypesCollection::getInstance()->getBaseType("news", "item");
        $object_type = umiObjectTypesCollection::getInstance()->getType($object_type_id);
        $publish_time_field_id = $object_type->getFieldId('publish_time');


        $sel = new umiSelection;
        $sel->setElementTypeFilter();
        $sel->addElementType($hierarchy_type_id);
        
        $sel->setPermissionsFilter();
        $sel->addPermissions();

        $date1 = mktime(0, 0, 0, $month, $day, $year);
        $date2 = mktime(23, 59, 59, $month, $day, $year);
        
        $sel->setPropertyFilter();
        $sel->addPropertyFilterBetween($publish_time_field_id, $date1, $date2);
        
        $result = umiSelectionsParser::runSelection($sel);
        $total = umiSelectionsParser::runSelectionCounts($sel);

        if (!empty($result))
        {
        	if ($total > 1)
            {
                $link = "?year=" . $year . "&month=" . $month . "&day=" . $day;	
            }
            else
            {
                list($element_id) = $result;
                $link = umiHierarchy::getInstance()->getPathById($element_id)
                      . "?year=" . $year . "&month=" . $month  ;	
            }
        }
        else
        {
        	$link = "";
        }
        
        return $link;
    }