/** * 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(); }