private function recalculateStages() { if (self::$supress_triggers) { return; } $id = $this->owner->ID; // ID gets set to 0 on publish, so we need to save it ModeratableState::push_state("any"); self::$supress_triggers = true; if ($approved = $this->latestVersionMatching($id, $this->where('approved'))) { $this->owner->ID = $id; self::$generate_new_version = true; $this->owner->publish($approved, $this->liveStage); } else { ModeratableState::push_state('approved'); $this->owner->delete(); ModeratableState::pop_state(); } /* Update the Default stage */ $this->owner->ID = $id; if ($latest = $this->latestVersionMatching($id)) { $this->owner->ID = $id; self::$generate_new_version = true; $this->owner->publish($latest, $this->defaultStage); } else { $this->owner->delete(); } self::$supress_triggers = false; ModeratableState::pop_state(); }
public static function pop_state() { self::$state = array_pop(self::$stack); }
public function Results($searchCriteria) { switch ($searchCriteria['State']) { case 'approved': $moderationState = "approved"; $title = "Approved"; $commands = array('unapprove' => 'Unapprove', 'isspam' => 'Is Spam'); break; case 'unapproved': $moderationState = "unapproved"; $title = "Waiting Moderation"; $commands = array('approve' => 'Approve', 'isspam' => 'Is Spam'); break; default: $moderationState = "spam"; $title = "Spam"; $commands = array('approve' => 'Approve', 'isham' => 'Not Spam'); } $commands['delete'] = 'Delete'; if (($class = $this->getModelClass()) == 'All') { $ds = new DataObjectSet(); foreach ($this->parentController->getManagedModels() as $class) { if ($class != 'All') { $ds->merge(singleton($class)->getModeratedItems($moderationState, '', 'Created')); } } } else { ModeratableState::push_state($moderationState); $ds = DataObject::get($class, "{$this->getSearchQuery($searchCriteria)->getFilter()}", 'Created', null, $searchCriteria['Page'] * self::$page_length . ',' . self::$page_length); ModeratableState::pop_state(); } if (!$ds) { return '<p>No Results</p>'; } $blocks = array(); $paging = array(); $fields = new FieldSet(); foreach ($searchCriteria as $k => $v) { if ($k != 'SecurityID') { $fields->push(new HiddenField($k, $k, $v)); } } $form = new Form($this, 'SearchForm', $fields, new FieldSet()); $form->setHTMLID('Form_CurrentSearchForm'); $blocks[] = $form->forTemplate(); if ($ds) { foreach ($ds as $do) { $links = array(); foreach ($commands as $command => $text) { $links[] = "<input class='action ajaxaction' type='button' value='{$text}' action='{$this->parentController->Link("{$do->ClassName}/{$do->ID}/{$moderationState}/{$command}")}' />"; } $templates = array(); foreach (array_reverse(ClassInfo::ancestry($do->ClassName)) as $class) { if ($class == 'DataObject') { break; } $templates[] = $class . 'Moderation'; } $data = new ArrayData(array('ID' => $do->ID, 'ModerationLinks' => implode('', $links), 'Preview' => $do->renderWith($templates))); $blocks[] = $data->renderWith('ModerationPreview'); } } if ($ds->MoreThanOnePage()) { // Build search info $paging[] = '<div>Viewing Page ' . $ds->CurrentPage() . ' of ' . $ds->TotalPages() . '</div>'; if ($ds->NotFirstPage()) { $paging[] = "<input class='action pageaction' type='button' value='Prev' action='prev' />"; } if ($ds->NotLastPage()) { $paging[] = "<input class='action pageaction' type='button' value='Next' action='next' />"; } } $data = new ArrayData(array('State' => ucwords($searchCriteria['State']), 'Class' => $this->getModelClass(), 'Pagination' => implode("\n", $paging), 'Moderation' => implode("\n", $blocks))); return $data->renderWith('Moderation'); }