/** * Upload file or zipe archive. * * @return void */ public static function upload($redirect = true) { $mainframe = JFactory::getApplication(); /* @var $mainframe JApplication */ $config = JoomDOCConfig::getInstance(); // folder where upload $path = JoomDOCRequest::getPath(); $folder = JoomDOCFileSystem::getFullPath($path); // control if given folder is subfolder of documents root if (!JoomDOCFileSystem::isSubFolder($folder, $config->docroot)) { JError::raiseError(403, JText::sprintf('JOOMDOC_UNABLE_UPLOAD_FILE')); } // unpack uploaded file (multiupload) $isZip = JRequest::getInt('iszip'); // count of uploaded files $count = 0; $data = JRequest::getVar('upload', null, 'files', 'array'); $modelDocument = JModelLegacy::getInstance(JOOMDOC_DOCUMENT, JOOMDOC_MODEL_PREFIX); /* @var $modelDocument JoomDOCModelDocument */ if ($data) { if ($data['error'] != 0) { JError::raiseWarning(21, JText::sprintf('JOOMDOC_UNABLE_UPLOAD_FILE', '')); } elseif (!JFolder::exists($folder)) { JError::raiseWarning(21, JText::sprintf('JOOMDOC_PARENT_FOLDER_NO_EXISTS'), $folder); } else { if ($isZip && ($tmpFolder = JoomDOCFileSystem::createTemporaryFolder('joomdoc_unpack'))) { $zip = JArchive::getAdapter('zip'); /* @var $zip JArchiveZip */ if ($zip->extract($data['tmp_name'], $tmpFolder) !== true) { JError::raiseWarning(21, JText::sprintf('JOOMDOC_UNABLE_EXTRACT_FILE', $data['name'])); } else { $rfolder = $path ? $path . DIRECTORY_SEPARATOR : ''; foreach (JFolder::folders($tmpFolder, '.', true, true) as $zipFolder) { $newfolder = JPath::clean(str_replace($tmpFolder . DIRECTORY_SEPARATOR, $rfolder, $zipFolder)); if (!JoomDOCFileSystem::newFolder(JoomDOCFileSystem::getParentPath($newfolder), JFile::getName($newfolder), false, false)) { return false; } } foreach (JFolder::files($tmpFolder, '.', true, true) as $zipFile) { if ($filePath = JoomDOCFileSystem::uploadFile($folder, $zipFile, str_replace($tmpFolder . DIRECTORY_SEPARATOR, '', $zipFile), true, false)) { if ($config->fileDocumentAutomatically && JoomDOCAccessDocument::create($filePath)) { $modelDocument->setState('document.id', null); $modelDocument->save(array('path' => $filePath, 'title' => JFile::getName($filePath), 'state' => JOOMDOC_STATE_PUBLISHED)); } $count++; } } } JFolder::delete($tmpFolder); JModelLegacy::getInstance(JOOMDOC_DOCUMENTS, JOOMDOC_MODEL_PREFIX)->flat(); } elseif ($filePath = JoomDOCFileSystem::uploadFile($folder, $data['tmp_name'], $data['name'])) { if ($config->fileDocumentAutomatically && JoomDOCAccessDocument::create($filePath)) { $modelDocument->setState('document.id', null); $modelDocument->save(array('path' => $filePath, 'title' => JFile::getName($filePath), 'state' => JOOMDOC_STATE_PUBLISHED)); $document = $modelDocument->getItem(); } $count++; } } } if ($redirect) { $mainframe->enqueueMessage(JText::sprintf('JOOMDOC_FILES_UPLOADED', $count)); if ($config->fileDocumentAutomatically && $config->editDocumentImmediately && !$isZip && !empty($document) && JoomDOCAccessDocument::edit($document->id)) { if ($mainframe->isAdmin()) { $mainframe->redirect(JoomDOCRoute::editDocument($document->id)); } else { $mainframe->redirect(JoomDOCRoute::edit($document->path, $document->full_alias)); } } else { $mainframe->redirect(JoomDOCRoute::viewDocuments($path, false)); } } }
echo '<td class="rename">'; echo '<div class="btn-group pull-left">'; if ($access->canRename && !$access->isTrashed) { if (JOOMDOC_ISJ3) { //jui button echo '<a href="javascript:void(0)" class="btn btn-smaller hasTip" id="openRename' . $i . '" onclick="JoomDOC.openRename(' . $i . ')" title="' . $this->getTooltip($access->relativePath, 'JOOMDOC_RENAME') . '" style="margin-left: 4px;"><i class="icon-pencil-2"> </i></a>'; } else { echo '<a href="javascript:void(0)" class="rename hasTip" id="openRename' . $i . '" onclick="JoomDOC.openRename(' . $i . ')" title="' . $this->getTooltip($access->relativePath, 'JOOMDOC_RENAME') . '"></a>'; } } echo '</div>'; echo '</td>'; if ($access->docid && !$access->isTrashed) { echo '<td>'; if ($access->canEdit) { echo '<a href="' . JRoute::_(JoomDOCRoute::editDocument($access->docid)) . '" title="' . $this->getTooltip($item->document->title, 'JOOMDOC_EDIT_DOCUMENT') . '" class="hasTip">' . $this->escape($item->document->title) . '</a>'; } else { echo $this->escape($item->document->title); } echo '</td>'; echo '<td class="center" align="center">'; echo JHtml::_('jgrid.published', $item->document->state, $i, 'documents.', $access->canEditState, 'cb', $item->document->publish_up, $item->document->publish_down); echo '</td>'; echo '<td class="center" align="center">'; echo JHtml::_('jgrid.state', $states, $item->document->favorite, $i, 'documents.', $access->canEditState, true); echo '</td>'; echo '<td class="order">'; if ($access->canEditState) { if ($ordering) { echo '<div class="pull-right">'; if ($listDirn == 'asc') {