Source of file SiteConfigThreeStepWorkflow.php
Size: 8,897 Bytes - Last Modified: 2021-12-23T10:28:49+00:00
/var/www/docs.ssmods.com/process/src/code/ThreeStep/SiteConfigThreeStepWorkflow.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 | <?php class SiteConfigThreeStepWorkflow extends DataObjectDecorator { public function extraStatics() { return array( 'db' => array( "CanApproveType" =>"Enum('LoggedInUsers, OnlyTheseUsers', 'OnlyTheseUsers')", "CanPublishType" =>"Enum('LoggedInUsers, OnlyTheseUsers', 'OnlyTheseUsers')" ), 'many_many' => array( "ApproverGroups" => "Group", "PublisherGroups" => "Group", ), 'defaults' => array( "CanApproveType" => "OnlyTheseUsers", "CanPublishType" => "OnlyTheseUsers", ) ); } /** * Update SiteConfig with the top level fields * * @param FieldSet $fields * @return void */ public function updateCMSFields(&$fields) { $fields->addFieldsToTab("Root.Access", array( new HeaderField(_t('SiteTreeCMSWorkflow.APPROVEHEADER', "Who can approve requests inside the CMS?"), 2), $approveTypeField = new OptionsetField( "CanApproveType", "", array( "LoggedInUsers" => _t('SiteTree.EDITANYONE', "Anyone who can log-in to the CMS"), "OnlyTheseUsers" => _t('SiteTree.EDITONLYTHESE', "Only these people (choose from list)") ), "OnlyTheseUsers" ), $approverGroupsField = new TreeMultiselectField("ApproverGroups", "Approver groups") )); $fields->addFieldsToTab("Root.Access", array( new HeaderField(_t('SiteTreeCMSWorkflow.PUBLISHAPPROVEDHEADER', "Who can publish approved requests inside the CMS?"), 2), $actionTypeField = new OptionsetField( "CanPublishType", "", array( "LoggedInUsers" => _t('SiteTree.EDITANYONE', "Anyone who can log-in to the CMS"), "OnlyTheseUsers" => _t('SiteTree.EDITONLYTHESE', "Only these people (choose from list)") ), "OnlyTheseUsers" ), $actionerGroupsField = new TreeMultiselectField("PublisherGroups", "Publisher groups") )); if (!Permission::check('EDIT_SITECONFIG')) { $fields->replaceField('CanApproveType', $approveTypeField->performReadonlyTransformation()); $fields->replaceField('ApproverGroups', $approverGroupsField->performReadonlyTransformation()); $fields->replaceField('CanPublishType', $actionTypeField->performReadonlyTransformation()); $fields->replaceField('PublisherGroups', $actionerGroupsField->performReadonlyTransformation()); } } /** * Returns a DataObjectSet of all the members that can approve pages * on this site by default */ public function ApproverMembers() { if ($this->owner->CanApproveType == 'OnlyTheseUsers') { $groups = $this->owner->ApproverGroups(); $members = new DataObjectSet(); if ($groups) { foreach ($groups as $group) { $members->merge($group->Members()); } } // Default to ADMINs, if something goes wrong if (!$members->Count()) { $group = Permission::get_groups_by_permission('ADMIN')->first(); $members = $group->Members(); } return $members; } elseif ($this->owner->CanApproveType == 'LoggedInUsers') { return Permission::get_members_by_permission('CMS_ACCESS_CMSMain'); } else { $group = Permission::get_groups_by_permission('ADMIN')->first(); return $group->Members(); } } /** * Returns a DataObjectSet of all the members that can publish pages * on this site by default */ public function PublisherMembers() { if ($this->owner->CanPublishType == 'OnlyTheseUsers') { $groups = $this->owner->PublisherGroups(); $members = new DataObjectSet(); if ($groups) { foreach ($groups as $group) { $members->merge($group->Members()); } } // Default to ADMINs, if something goes wrong if (!$members->Count()) { $group = Permission::get_groups_by_permission('ADMIN')->first(); $members = $group->Members(); } return $members; } elseif ($this->owner->CanPublishType == 'LoggedInUsers') { return Permission::get_members_by_permission('CMS_ACCESS_CMSMain'); } else { $group = Permission::get_groups_by_permission('ADMIN')->first(); return $group->Members(); } } /** * This function should return true if the current user can publish pages * on this site by default * * @return boolean */ public function canPublish($member = null) { if (!$member && $member !== false) { $member = Member::currentUser(); } if (is_numeric($member)) { $member = DataObject::get_by_id('Member', $member); } // check for admin permission if (Permission::checkMember($member, 'ADMIN')) { return true; } // check for workflow admin permission if (Permission::checkMember($member, 'IS_WORKFLOW_ADMIN')) { return true; } // check for missing cmsmain permission if (!Permission::checkMember($member, 'CMS_ACCESS_CMSMain')) { return false; } // check for empty spec if (!$this->owner->CanPublishType || $this->owner->CanPublishType == 'Anyone') { return true; } // check for any logged-in users if ($this->owner->CanPublishType == 'LoggedInUsers' && !Permission::checkMember($member, 'CMS_ACCESS_CMSMain')) { return false; } // check for specific groups if ($this->owner->CanPublishType == 'OnlyTheseUsers' && (!$member || !$member->inGroups($this->owner->PublisherGroups()))) { return false; } return true; } /** * This function should return true if the current user can approve pages * on this site by default * * @return boolean */ public function canApprove($member = null) { if (!$member && $member !== false) { $member = Member::currentUser(); } if (is_numeric($member)) { $member = DataObject::get_by_id('Member', $member); } // check for admin permission if (Permission::checkMember($member, 'ADMIN')) { return true; } // check for workflow admin permission if (Permission::checkMember($member, 'IS_WORKFLOW_ADMIN')) { return true; } // check for missing cmsmain permission if (!Permission::checkMember($member, 'CMS_ACCESS_CMSMain')) { return false; } // check for empty spec if (!$this->owner->CanApproveType || $this->owner->CanApproveType == 'Anyone') { return true; } // check for any logged-in users if ($this->owner->CanApproveType == 'LoggedInUsers' && !Permission::checkMember($member, 'CMS_ACCESS_CMSMain')) { return false; } // check for specific groups if ($this->owner->CanApproveType == 'OnlyTheseUsers' && (!$member || !$member->inGroups($this->owner->ApproverGroups()))) { return false; } return true; } /** * Make sure that a page has some peeps associated * * @return void */ public function onAfterWrite() { $bt = defined('DB::USE_ANSI_SQL') ? "\"" : "`"; if (!$this->owner->ApproverGroups()->Count() && $this->owner->CanApproveType == 'OnlyTheseUsers') { $SQL_group = Convert::raw2sql('site-content-approvers'); $groupCheckObj = DataObject::get_one('Group', "{$bt}Code{$bt} = '{$SQL_group}'"); if ($groupCheckObj) { $this->owner->ApproverGroups()->add($groupCheckObj); } } if (!$this->owner->PublisherGroups()->Count() && $this->owner->CanPublishType == 'OnlyTheseUsers') { $SQL_group = Convert::raw2sql('site-content-publishers'); $groupCheckObj = DataObject::get_one('Group', "{$bt}Code{$bt} = '{$SQL_group}'"); if ($groupCheckObj) { $this->owner->PublisherGroups()->add($groupCheckObj); } } } } |