/** * Clean data method * * @param array $data * @return array $data */ protected function _cleanData($data) { // handle if we are saving a page automatically and only have the alias if (!empty($data['Alias']['name']) && empty($data['WebpageMenuItem']['item_url'])) { $data['WebpageMenuItem']['item_url'] = '/' . $data['Alias']['name']; } // handle beforeSave() type data if (empty($data['WebpageMenuItem']['parent_id']) && !empty($data['WebpageMenuItem']['menu_id'])) { $data['WebpageMenuItem']['parent_id'] = $data['WebpageMenuItem']['menu_id']; } // handle save() type data if (empty($data['parent_id']) && !empty($data['menu_id'])) { $data['parent_id'] = $data['menu_id']; } // handle beforeSave() type data if (empty($data['WebpageMenuItem']['name']) && !empty($data['WebpageMenuItem']['item_text'])) { $data['WebpageMenuItem']['name'] = $data['WebpageMenuItem']['item_text']; } // handle save() type data if (empty($data['name']) && !empty($data['item_text'])) { $data['name'] = $data['item_text']; } // put data in, to create a check data for whether to create page or not() // it is in the cleanData function because we add some data to the save depending on creation of a page // make sure this gets fired last after all other $data updates if (!empty($data['WebpageMenuItem']['item_url']) && strpos($data['WebpageMenuItem']['item_url'], 'http') !== 0) { // if link_url starts with http do nothing } elseif ($data['WebpageMenuItem']['page_type'] == 'content' || $data['WebpageMenuItem']['page_type'] == 'section' || $data['WebpageMenuItem']['page_type'] == 'plugin') { // NOTE : don't change this if above, if you do installing a new site fails App::uses('Alias', 'Model'); $Alias = new Alias(); // else see if the page already exists $url = strpos($data['WebpageMenuItem']['item_url'], '/') === 0 ? substr($data['WebpageMenuItem']['item_url'], 1) : $data['WebpageMenuItem']['item_url']; $urlAlias = $Alias->getAlias($url); $textAlias = $Alias->getAlias($data['WebpageMenuItem']['item_text']); if (!empty($urlAlias['old']) || !empty($textAlias['old'])) { // if it does we don't need create a page, just move on ignoring the rest $data['WebpageMenuItem']['item_url'] = !empty($data['WebpageMenuItem']['item_url']) ? $data['WebpageMenuItem']['item_url'] : '/' . $textAlias['old']; } elseif ($data['WebpageMenuItem']['page_type'] == 'content' || $data['WebpageMenuItem']['page_type'] == 'section') { // if not then create page (depending on page type) $this->set($data); if ($this->validates()) { // map menu data to webpage data $webpage['Alias']['name'] = empty($data['WebpageMenuItem']['item_url']) ? $Alias->getNewAlias($data['WebpageMenuItem']['item_text']) : null; // if link_url is blank, set the link_url from the name (asciifyy) $webpage['Webpage']['name'] = $data['WebpageMenuItem']['item_text']; $webpage['Webpage']['title'] = $data['WebpageMenuItem']['item_text']; App::uses('Webpage', 'Webpages.Model'); $Webpage = new Webpage(); $webpage = $Webpage->placeholder($webpage, array('create' => true, 'type' => $data['WebpageMenuItem']['page_type'])); unset($webpage['Webpage']); // don't want returned data to save again unset($webpage['Child']); // don't want returned data to save again unset($webpage['Alias']); // don't want returned data to save again $data = Set::merge($data, $webpage); } else { // it isn't going to save anyway, it didn't validate so do nothing, data should be resubmitted } } elseif ($data['WebpageMenuItem']['page_type'] == 'plugin') { $plugin = ZuhaInflector::pluginize($data['WebpageMenuItem']['item_text']); App::uses($plugin . 'AppModel', $plugin . '.Model'); $className = $plugin . 'AppModel'; $Model = new $className(); if (method_exists($Model, 'menuInit')) { // see if the plugin model has a function to generate starting links (note : handle test data in the schema) $data = $Model->menuInit($data); } else { throw new Exception('Create the menuInit() method in the ' . $plugin . 'AppModel file.'); } } } if (!empty($data['WebpageMenuItem']['parent_id']) && empty($data['WebpageMenuItem']['user_role_id'])) { $data['WebpageMenuItem']['user_role_id'] = $this->field('user_role_id', array($this->alias . '.id' => $data['WebpageMenuItem']['parent_id'])); } if (!empty($data['ChildMenuItem'][0])) { for ($i = 0; $i < count($data['ChildMenuItem']); ++$i) { if (empty($data['ChildMenuItem'][$i]['user_role_id']) && !empty($data['WebpageMenuItem']['user_role_id'])) { $data['ChildMenuItem'][$i]['user_role_id'] = $data['WebpageMenuItem']['user_role_id']; } } } return $data; }