Example #1
0
 /**
  * Backend area (only rightpane) with a
  * form to copy multiple files and directories
  * @return void
  */
 public function copyMultiple()
 {
     $backend_area = sf_api('VIEW', 'BackendArea');
     $backend_area->addCmsHeader($this->config_area['js_lang']);
     $backend_area->addFooter();
     $iddirectories = $this->req->req('d', array());
     $directories = $this->req->req('directories', '');
     if (count($iddirectories) == 0 && $directories != '') {
         $iddirectories = explode(',', $directories);
     }
     $idfiles = $this->req->req('f', array());
     $files = $this->req->req('files', '');
     if (count($idfiles) == 0 && $files != '') {
         $idfiles = explode(',', $files);
     }
     $destination = (int) $this->req->req('destination', $this->params['iddirectory']);
     if (count($iddirectories) <= 0 && count($idfiles) <= 0) {
         $this->_indexRedirect();
     }
     $form = sf_api('VIEW', 'Form');
     // assign real form vals to config fields
     $config_fields = $this->_assignValuesToConfigFields($this->config_fields['copy_multiple'], null, $form->wasSend());
     $config_fields['directories']['val'] = implode(',', $iddirectories);
     $config_fields['files']['val'] = implode(',', $idfiles);
     $config_fields['destination']['val'] = $destination;
     if (count($iddirectories) == 1) {
         $config_fields['selection']['val'] .= count($iddirectories) . ' ' . $this->lng->get($this->config_area['area_name'] . '_multiple_directory');
     } else {
         if (count($iddirectories) > 1) {
             $config_fields['selection']['val'] .= count($iddirectories) . ' ' . $this->lng->get($this->config_area['area_name'] . '_multiple_directories');
         }
     }
     if (count($idfiles) > 0 && count($iddirectories) > 0) {
         $config_fields['selection']['val'] .= $this->lng->get($this->config_area['area_name'] . '_multiple_and');
     }
     if (count($idfiles) == 1) {
         $config_fields['selection']['val'] .= count($idfiles) . ' ' . $this->lng->get($this->config_area['area_name'] . '_multiple_file');
     } else {
         if (count($idfiles) > 1) {
             $config_fields['selection']['val'] .= count($idfiles) . ' ' . $this->lng->get($this->config_area['area_name'] . '_multiple_files');
         }
     }
     // validate or save form
     $msg_string = '';
     if ($form->wasSend()) {
         // validate form
         $msg_string = $this->_validateConfigFields($config_fields);
         // validation errors found, so mark them as errors
         if ($msg_string != '') {
             $msg_string = 'error_' . $msg_string;
         } else {
             $catched_messages = array('type' => 'copy_multiple');
             $ok = $error = 0;
             $move = $this->req->asBoolean('move');
             $directorydata = array();
             $directorydata['area'] = $this->config_area['area_name'];
             $directorydata['idclient'] = $this->config_area['idclient'];
             $directorydata['parentid'] = $config_fields['destination']['val'];
             foreach ($iddirectories as $iddirectory) {
                 if (!$this->directory_sql_item->loadById($iddirectory)) {
                     $this->_setSystemLogMessage('directory_is_not_loaded', array('multiple' => TRUE, 'id' => $iddirectory));
                     $catched_messages['directory'][$iddirectory] = 'error_directory_is_not_loaded';
                     ++$error;
                     continue;
                 }
                 // check perm for action
                 if ($this->directory_sql_item->hasPerm('copy') == FALSE) {
                     $this->_setUserLogMessage('permission_denied', array('multiple' => TRUE, 'id' => $iddirectory, 'path' => $this->directory_sql_item->getRelativePath()), 'debug');
                     $catched_messages['directory'][$iddirectory] = 'error_permission_denied';
                     ++$error;
                     continue;
                 }
                 try {
                     if ($move == FALSE && $this->directory_sql_item->copy($directorydata) == TRUE) {
                         $directorydata['path'] = $this->directory_sql_item->getRelativePath();
                         $this->_setUserLogMessage('copy_directory_success', $directorydata);
                         $catched_messages['directory'][$iddirectory] = 'ok_copy_directory_success';
                         ++$ok;
                     } else {
                         if ($move == TRUE && $this->directory_sql_item->move($directorydata) == TRUE) {
                             $directorydata['path'] = $this->directory_sql_item->getRelativePath();
                             $this->_setUserLogMessage('move_directory_success', $directorydata);
                             $catched_messages['directory'][$iddirectory] = 'ok_move_directory_success';
                             ++$ok;
                         }
                     }
                 } 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;
                     }
                     $catched_messages['directory'][$iddirectory] = $code . '_' . $e->getMessage();
                     $directorydata['path'] = $this->directory_sql_item->getRelativePath();
                     $this->_setUserLogMessage($e->getMessage(), $directorydata, $code);
                     ++$error;
                 }
             }
             $filedata = array();
             $filedata['area'] = $this->config_area['area_name'];
             $filedata['idclient'] = $this->config_area['idclient'];
             $filedata['iddirectory'] = $config_fields['destination']['val'];
             foreach ($idfiles as $idfile) {
                 if (!$this->file_sql_item->loadById($idfile)) {
                     $this->_setSystemLogMessage('file_is_not_loaded', array('multiple' => TRUE, 'id' => $idfile));
                     $catched_messages['file'][$idfile] = 'error_file_is_not_loaded';
                     ++$error;
                     continue;
                 }
                 // check perm for action
                 if ($this->file_sql_item->hasPerm('copy') == FALSE) {
                     $this->_setUserLogMessage('permission_denied', array('multiple' => TRUE, 'id' => $idfile, 'path' => $this->file_sql_item->getRelativePath()), 'debug');
                     $catched_messages['file'][$idfile] = 'error_permission_denied';
                     ++$error;
                     continue;
                 }
                 try {
                     if ($move == FALSE && $this->file_sql_item->copy($filedata) == TRUE) {
                         $filedata['path'] = $this->file_sql_item->getRelativePath();
                         $this->_setUserLogMessage('copy_file_success', $filedata);
                         $catched_messages['file'][$idfile] = 'ok_copy_file_success';
                         ++$ok;
                     } else {
                         if ($move == TRUE && $this->file_sql_item->move($filedata) == TRUE) {
                             $filedata['path'] = $this->file_sql_item->getRelativePath();
                             $this->_setUserLogMessage('move_file_success', $filedata);
                             $catched_messages['file'][$idfile] = 'ok_move_file_success';
                             ++$ok;
                         }
                     }
                 } 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;
                     }
                     $catched_messages['file'][$idfile] = $code . '_' . $e->getMessage();
                     $filedata['path'] = $this->file_sql_item->getRelativePath();
                     $this->_setUserLogMessage($e->getMessage(), $filedata, $code);
                     ++$error;
                 }
             }
             if ($error > 0) {
                 // store catched messages to session
                 $msghash = md5(time());
                 $this->_setVarToSession($msghash, $catched_messages, 'msg', TRUE);
                 $msgcode = $ok > 0 ? 'warning_some_actions_failed' : 'error_all_actions_failed';
             } else {
                 $msghash = '';
                 $msgcode = 'ok_action_successful';
             }
             $this->http_header->redirect($this->url->urlGet(array('area' => $this->config_area['area_name'] . '_index', 'msghash' => $msghash, 'msgcode' => $msgcode)));
         }
     }
     // build directory tree
     $config_fields['destination']['tree'] = $this->_getDirectoryChooserTree($destination, $iddirectories, $this->config_area['files_in_root']);
     // build form
     $this->_buildFormFromConfigFields($config_fields, $form);
     // error or warning templates
     $msg = $this->_getMessage($this->req->req('msgcode', $msg_string));
     if ($msg !== FALSE) {
         $backend_area->addMessage($msg['type'], $msg['message']);
     }
     $backend_area->addTemplateVar('TITLE', $this->lng->get($this->config_area['area_name'] . '_area_copy_multiple'), 'RIGHTPANE.TITLE');
     $backend_area->addTemplateVar('RIGHTPANE', $form, 'RIGHTPANE');
     $backend_area->generate();
     return $backend_area->get();
 }