function getContextNav() { if($this->ID > 0) { $pages = new DataObjectSet(); $pages->push($this->Parent()); $pages->merge($this->getPagesBySibling()); $pages->merge($this->getPagesByKeyword()); $pages->merge($this->getPagesByBlogTags()); $pages->merge($this->getPagesByReferer()); $pages->removeDuplicates(); $currentPage = $pages->find('ID', $this->ID); if($currentPage) $pages->remove($currentPage); return $pages; } else { return false; } }
public static function get_by_publisher($class, $publisher, $status = null) { // To ensure 2.3 and 2.4 compatibility $bt = defined('DB::USE_ANSI_SQL') ? "\"" : "`"; if ($status) { $statusStr = "'" . implode("','", $status) . "'"; } $classes = (array) ClassInfo::subclassesFor($class); $classesSQL = implode("','", $classes); // build filter $filter = "{$bt}WorkflowRequest{$bt}.{$bt}ClassName{$bt} IN ('{$classesSQL}') "; if ($status) { $filter .= "AND {$bt}WorkflowRequest{$bt}.{$bt}Status{$bt} IN (" . $statusStr . ")"; } $onDraft = Versioned::get_by_stage("SiteTree", "Stage", $filter, "{$bt}SiteTree{$bt}.{$bt}LastEdited{$bt} DESC", "LEFT JOIN {$bt}WorkflowRequest{$bt} ON {$bt}WorkflowRequest{$bt}.{$bt}PageID{$bt} = {$bt}SiteTree{$bt}.{$bt}ID{$bt} "); $onLive = Versioned::get_by_stage("SiteTree", "Live", $filter, "{$bt}SiteTree_Live{$bt}.{$bt}LastEdited{$bt} DESC", "LEFT JOIN {$bt}WorkflowRequest{$bt} ON {$bt}WorkflowRequest{$bt}.{$bt}PageID{$bt} = {$bt}SiteTree_Live{$bt}.{$bt}ID{$bt} "); $return = new DataObjectSet(); $return->merge($onDraft); $return->merge($onLive); $return->removeDuplicates(); $canPublish = SiteTree::batch_permission_check($return->column('ID'), $publisher->ID, 'CanPublishType', 'SiteTree_PublisherGroups', 'canPublish'); foreach ($return as $page) { if (!isset($canPublish[$page->ID]) || !$canPublish[$page->ID]) { $return->remove($page); } } return $return; }