/** * Action for the module, finds the appropriate module and passes the request handling on * @return mixed */ public function m($request = null) { if (!$request) { $request = $this->owner->request; } if ($request) { if (($urlSegment = $request->param('ID')) && ($moduleAction = $request->param('OtherID'))) { $request->shift(2); $module = ContentModule::get()->filter('URLSegment', $urlSegment)->first(); if ($module && $module->hasMethod($moduleAction)) { $response = $module->{$moduleAction}(); if (is_subclass_of($response, 'RequestHandler') && !$response instanceof Form) { return $response->handleRequest($request, new DataModel()); } return $response; } } else { if ($urlSegment = $request->param('ID')) { //default index action $request->shift(1); $module = ContentModule::get()->filter('URLSegment', $urlSegment)->first(); if ($module && $module->hasMethod('index')) { $return = $module->index(); if (is_subclass_of($return, 'RequestHandler')) { $return = $return->handleRequest(); } //ajax request the module handles the response if ($this->owner->request->isAjax()) { return $return; } //for normal request, the module can change its state, but the request is handled by the page return $this->owner->index(); } } } $this->owner->redirect($this->owner->Link()); } else { if (($urlSegment = $this->owner->request->param('ID')) && ($moduleAction = $this->owner->request->param('OtherID'))) { $module = ContentModule::get()->filter('URLSegment', $urlSegment)->first(); if ($module && $module->hasMethod($moduleAction)) { return $module->{$moduleAction}(); } } else { if ($urlSegment = $this->owner->request->param('ID')) { //default index action $module = ContentModule::get()->filter('URLSegment', $urlSegment)->first(); if ($module && $module->hasMethod('index')) { $return = $module->index(); //ajax request the module handles the response if ($this->owner->request->isAjax()) { return $return; } //for normal request, the module can change its state, but the request is handled by the page return $this->owner->index(); } } } $this->owner->redirect($this->owner->Link()); } }
function onBeforeWrite() { parent::onBeforeWrite(); if (!$this->SortOrder && $this->ModuleAreaID && ($modules = ContentModule::get()->filter(array('ModuleAreaID' => $this->ModuleAreaID)))) { $this->SortOrder = $modules->max('SortOrder') + 1; } }
public function onBeforeWrite() { parent::onBeforeWrite(); //default title if (!$this->Title) { $class = get_class($this); $objects = DataObject::get($class); $this->Title = singleton($class)->i18n_singular_name() . ' ' . ($objects->count() + 1); } if (!$this->URLSegment) { $this->URLSegment = URLSegmentFilter::create()->filter($this->Title); } else { if ($this->isChanged('URLSegment')) { $this->URLSegment = URLSegmentFilter::create()->filter($this->URLSegment); } } if ($this->isChanged('URLSegment') && ($original = $this->URLSegment)) { //make sure it is unique $safe = false; $counter = 1; while (!$safe) { $counter++; if (ContentModule::get()->filter(array('URLSegment' => $this->URLSegment, 'ID' => $this->ID))->first()) { $this->URLSegment = $original . '-' . $counter; } else { $safe = true; } } } }
public function PublishedContentModules() { return ContentModule::get()->filter(array('ModularPageID' => $this->ID, 'Published' => 1))->sort('SortOrder'); }
/** * Handles actions on fields for the module (e.g. uploadfield) * Expects the name of the field to be in the ID param (in the form ContentModule[ModuleID][FieldName], * and the action to be in the OtherID param */ public function modulefield() { if ($fieldName = $this->request->param('ID')) { $matches = array(); if (preg_match('/ContentModule\\[([0-9]{1,})\\]/i', $fieldName, $matches)) { $moduleID = $matches[1]; $module = ContentModule::get()->byID($moduleID); if ($module) { //get original field name $matches2 = array(); preg_match('/ContentModule\\[[0-9]{1,}\\]\\[([a-zA-Z0-9]{1,})\\]/i', $fieldName, $matches2); $originalFieldName = !empty($matches2[1]) ? $matches2[1] : ''; //composite field /*if (strpos($fieldName, '[')) { $openingBracket = strpos($fieldName, '[') - 1; $closingBracket = strpos($fieldName, ']') - 1; $fieldName = substr($fieldName, 0, $openingBracket); $subFieldName = substr($fieldName, $openingBracket + 2, $closingBracket - $openingBracket + 2); echo $fieldName . ' ' . $subFieldName;exit; }*/ //find the field $fields = $module->EditFields()->dataFields(); if ($fields) { foreach ($fields as $field) { if ($field->getName() == $fieldName) { //setup field name(s) if ($field->hasMethod('setContentModuleNames')) { $field->setContentModuleNames($originalFieldName, $fieldName); } else { $field->setName($originalFieldName); } //set record if required if ($field->hasMethod('setRecord')) { $field->setRecord($module); } return $field; //check if there is a url handler for this action /* $handlers = $field->stat('url_handlers'); if ($handlers && !empty($handlers[$action])) { return $field->{$handlers[$action]}($this->request); } else if ($field->hasMethod($action)) { return $field->{$action}($this->request); }*/ } } } } } } return $this->httpError(404); }
/** * Returns the ContentModules sorted * * @return DataList */ public function SortedContentModules() { return ContentModule::get()->innerJoin('Page_ContentModules', '"ContentModule"."ID" = "Page_ContentModules"."ContentModuleID"')->where("\"Page_ContentModules\".\"PageID\" = '{$this->owner->ID}'")->sort('"Sort" ASC'); }