public function __construct($filesPath, PackedSupplFile $unpacker) { $this->filesPath = $filesPath; //hostname+rpositorypath $daos =& DAORegistry::getDAOs(); $this->rpositorydao =& $daos['RpositoryDAO']; $this->unpacker =& $unpacker; }
function getPackageType($articleId) { $daos =& DAORegistry::getDAOs(); $rpositoryDao =& $daos['RpositoryDAO']; $filename = $rpositoryDao->getPackageName($articleId); if (!$filename == NULL) { return 'legacy_r_package'; } return 'NO_PACKAGE_UPLOADED'; }
function callback_update($hookName, $args) { $sql =& $args[0]; $params =& $args[1]; $articleId = NULL; // what hook was fired? if ($hookName === 'articledao::_updatearticle') { $articleId = $params[18]; } elseif ($hookName === 'publishedarticledao::_updatepublishedarticle') { $articleId = $params[0]; } // get references to DAOs needed for the update $daos =& DAORegistry::getDAOs(); $articledao =& $daos['ArticleDAO']; $rpositorydao =& $daos['RpositoryDAO']; // do the update and suppress hookcalls in DAO::update() if ($hookName === 'articledao::_updatearticle') { $article =& $articledao->getArticle($articleId); if ($article == NULL) { return FALSE; } $articledao->update($sql, array($article->getLocale(), (int) $article->getUserId(), (int) $article->getSectionId(), $article->getLanguage(), $article->getCommentsToEditor(), $article->getCitations(), (int) $article->getStatus(), (int) $article->getSubmissionProgress(), (int) $article->getCurrentRound(), $articledao->nullOrInt($article->getSubmissionFileId()), $articledao->nullOrInt($article->getRevisedFileId()), $articledao->nullOrInt($article->getReviewFileId()), $articledao->nullOrInt($article->getEditorFileId()), $article->getPages(), (int) $article->getFastTracked(), (int) $article->getHideAuthor(), (int) $article->getCommentsStatus(), $article->getStoredDOI(), $article->getId()), false); } elseif ($hookName === 'publishedarticledao::_updatepublishedarticle') { $publishedarticledao =& $daos['PublishedArticleDAO']; $publishedarticledao->update($sql, $params, false); } // when the article isn't published we don't do anything to the repository if (!$rpositorydao->articleIsPublished($articleId)) { return FALSE; } $journal_id = $articledao->getArticleJournalId($articleId); $packager = new OJSPackager(Config::getVar('files', 'files_dir') . '/journals/' . $journal_id . '/articles', new ZipSupplFile()); // create the new package for $articleId $archive = $packager->writePackage($articleId); $unpacker =& $packager->getUnpacker(); $filesList = $unpacker->getZippedFileNames(); //error_log('OJS - RpositoryPlugin: komme ich hier auch an den unpacker ran? ' . json_encode($unpacker->getZippedFileNames())); if ($archive == NULL) { error_log("OJS - rpository: creating archive failed"); return FALSE; } // insert new Package into repository //$writtenArchive = $rpositorydao->updateRepository(&$this, $articleId, $archive); $writtenArchive = $rpositorydao->updateRepository(&$this, $articleId, $archive, $filesList); if ($writtenArchive == NULL) { return FALSE; } else { $this->updatePackageIndex(); } return FALSE; }
function getContents(&$templateMgr) { $daos =& DAORegistry::getDAOs(); $rpositoryDao =& $daos['RpositoryDAO']; $context = $this->curPageURL(); $pattern = '#.*/index.php/[^/]*/article/view/[0-9]+#'; $articleId = NULL; if (preg_match($pattern, $context)) { $templateMgr->assign('isArticleView', 1); $pos = strrpos($context, '/view/'); $articleId = substr($context, $pos + 6); if ($pos = strpos($articleId, '/')) { $articleId = substr($articleId, 0, $pos); } } else { $templateMgr->assign('isArticleView', 0); } if ($articleId) { $pidv1 = $rpositoryDao->getPIDv1($articleId); $pidv2 = $rpositoryDao->getPIDv2($articleId); } $templateMgr->assign('pidv1', $pidv1); $templateMgr->assign('pidv2', $pidv2); $templateMgr->assign('rpositoryBase', "/Rpository/src/contrib/"); $filename = $rpositoryDao->getRPackageFile($articleId); error_log("OJS - " . $filename); $templateMgr->assign('fileName', $filename); $templateMgr->assign('packageName', str_replace('_1.0.tar.gz', '', $filename)); //check if the current user is the person who inserted the article, and in case allow to show link to edit the package if ($articleId != NULL) { $user =& Request::getUser(); if (is_object($user)) { $userId = $user->getId(); } else { $userId = NULL; } $articleDAO =& $daos['ArticleDAO']; $article =& $articleDAO->getArticle($articleId); $articleUserId = $article->getUserId(); $userIsEditor = false; if ($userId == $articleUserId) { $userIsEditor = true; } } else { $userIsEditor = false; } $templateMgr->assign('userIsEditor', $userIsEditor); $templateMgr->assign('paperPackageEditPlugin', "/index.php/mr2/PaperPackageEdPlugin/view/article=" . $articleId); return parent::getContents($templateMgr); }
/** * Retrieve a reference to the specified DAO. * @param $name string the class name of the requested DAO * @param $dbconn ADONewConnection optional * @return DAO */ function &getDAO($name, $dbconn = null) { $daos =& DAORegistry::getDAOs(); if (!isset($daos[$name])) { // Import the required DAO class. import(DAORegistry::getQualifiedDAOName($name)); // Only instantiate each class of DAO a single time $daos[$name] =& new $name(); if ($dbconn != null) { // FIXME Needed by installer but shouldn't access member variable directly $daos[$name]->_dataSource = $dbconn; } } return $daos[$name]; }
/** * Retrieve a reference to the specified DAO. * @param $name string the class name of the requested DAO * @param $dbconn ADONewConnection optional * @return DAO */ function &getDAO($name, $dbconn = null) { $daos =& DAORegistry::getDAOs(); if (!isset($daos[$name])) { // Import the required DAO class. $application =& PKPApplication::getApplication(); $className = $application->getQualifiedDAOName($name); if (!$className) { fatalError('Unrecognized DAO ' . $name . '!'); } // Only instantiate each class of DAO a single time $daos[$name] =& instantiate($className, array('DAO', 'XMLDAO')); if ($dbconn != null) { $daos[$name]->setDataSource($dbconn); } } return $daos[$name]; }
/** * Retrieve a reference to the specified DAO. * @param $name string the class name of the requested DAO * @param $dbconn ADONewConnection optional * @return DAO */ function &getDAO($name, $dbconn = null) { $daos =& DAORegistry::getDAOs(); if (!isset($daos[$name])) { // Import the required DAO class. $application =& PKPApplication::getApplication(); $className = $application->getQualifiedDAOName($name); if (!$className) { fatalError('Unrecognized DAO ' . $name . '!'); } // Only instantiate each class of DAO a single time $daos[$name] =& instantiate($className, array('DAO', 'XMLDAO')); if ($dbconn != null) { // FIXME Needed by installer but shouldn't access member variable directly $daos[$name]->_dataSource = $dbconn; } } return $daos[$name]; }
/** * Save settings. */ function execute() { $plugin =& $this->plugin; $newPidStatus = trim($this->getData('pidstatus')); $newOutputPath = trim($this->getData('documentroot') . $this->getData('path')); $newPath = trim($this->getData('path')); $newHostname = trim($this->getData('hostname')); $newDocumentroot = trim($this->getData('documentroot')); $newRepositoryUrl = trim($this->getData('hostname') . "/" . $this->getData('path')); $plugin->updateSetting(0, 'pidstatus', $newPidStatus, 'int'); $plugin->updateSetting(0, 'output_path', $newOutputPath, 'string'); $plugin->updateSetting(0, 'path', $newPath, 'string'); $plugin->updateSetting(0, 'hostname', $newHostname, 'string'); $plugin->updateSetting(0, 'documentroot', $newDocumentroot, 'string'); $plugin->updateSetting(0, 'repository_url', $newRepositoryUrl, 'string'); if ($newPidStatus == 1) { $newPidV1User = trim($this->getData('pidv1_user')); $plugin->updateSetting(0, 'pidv1_user', $newPidV1User, 'string'); $newPidV1Pw = trim($this->getData('pidv1_pw')); $plugin->updateSetting(0, 'pidv1_pw', $newPidV1Pw, 'string'); $newPidV1ServiceUrl = trim($this->getData('pidv1_service_url')); $plugin->updateSetting(0, 'pidv1_service_url', $newPidV1ServiceUrl, 'string'); $newPidV1Timeout = trim($this->getData('pidv1_timeout')); $plugin->updateSetting(0, 'pidv1_timeout', $newPidV1Timeout, 'int'); $fetch_pidv1 = trim($this->getData('fetch_missing_pids_v1')); if ($fetch_pidv1 == 'on') { $daos =& DAORegistry::getDAOs(); $rpositorydao =& $daos['RpositoryDAO']; $pids_to_fetch = $rpositorydao->getArticlesWithoutPid(1); foreach ($pids_to_fetch as $articleId) { $rpositorydao->updatePID($this->plugin, $articleId); } } } elseif ($newPidStatus == 2) { $newPidV2User = trim($this->getData('pidv2_user')); $plugin->updateSetting(0, 'pidv2_user', $newPidV2User, 'string'); $newPidV2Pw = trim($this->getData('pidv2_pw')); $plugin->updateSetting(0, 'pidv2_pw', $newPidV2Pw, 'string'); $newPidV2ServiceUrl = trim($this->getData('pidv2_service_url')); $plugin->updateSetting(0, 'pidv2_service_url', $newPidV2ServiceUrl, 'string'); $newPidV2Timeout = trim($this->getData('pidv2_timeout')); $plugin->updateSetting(0, 'pidv2_timeout', $newPidV2Timeout, 'int'); $newPidV2Prefix = trim($this->getData('pidv2_prefix')); $plugin->updateSetting(0, 'pidv2_prefix', $newPidV2Prefix, 'string'); $fetch_pidv2 = trim($this->getData('fetch_missing_pids_v2')); if ($fetch_pidv2 == 'on') { $daos =& DAORegistry::getDAOs(); $rpositorydao =& $daos['RpositoryDAO']; $pids_to_fetch = $rpositorydao->getArticlesWithoutPid(2); foreach ($pids_to_fetch as $articleId) { $rpositorydao->test($articleId); } } } }
function fetchPIDlegacy(&$plugin, $articleId) { $daos =& DAORegistry::getDAOs(); $articleDao =& $daos['ArticleDAO']; $url = $this->getPackageName($articleId); if ($url == '') { error_log("OJS - rpository: getPackageName failed"); return NULL; } $fileSize = filesize($plugin->getSetting(0, 'documentroot') . $plugin->getSetting(0, 'path') . $url); if ($fileSize == NULL) { error_log("couldn't get file size"); return NULL; } if ($url == NULL) { error_log("url = null"); return NULL; } else { $url = $plugin->getSetting(0, 'hostname') . "/index.php/mr2/oai?verb=GetRecord&metadataPrefix=mods&identifier=oai:ojs." . $plugin->getSetting(0, 'hostname') . ":article/" . $articleId; } $article = $articleDao->getArticle($articleId); $title = $article->getArticleTitle(); if ($title == '') { error_log("couldn't get title"); return NULL; } $submissionId = $article->_data['id']; $authors = $this->getAuthors($submissionId); if ($authors == '') { error_log("couldn't get authors"); return NULL; } $date = $this->getDate($articleId); if ($date == '') { error_log("couldn't get publish date"); return NULL; } // set POST variables $fields = array('url' => urlencode($url), 'size' => urlencode($fileSize), 'title' => urlencode($title), 'authors' => urlencode($authors), 'pubdate' => urlencode($date), 'encoding' => urlencode('xml')); $fields_string = ''; //url-ify the data for the POST foreach ($fields as $key => $value) { $fields_string .= $key . '=' . $value . '&'; } $fields_string = rtrim($fields_string, '&'); // curl stuff $ch = curl_init(); //curl_setopt($ch, CURLOPT_VERBOSE, TRUE); curl_setopt($ch, CURLOPT_URL, $plugin->getSetting(0, 'pidv1_service_url')); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_TIMEOUT, $plugin->getSetting(0, 'pidv1_timeout')); curl_setopt($ch, CURLOPT_USERPWD, $plugin->getSetting(0, 'pidv1_user') . ":" . $plugin->getSetting(0, 'pidv1_pw')); $result = curl_exec($ch); curl_close($ch); // newlines messed up the xml parser - removing $result = str_replace("\\r\\n", '', $result); if ($result == NULL) { error_log("OJS - rpository: creating PID failed: no response from PID server"); return NULL; } elseif (substr($result, 0, 6) == '<html>') { $m = array(); preg_match_all("/<h1>HTTP Status 403 - Another Handle \\/ PID already points here: ([A-F0-9-\\/]*)<\\/h1>/", $result, $m); if ($m[1] == '') { error_log("OJS - rpository: fetching PID failed: " . $e->getMessage()); return NULL; } else { //error_log(print_r($m, TRUE)); return $m[1][0]; } } try { $xml = new SimpleXMLElement($result); } catch (Exception $e) { error_log("OJS - rpository: unexpected PID v1 server response"); return NULL; } $out = $xml->Handle->pid; return (string) $out; }