/**
  * 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;
             }
         }
     }
 }
Ejemplo n.º 4
0
 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');
 }