/** * Saves or updates the scaffolded model. * * @param CakeRequest $request Request Object for scaffolding * @param string $action add or edit * @return mixed Success on save/update, add/edit form if data is empty or error if save or update fails * @throws NotFoundException */ protected function _scaffoldSave(CakeRequest $request, $action = 'edit') { $formAction = 'edit'; $success = __d('cake', 'updated'); if ($action === 'add') { $formAction = 'add'; $success = __d('cake', 'saved'); } if ($this->controller->beforeScaffold($action)) { if ($action == 'edit') { if (isset($request->params['pass'][0])) { $this->ScaffoldModel->id = $request['pass'][0]; } if (!$this->ScaffoldModel->exists()) { throw new NotFoundException(__d('cake', 'Invalid %s', Inflector::humanize($this->modelKey))); } } if (!empty($request->data)) { if ($action == 'create') { $this->ScaffoldModel->create(); } if ($this->ScaffoldModel->save($request->data)) { if ($this->controller->afterScaffoldSave($action)) { $message = __d('cake', 'The %1$s has been %2$s', Inflector::humanize($this->modelKey), $success); return $this->_sendMessage($message); } else { return $this->controller->afterScaffoldSaveError($action); } } else { if ($this->_validSession) { $this->controller->Session->setFlash(__d('cake', 'Please correct errors below.')); } } } if (empty($request->data)) { if ($this->ScaffoldModel->id) { $this->controller->data = $request->data = $this->ScaffoldModel->read(); } else { $this->controller->data = $request->data = $this->ScaffoldModel->create(); } } foreach ($this->ScaffoldModel->belongsTo as $assocName => $assocData) { $varName = Inflector::variable(Inflector::pluralize(preg_replace('/(?:_id)$/', '', $assocData['foreignKey']))); $this->controller->set($varName, $this->ScaffoldModel->{$assocName}->find('list')); } foreach ($this->ScaffoldModel->hasAndBelongsToMany as $assocName => $assocData) { $varName = Inflector::variable(Inflector::pluralize($assocName)); $this->controller->set($varName, $this->ScaffoldModel->{$assocName}->find('list')); } return $this->_scaffoldForm($formAction); } elseif ($this->controller->scaffoldError($action) === false) { return $this->_scaffoldError(); } }
/** * testToBeInheritedGuardmethods method * * @return void */ public function testToBeInheritedGuardmethods() { $request = new CakeRequest('controller_posts/index'); $Controller = new Controller($request, $this->getMock('CakeResponse')); $this->assertTrue($Controller->beforeScaffold('')); $this->assertTrue($Controller->afterScaffoldSave('')); $this->assertTrue($Controller->afterScaffoldSaveError('')); $this->assertFalse($Controller->scaffoldError('')); }
/** * Saves or updates the scaffolded model. * * @param CakeRequest $request Request Object for scaffolding * @param string $action add or edit * @return mixed Success on save/update, add/edit form if data is empty or error if save or update fails * @throws NotFoundException */ protected function _scaffoldSave(CakeRequest $request, $action = 'edit') { $modelClass = $this->controller->modelClass; $dontSave = false; $formAction = 'edit'; $success = __d('cake', 'editado'); if ($action === 'add') { $formAction = 'add'; $success = __d('cake', 'adicionado'); } if ($this->controller->beforeScaffold($action)) { if ($action == 'edit') { if (isset($request->params['pass'][0])) { $this->ScaffoldModel->id = $request['pass'][0]; } if (!$this->ScaffoldModel->exists()) { throw new NotFoundException(__d('cake', '%s inválido', Inflector::humanize($this->modelKey))); } } if (!empty($request->data)) { if ($action == 'create') { $this->ScaffoldModel->create(); } foreach ($request->data[$modelClass] as $fieldKey => $fieldVal) { $toUrl = ''; if (subStr($fieldKey, 0, 12) == 'url_amigavel' && isset($this->controller->transformUrl) && is_array($this->controller->transformUrl)) { foreach ($this->controller->transformUrl as $urlField => $urlKey) { if ($fieldKey == $urlField) { $toUrl = $request->data[$modelClass][$urlKey]; } } $url = $this->stringToSlug($toUrl); $request->data[$modelClass][$fieldKey] = $url; } /* if(subStr($fieldKey,0,12)=='url_amigavel') { $toUrl = ''; $lang = subStr($fieldKey, 13); if(array_key_exists('titulo_'.$lang, $request->data[$modelClass])) { $toUrl = $request->data[$modelClass]['titulo_'.$lang]; } if(array_key_exists('nome_'.$lang, $request->data[$modelClass])) { $toUrl = $request->data[$modelClass]['nome_'.$lang]; } $url = $this->stringToSlug($toUrl); $request->data[$modelClass][$fieldKey] = $url; } */ } foreach ($request->data[$modelClass] as $key => $val) { if (is_Array($val) && array_Key_Exists('name', $val)) { eval($this->getZoioConfig()); $dir = $zConfig[$modelClass][$key]['dir']; $resize = array('w' => $zConfig[$modelClass][$key]['width'], 'h' => $zConfig[$modelClass][$key]['height'], 'force' => $zConfig[$modelClass][$key]['forceresize']); $types = $zConfig[$modelClass][$key]['types']; $fileName = $zConfig[$modelClass][$key]['filename']; $createDir = $zConfig[$modelClass][$key]['createfolder']; $createThumb = $zConfig[$modelClass][$key]['thumb']; if ($action == 'edit') { $force = $zConfig[$modelClass][$key]['forceupload'][1]; } else { $force = $zConfig[$modelClass][$key]['forceupload'][0]; } if ($createThumb['width'] == 0 && $createThumb['height'] == 0) { $createThumb = false; } $actionAndId = array('action' => $action, 'id' => $request->data[$modelClass]['id']); if ($resize['w'] == 0 && $resize['h'] == 0) { $resize = false; } $upLoaded = $this->uploadFile($dir, $val, $types, $resize, $force, $fileName, $createDir, $actionAndId, '', $createThumb); if ($upLoaded[0]) { $dontSave = false; if ($upLoaded[1] != '') { $request->data[$modelClass][$key] = $upLoaded[1]; if ($createThumb) { $request->data[$modelClass][str_replace('file', 'th_hidden', $key)] = $upLoaded[2]; } } else { $registro = $this->{$modelClass}->find('all', array('conditions' => array($modelClass . '.id' => $this->data[$modelClass]['id']))); if (count($registro) > 0) { foreach ($registro[0][$modelClass] as $regKey => $regVal) { if ($regKey == $key) { $request->data[$modelClass][$key] = $regVal; } } } else { $request->data[$modelClass][$key] = ''; } } } else { if ($upLoaded[1]) { $this->controller->Session->setFlash($upLoaded[1]); } $dontSave = true; } } } if (array_key_exists('deleteimagens', $request->data[$modelClass]) && $request->data[$modelClass]['deleteimagens'] != '') { $val = $request->data[$modelClass]['deleteimagens']; $delete = explode(',', substr($val, 0, -1)); $registro = $this->{$modelClass}->find('all', array('conditions' => array($modelClass . '.id' => $this->data[$modelClass]['id']))); foreach ($delete as $fieldKey) { $fieldVal_th = $registro[0][$modelClass][$fieldKey]; $fieldVal = $registro[0][$modelClass][str_replace('_th_hidden', '_file', $fieldKey)]; $fieldFile = str_replace('_th_hidden', '_file', $fieldKey); $request->data[$modelClass][$fieldKey] = ''; $request->data[$modelClass][$fieldFile] = ''; unlink($fieldVal_th); unlink($fieldVal); } } if (!$dontSave) { if ($this->ScaffoldModel->save($request->data)) { if ($this->controller->afterScaffoldSave($action)) { $message = __d('cake', '%1$s foi %2$s', Inflector::humanize($this->modelKey), $success); return $this->_sendMessage($message); } else { return $this->controller->afterScaffoldSaveError($action); } } else { if ($this->_validSession) { $this->controller->Session->setFlash(__d('cake', 'Por favor, corrija os campos abaixo.')); } } } } if (empty($request->data)) { if ($this->ScaffoldModel->id) { $this->controller->data = $request->data = $this->ScaffoldModel->read(); } else { $this->controller->data = $request->data = $this->ScaffoldModel->create(); } } foreach ($this->ScaffoldModel->belongsTo as $assocName => $assocData) { $varName = Inflector::variable(Inflector::pluralize(preg_replace('/(?:_id)$/', '', $assocData['foreignKey']))); $this->controller->set($varName, $this->ScaffoldModel->{$assocName}->find('list')); } foreach ($this->ScaffoldModel->hasAndBelongsToMany as $assocName => $assocData) { $varName = Inflector::variable(Inflector::pluralize($assocName)); $this->controller->set($varName, $this->ScaffoldModel->{$assocName}->find('list')); } return $this->_scaffoldForm($formAction); } elseif ($this->controller->scaffoldError($action) === false) { return $this->_scaffoldError(); } }