Beispiel #1
0
 /**
  * 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();
 }