/** * Backend area (only rightpane) with a * form to edit a file. * Redirect on succes to index page. * @return void */ public function editFile() { //get id $id = (int) $this->req->req('id', 0); //load data - if loading fails redirect to index page if (!$this->file_sql_item->loadById($id)) { $this->_setSystemLogMessage('file_is_not_loaded', array('id' => $id)); $this->_indexRedirect('error_file_is_not_loaded'); } // check perm for action if ($this->file_sql_item->hasPerm('edit') == FALSE) { $this->_setUserLogMessage('permission_denied', array('id' => $id, 'path' => $this->file_sql_item->getRelativePath()), 'debug'); $this->_indexRedirect('error_permission_denied'); } if ($this->config_area['multi_language_support'] == TRUE) { $foreign_idlang = (int) $this->req->req('foreign_idlang', 0); if ($foreign_idlang > 0) { $this->url->urlGet(array('foreign_idlang' => '')); if ($this->file_sql_item->copyLanguageMetadata($foreign_idlang) == FALSE) { $this->_setUserLogMessage('copy_metadata_failed', array('id' => $id, 'path' => $this->file_sql_item->getRelativePath(), 'foreign_idlang' => $foreign_idlang), 'debug'); $msgcode = 'error_copy_metadata_failed'; } else { $this->_setUserLogMessage('copy_metadata_success', array('id' => $id, 'path' => $this->file_sql_item->getRelativePath(), 'foreign_idlang' => $foreign_idlang), 'debug'); $msgcode = 'ok_copy_metadata_success'; } $this->url->urlAddModifyParams(array('msgcode' => $msgcode, 'id' => $this->file_sql_item->getId())); $this->http_header->redirect($this->url->urlGet(array('area' => $this->config_area['area_name'] . '_edit_file'))); } } $form = sf_api('VIEW', 'Form'); // assign real form vals to config fields $config_fields = $this->_assignValuesToConfigFields($this->config_fields['edit_file'], $this->file_sql_item, $form->wasSend()); // validate or save form $msg_string = $warning_string = ''; if ($form->wasSend()) { // check if invalid files are allowed switch ($this->config_area['allow_invalid_filenames']) { // no: check by normal validation case 0: break; // yes: disable validation // yes: disable validation case 1: unset($config_fields['filename']['validation']['filename']); break; // correct filename: disable validation and correct filename in file_sql_item // correct filename: disable validation and correct filename in file_sql_item case 2: unset($config_fields['filename']['validation']['filename']); break; } // validate form $msg_string = $this->_validateConfigFields($config_fields); $fsm = sf_api('LIB', 'FilesystemManipulation'); $extension = $fsm->getPathinfo($config_fields['filename']['val'], 'extension'); unset($fsm); // validation errors found, so mark them as errors if ($msg_string != '') { $msg_string = 'error_' . $msg_string; } else { if ($this->_isForbiddenFileExtension($extension) == TRUE) { $msg_string = 'error_forbidden_file_extension'; } else { $filedata = $this->_getItemFieldArrayFromConfigFields($config_fields); $filedata['area'] = $this->config_area['area_name']; $filedata['idclient'] = $this->config_area['idclient']; //$filedata['idlang'] = $this->config_area['idlang']; try { if ($this->file_sql_item->edit($filedata) == TRUE) { $msgcode = 'ok_update_file_success'; $filedata['path'] = $this->file_sql_item->getRelativePath(); $this->_setUserLogMessage('update_file_success', $filedata); // redirect to tableview if ($form->saveWasPressed()) { $this->_indexRedirect($msgcode); } else { $this->url->urlAddModifyParams(array('msgcode' => $msgcode, 'id' => $this->file_sql_item->getId())); $this->http_header->redirect($this->url->urlGet(array('area' => $this->config_area['area_name'] . '_edit_file'))); } } } catch (Exception $e) { switch ($e->getCode()) { // 0 = fatal, 1 = error case 0: case 1: $code = 'error'; break; // 2 = warning // 2 = warning case 2: $code = 'warning'; break; default: $code = 'info'; } $lng = $this->lng->get($this->config_area['area_name'] . '_' . $e->getMessage()); $msg_string = $code . '_'; $msg_string .= $lng != '' ? $lng : $e->getMessage(); $filedata['path'] = $this->file_sql_item->getRelativePath(); $this->_setUserLogMessage($e->getMessage(), $filedata, $code); } } } } // build form $this->_buildFormFromConfigFields($config_fields, $form); // toolbar if MLS is enabled if ($this->config_area['multi_language_support'] == TRUE) { $toolbarconfig = $this->_replaceTemplateVarsInToolbarConfig($this->config_toolbar['edit_file']); $toolbarconfig['form']['action'] = $this->url->urlGet(); $toolbarconfig['hidden_iddirectory']['value'] = $this->file_sql_item->getField('iddirectory'); $toolbarconfig['hidden_idfile']['value'] = $id; $langs = $this->cfg->getLangsForClient($this->config_area['idclient']); foreach ($langs as $lang) { if ($lang['is_current'] == false) { $toolbarconfig['actionbox']['values'][$lang['idlang']] = $lang['name']; } } $toolbar = sf_api('VIEW', 'Toolbar'); $toolbar->buildToolbarFromArray($toolbarconfig); } $backend_area = sf_api('VIEW', 'BackendArea'); $backend_area->addCmsHeader($this->config_area['js_lang']); $backend_area->addFooter(); // error or warning templates $msg = $this->_getMessage($this->req->req('msgcode', $msg_string)); if ($msg !== FALSE) { $backend_area->addMessage($msg['type'], $msg['message']); } if ($this->config_area['multi_language_support'] == TRUE) { $backend_area->addTemplateVar('TOOLBAR', $toolbar, 'RIGHTPANE'); } $backend_area->addTemplateVar('TITLE', $this->lng->get($this->config_area['area_name'] . '_area_edit_file'), 'RIGHTPANE.TITLE'); $backend_area->addTemplateVar('RIGHTPANE', $form, 'RIGHTPANE'); $backend_area->generate(); return $backend_area->get(); }