Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- class OrderDecorator extends DataObjectDecorator {
- function extraStatics() {
- return array(
- 'has_one' => array(
- 'Subsite' => 'Subsite',
- )
- );
- }
- /**
- * Amends the CMS tree title for folders in the Files & Images section.
- * Prefixes a '* ' to the folders that are accessible from all subsites.
- */
- function alternateTreeTitle() {
- if($this->owner->SubsiteID == 0) return " * " . $this->owner->Title;
- else return $this->owner->Title;
- }
- /**
- * Add subsites-specific fields to the folder editor.
- */
- function updateCMSFields(FieldSet &$fields) {
- if ($this->owner->SubsiteID) {
- $subsite_ID = $this->owner->SubsiteID;
- }
- else {
- $subsite_ID = Subsite::currentSubsiteID();
- }
- $fields->addFieldToTab('Root.Main', new HiddenField("SubsiteID", "Subsite", $subsite_ID));
- }
- /**
- * Update any requests to limit the results to the current site
- */
- function augmentSQL(SQLQuery &$query) {
- // If you're querying by ID, ignore the sub-site - this is a bit ugly... (but it was WAYYYYYYYYY worse)
- if(!$query->where || !preg_match('/\.(\'|"|`|)ID(\'|"|`|)/', $query->where[0])) {
- if($context = DataObject::context_obj()) $subsiteID = (int) $context->SubsiteID;
- else $subsiteID = (int) Subsite::currentSubsiteID();
- // The foreach is an ugly way of getting the first key :-)
- foreach($query->from as $tableName => $info) {
- $where = "\"$tableName\".\"SubsiteID\" IN (0, $subsiteID)";
- $query->where[] = $where;
- break;
- }
- $isCounting = strpos($query->select[0], 'COUNT') !== false;
- // Ordering when deleting or counting doesn't apply
- if(!$query->delete && !$isCounting) {
- $query->orderby = "\"SubsiteID\"" . ($query->orderby ? ', ' : '') . $query->orderby;
- }
- }
- }
- function onBeforeWrite() {
- if (!$this->owner->ID && !$this->owner->SubsiteID) {
- $this->owner->SubsiteID = Subsite::currentSubsiteID();
- }
- }
- function canEdit() {
- // Check the CMS_ACCESS_SecurityAdmin privileges on the subsite that owns this group
- $subsiteID = Session::get('SubsiteID');
- if($subsiteID&&$subsiteID == $this->owner->SubsiteID) {
- return true;
- } else {
- Session::set('SubsiteID', $this->owner->SubsiteID);
- $access = Permission::check('CMS_ACCESS_AssetAdmin');
- Session::set('SubsiteID', $subsiteID);
- return $access;
- }
- }
- /**
- * Return a piece of text to keep DataObject cache keys appropriately specific
- */
- function cacheKeyComponent() {
- return 'subsite-'.Subsite::currentSubsiteID();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement