Пример #1
0
 /**
  * A public helper function that can be used to ensure
  * that the file structure has actually been installed.
  *
  * @param $install boolean Set this parameter to true to
  *  install the folder structure if it is missing.
  *
  * @return boolean True if the folder structure exists,
  *  otherwise false.
  */
 public function checkFolderStructure($install = false)
 {
     // Make sure that the base path is inside the private files dir.
     // The files dir has appropriate write permissions and is assumed
     // to be protected against information leak and symlink attacks.
     $filesDir = realpath(Config::getVar('files', 'files_dir'));
     if (is_null($this->_basePath) || strpos($this->_basePath, $filesDir) !== 0) {
         $this->_notify(__('admin.fileLoader.wrongBasePathLocation', array('path' => $this->_basePath)), FILE_LOADER_ERROR_MESSAGE_TYPE);
         return false;
     }
     // Check folder presence and readability.
     $pathsToCheck = array($this->_stagePath, $this->_archivePath, $this->_rejectPath, $this->_processingPath);
     $fileManager = null;
     foreach ($pathsToCheck as $path) {
         if (!(is_dir($path) && is_readable($path))) {
             if ($install) {
                 // Try installing the folder if it is missing.
                 if (is_null($fileManager)) {
                     import('lib.pkp.classes.file.FileManager');
                     $fileManager = new FileManager();
                 }
                 $fileManager->mkdirtree($path);
             }
             // Try again.
             if (!(is_dir($path) && is_readable($path))) {
                 // Give up...
                 $this->_notify(__('admin.fileLoader.pathNotAccessible', array('path' => $path)), FILE_LOADER_ERROR_MESSAGE_TYPE);
                 return false;
             }
         }
     }
     return true;
 }
Пример #2
0
 /**
  * Save scheduled conference settings.
  */
 function execute()
 {
     $schedConfDao =& DAORegistry::getDAO('SchedConfDAO');
     $conferenceDao =& DAORegistry::getDAO('ConferenceDAO');
     $conference =& $conferenceDao->getConference($this->getData('conferenceId'));
     if (isset($this->schedConfId)) {
         $schedConf =& $schedConfDao->getSchedConf($this->schedConfId);
     }
     if (!isset($schedConf)) {
         $schedConf = new SchedConf();
     }
     $schedConf->setConferenceId($this->getData('conferenceId'));
     $schedConf->setPath($this->getData('schedConfPath'));
     if ($schedConf->getId() != null) {
         $schedConfDao->updateSchedConf($schedConf);
         $track = null;
         // avoid warning
     } else {
         $schedConfId = $schedConfDao->insertSchedConf($schedConf);
         $schedConfDao->resequenceSchedConfs($this->getData('conferenceId'));
         // Make the file directories for the scheduled conference
         import('lib.pkp.classes.file.FileManager');
         $conferenceId = $schedConf->getConferenceId();
         $privateBasePath = Config::getVar('files', 'files_dir') . '/conferences/' . $conferenceId . '/schedConfs/' . $schedConfId;
         $publicBasePath = Config::getVar('files', 'public_files_dir') . '/conferences/' . $conferenceId . '/schedConfs/' . $schedConfId;
         FileManager::mkdirtree($privateBasePath);
         FileManager::mkdirtree($privateBasePath . '/papers');
         FileManager::mkdirtree($privateBasePath . '/tracks');
         FileManager::mkdirtree($publicBasePath);
         // Install default scheduled conference settings
         $schedConfSettingsDao =& DAORegistry::getDAO('SchedConfSettingsDAO');
         $title = $this->getData('title');
         $title = $title[$this->getFormLocale()];
         Locale::requireComponents(array(LOCALE_COMPONENT_APPLICATION_COMMON, LOCALE_COMPONENT_OCS_DEFAULT));
         $schedConfSettingsDao->installSettings($schedConfId, Config::getVar('general', 'registry_dir') . '/schedConfSettings.xml', array('authorGuidelinesUrl' => Request::url($conference->getPath(), $this->getData('schedConfPath'), 'about', 'submissions', null, null, 'authorGuidelines'), 'indexUrl' => Request::getIndexUrl(), 'conferencePath' => $conference->getPath(), 'conferenceName' => $conference->getConferenceTitle(), 'schedConfPath' => $this->getData('schedConfPath'), 'schedConfUrl' => Request::url($conference->getPath(), $this->getData('schedConfPath'), 'index'), 'schedConfName' => $title));
         // Create a default "Papers" track
         $trackDao =& DAORegistry::getDAO('TrackDAO');
         $track = new Track();
         $track->setSchedConfId($schedConfId);
         $track->setMetaReviewed(true);
         $track->setTitle(Locale::translate('track.default.title'), $conference->getPrimaryLocale());
         $track->setAbbrev(Locale::translate('track.default.abbrev'), $conference->getPrimaryLocale());
         $track->setPolicy(Locale::translate('track.default.policy'), $conference->getPrimaryLocale());
         $track->setDirectorRestricted(false);
         $trackDao->insertTrack($track);
     }
     $schedConf->updateSetting('title', $this->getData('title'), 'string', true);
     $schedConf->updateSetting('acronym', $this->getData('acronym'), 'string', true);
     HookRegistry::call('SchedConfSettingsForm::execute', array(&$this, &$conference, &$schedConf, &$track));
 }
Пример #3
0
 /**
  * Create a new directory, including all intermediate directories if required (equivalent to "mkdir -p")
  * @param $dirPath string the full path of the directory to be created
  * @param $perms string the permissions level of the directory (optional)
  * @return boolean returns true if successful
  */
 function mkdirtree($dirPath, $perms = null)
 {
     if (!file_exists($dirPath)) {
         if (FileManager::mkdirtree(dirname($dirPath), $perms)) {
             return FileManager::mkdir($dirPath, $perms);
         } else {
             return false;
         }
     }
     return true;
 }
Пример #4
0
 /**
  * Internal function to return the cover for publishing a research
  * @param $sectionEditorSubmission SectionEditorSubmission
  * @return string path to cover created
  */
 function &_generateCover($sectionEditorSubmission)
 {
     $journal =& Request::getJournal();
     import('classes.lib.tcpdf.pdf');
     import('classes.lib.tcpdf.tcpdf');
     Locale::requireComponents(array(LOCALE_COMPONENT_APPLICATION_COMMON, LOCALE_COMPONENT_OJS_EDITOR, LOCALE_COMPONENT_PKP_SUBMISSION, LOCALE_COMPONENT_PKP_USER));
     $pdf = new PDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
     // No header and footer for this document
     $pdf->SetPrintHeader(false);
     $pdf->SetPrintFooter(false);
     $pdf->SetCreator(PDF_CREATOR);
     $pdf->SetAuthor($journal->getJournalTitle());
     // set margins
     $pdf->SetMargins(PDF_MARGIN_LEFT, 20, PDF_MARGIN_RIGHT);
     // set auto page breaks
     $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
     // set image scale factor
     $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
     // Right now this cover page is only in english, but the english translation keys are ready
     $pdf->AddPage();
     $pdf->SetFont('dejavusans', 'B', 14);
     $pdf->MultiCell(0, 6, 'Final Technical Report', 0, 'C');
     // Locale::translate('editor.finalReport')
     $pdf->ln();
     $pdf->ln();
     $pdf->MultiCell(0, 6, 'for', 0, 'C');
     // Locale::translate('editor.finalReport.for')
     $pdf->ln();
     $pdf->ln();
     $pdf->MultiCell(0, 6, 'Research Project', 0, 'C');
     // Locale::translate('editor.finalReport.researchProject')
     $pdf->ln();
     $pdf->ln();
     $pdf->ln();
     $pdf->ln();
     $abstract = $sectionEditorSubmission->getAbstractByLocale('en_US');
     // Right now, considering only the english language
     $pdf->SetFont('dejavusans', 'B', 16);
     $pdf->MultiCell(0, 6, $abstract->getScientificTitle(), 0, 'C');
     $pdf->ln();
     $authors = $sectionEditorSubmission->getAuthors();
     $coInvestigatorsString = (string) '';
     $pInvestigatorsString = (string) '';
     foreach ($authors as $author) {
         if (!$author->getPrimaryContact()) {
             if ($coInvestigatorsString == '') {
                 $coInvestigatorsString = $author->getFullName() . ' (' . $author->getAffiliation() . ')';
             } else {
                 $coInvestigatorsString = $coInvestigatorsString . ', ' . $author->getFullName() . ' (' . $author->getAffiliation() . ')';
             }
         } else {
             $pInvestigatorsString = $author->getFullName() . ' (' . $author->getAffiliation() . ')';
         }
     }
     $pdf->SetFont('dejavusans', '', 16);
     $pdf->MultiCell(0, 6, 'Principal Investigator: ' . $pInvestigatorsString, 0, 'C');
     // Locale::translate('user.role.primaryInvestigator')
     if ($coInvestigatorsString != '') {
         $pdf->MultiCell(0, 6, 'Co-Investigator(s): ' . $coInvestigatorsString, 0, 'C');
         // Locale::translate('user.role.coinvestigator')
     }
     $pdf->ln();
     $pdf->ln();
     $pdf->ln();
     $pdf->ln();
     $pdf->SetFont('dejavusans', 'B', 16);
     $pdf->MultiCell(0, 6, $sectionEditorSubmission->getProposalId(), 0, 'C');
     $pdf->ln();
     $pdf->ln();
     $decision = $sectionEditorSubmission->getLastSectionDecision();
     $pdf->MultiCell(0, 0, date("F Y", strtotime($decision->getDateDecided())), 0, 'L', 0, 1, '', 250, true);
     $pdf->Image("public/site/images/mainlogo.png", 'C', 230, 40, '', '', false, 'C', false, 300, 'R', false, false, 0, false, false, false);
     $pdf->AddPage();
     $pdf->SetFont('dejavusans', 'B', 14);
     $pdf->MultiCell(0, 6, 'Final Technical Report', 0, 'C');
     // Locale::translate('editor.finalReport')
     $pdf->ln();
     $pdf->ln();
     $pdf->SetFont('dejavusans', 'B', 12);
     $pdf->MultiCell(0, 6, 'Disclaimer', 0, 'C');
     // Locale::translate('editor.finalReport.disclaimer')
     $pdf->ln();
     $pdf->ln();
     $pdf->SetFont('dejavusans', '', 11);
     $pdf->writeHTMLCell(0, 6, '', '', $journal->getSetting('reportDisclaimer'), 0, 0, false, true, 'J');
     $filePath = Config::getVar('files', 'files_dir') . '/articles/' . $sectionEditorSubmission->getArticleId() . '/public/';
     if (!FileManager::fileExists($filePath, 'dir')) {
         FileManager::mkdirtree($filePath);
     }
     $pdf->Output($filePath . 'tempCover.pdf', 'F');
     return $filePath;
 }
Пример #5
0
 /**
  * PRIVATE routine to write a minutes file and add it to the database.
  * @param $fileName original filename of the file
  * @param $contents string contents of the file to write
  * @param $mimeType string the mime type of the file
  * @param $type string identifying type
  * @param $fileId int ID of an existing file to update
  * @return int the file ID (false if upload failed)
  */
 function handleWrite(&$pdf, $type, $fileId = null)
 {
     if (HookRegistry::call('MinutesFileManager::handleWrite', array(&$contents, &$fileId, &$result))) {
         return $result;
     }
     $minutesFileDao =& DAORegistry::getDAO('MinutesFileDAO');
     $typePath = $this->typeToPath($type);
     $dir = $this->filesDir . $typePath . '/';
     if (!$fileId) {
         $minutesFile =& $minutesFileDao->getGeneratedMinutesFile($this->meeting->getId(), $typePath);
         if (!$minutesFile) {
             $minutesFile =& $this->generateDummyFile($this->meeting);
         }
         $dummyFile = true;
     } else {
         $dummyFile = false;
         $minutesFile = new MinutesFile();
         $minutesFile->setMeetingId($this->meetingId);
         $minutesFile->setFileId($fileId);
     }
     $minutesFile->setFileType('application/pdf');
     $minutesFile->setOriginalFileName(null);
     $minutesFile->setType($typePath);
     $minutesFile->setDateCreated(Core::getCurrentDate());
     $newFileName = $this->generateFilename($minutesFile, $typePath, '.pdf');
     if (!FileManager::fileExists($dir, 'dir')) {
         FileManager::mkdirtree($dir);
     }
     if ($pdf->Output($dir . $newFileName, "F") != '') {
         $minutesFileDao->deleteMinutesFileById($minutesFile->getFileId());
         return false;
     } else {
         $minutesFile->setFileSize(filesize($dir . $newFileName));
     }
     if ($dummyFile) {
         $minutesFileDao->updateMinutesFile($minutesFile);
     } else {
         $minutesFileDao->insertMinutesFile($minutesFile);
     }
     return $minutesFile->getFileId();
 }
Пример #6
0
 /**
  * Save schedConf settings.
  * @param $request PKPRequest
  */
 function execute($request)
 {
     $schedConfDao = DAORegistry::getDAO('SchedConfDAO');
     $conference = $request->getConference();
     if (isset($this->contextId)) {
         $schedConf = $schedConfDao->getById($this->contextId);
     }
     if (!isset($schedConf)) {
         $schedConf = $schedConfDao->newDataObject();
         $schedConf->setConferenceId($conference->getId());
     }
     $schedConf->setPath($this->getData('path'));
     $schedConf->setEnabled($this->getData('enabled'));
     if ($schedConf->getId() != null) {
         $isNewSchedConf = false;
         $schedConfDao->updateObject($schedConf);
         $section = null;
     } else {
         $isNewSchedConf = true;
         $site = $request->getSite();
         // Give it a default primary locale
         $schedConfId = $schedConfDao->insertObject($schedConf);
         $schedConfDao->resequence();
         // Make the file directories for the scheduled conference
         import('lib.pkp.classes.file.FileManager');
         $fileManager = new FileManager();
         $conferenceId = $schedConf->getConferenceId();
         $privateBasePath = Config::getVar('files', 'files_dir') . '/conferences/' . $conferenceId . '/schedConfs/' . $schedConfId;
         $publicBasePath = Config::getVar('files', 'public_files_dir') . '/conferences/' . $conferenceId . '/schedConfs/' . $schedConfId;
         $fileManager->mkdirtree($privateBasePath);
         $fileManager->mkdirtree($privateBasePath . '/papers');
         $fileManager->mkdirtree($privateBasePath . '/tracks');
         $fileManager->mkdirtree($publicBasePath);
         // Install default scheduled conference settings
         $schedConfSettingsDao = DAORegistry::getDAO('SchedConfSettingsDAO');
         $name = $this->getData('name');
         $name = $name[$this->getFormLocale()];
         AppLocale::requireComponents(LOCALE_COMPONENT_APP_COMMON, LOCALE_COMPONENT_APP_DEFAULT);
         $dispatcher = $request->getDispatcher();
         $schedConfSettingsDao->installSettings($schedConfId, Config::getVar('general', 'registry_dir') . '/schedConfSettings.xml', array('authorGuidelinesUrl' => $dispatcher->url($request, ROUTE_PAGE, array($conference->getPath(), $this->getData('schedConfPath')), 'about', 'submissions', null, null, 'authorGuidelines'), 'indexUrl' => $request->getIndexUrl(), 'conferencePath' => $conference->getPath(), 'conferenceName' => $conference->getLocalizedName(), 'schedConfPath' => $this->getData('path'), 'schedConfUrl' => $dispatcher->url($request, ROUTE_PAGE, array($conference->getPath(), $this->getData('schedConfPath')), 'index'), 'schedConfName' => $name));
         // Create a default "Papers" track
         $trackDao = DAORegistry::getDAO('TrackDAO');
         $track = new Track();
         $track->setSchedConfId($schedConfId);
         $track->setMetaReviewed(true);
         $track->setTitle(__('track.default.title'), $conference->getPrimaryLocale());
         $track->setAbbrev(__('track.default.abbrev'), $conference->getPrimaryLocale());
         $track->setPolicy(__('track.default.policy'), $conference->getPrimaryLocale());
         $track->setDirectorRestricted(false);
         $trackDao->insertTrack($track);
     }
     $schedConf->updateSetting('name', $this->getData('name'), 'string', true);
     $schedConf->updateSetting('acronym', $this->getData('acronym'), 'string', true);
     // Make sure all plugins are loaded for settings preload
     PluginRegistry::loadAllPlugins();
     HookRegistry::call('SchedConfSettingsForm::execute', array(&$this, &$schedConf));
 }