static function can_publish_multiple($ids, $memberID, $useCached = true) { $checks = SiteTree::batch_permission_check($ids, $memberID, 'CanPublishType', 'SiteTree_PublisherGroups', 'canPublish', null, $useCached); return $checks; }
/** * Get all publication requests assigned to a specific publisher * * @param string $class WorkflowRequest subclass * @param Member $publisher * @param array $status One or more stati from the $Status property * @return DataObjectSet */ 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); $classes[] = $class; $classesSQL = implode("','", $classes); // build filter $filter = "{$bt}WorkflowRequest{$bt}.{$bt}ClassName{$bt} IN ('{$classesSQL}')\n\t\t"; if ($status) { $filter .= "AND {$bt}WorkflowRequest{$bt}.{$bt}Status{$bt} IN (" . $statusStr . ")"; } $return = DataObject::get("SiteTree", $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} " . "LEFT JOIN {$bt}WorkflowRequest_Approvers{$bt} ON {$bt}WorkflowRequest{$bt}.{$bt}ID{$bt} = {$bt}WorkflowRequest_Approvers{$bt}.{$bt}WorkflowRequestID{$bt}"); if (!$return) { return new DataObjectSet(); } $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; }
/** * This function should return true if the current user can publish this * page. * * @return boolean True if the current user can publish this page. */ public function canPublish($member = null, $dbg = false) { if (!$member) { $member = Member::currentUser(); } if (!$member) { return false; } if ($member instanceof Member) { $memberID = $member->ID; } else { $memberID = $member; } // can_publish_multiple will check the cache so this isn't necessary //if(isset(SiteTree::$cache_permissions['CanPublishType'][$this->owner->ID])) { // return SiteTree::$cache_permissions['CanPublishType'][$this->owner->ID]; //} // DANGER, WILL ROBINSON! // we currently have not implemented extensions here. if you do // be aware that the WorkflowRequest::get_by_* functions use // batch_permission_check directly so you will need to ammend // them appropriately // check for (workflow)admin permission if (Permission::checkMember($member, array('ADMIN', 'IS_WORKFLOW_ADMIN'))) { return true; } $results = SiteTree::batch_permission_check(array($this->owner->ID), $memberID, 'CanPublishType', 'SiteTree_PublisherGroups', 'canPublish'); return isset($results[$this->owner->ID]) ? $results[$this->owner->ID] : false; }