00001 <?php
00002
00015
00016
00017
00018 import('rt.ojs.JournalRTAdmin');
00019
00020 class RTAdminHandler extends Handler {
00021
00026 function index() {
00027 RTAdminHandler::validate();
00028 $journal = Request::getJournal();
00029 $user = Request::getUser();
00030 if ($journal) {
00031 $rtDao = &DAORegistry::getDAO('RTDAO');
00032 $rt = $rtDao->getJournalRTByJournal($journal);
00033 if (isset($rt)) {
00034 $version = $rtDao->getVersion($rt->getVersion(), $journal->getJournalId());
00035 }
00036
00037
00038
00039 RTAdminHandler::setupTemplate();
00040 $templateMgr = &TemplateManager::getManager();
00041 $templateMgr->assign('helpTopicId', 'journal.managementPages.readingTools');
00042 $templateMgr->assign('versionTitle', isset($version)?$version->getTitle():null);
00043 $templateMgr->assign('enabled', $rt->getEnabled());
00044
00045 $templateMgr->display('rtadmin/index.tpl');
00046 } elseif ($user) {
00047
00048 $journalDao = &DAORegistry::getDAO('JournalDAO');
00049 $roleDao = &DAORegistry::getDAO('RoleDAO');
00050
00051 $journals = array();
00052
00053 $allJournals = &$journalDao->getJournals();
00054 $allJournals = &$allJournals->toArray();
00055
00056 foreach ($allJournals as $journal) {
00057 if ($roleDao->roleExists($journal->getJournalId(), $user->getUserId(), ROLE_ID_JOURNAL_MANAGER)) {
00058 $journals[] = $journal;
00059 }
00060 }
00061
00062 RTAdminHandler::setupTemplate();
00063 $templateMgr = &TemplateManager::getManager();
00064 $templateMgr->assign_by_ref('journals', $journals);
00065 $templateMgr->assign('helpTopicId', 'journal.managementPages.readingTools');
00066 $templateMgr->display('rtadmin/journals.tpl');
00067 } else {
00068
00069 Validation::redirectLogin();
00070 }
00071 }
00072
00076 function validate() {
00077 parent::validate(true);
00078 if (!Validation::isJournalManager()) {
00079 Validation::redirectLogin();
00080 }
00081 }
00082
00083
00084
00085
00086
00087
00088 function settings() {
00089 import('pages.rtadmin.RTSetupHandler');
00090 RTSetupHandler::settings();
00091 }
00092
00093 function saveSettings() {
00094 import('pages.rtadmin.RTSetupHandler');
00095 RTSetupHandler::saveSettings();
00096 }
00097
00098 function validateUrls($args) {
00099 RTAdminHandler::validate();
00100
00101 $rtDao = &DAORegistry::getDAO('RTDAO');
00102 $journal = Request::getJournal();
00103
00104 if (!$journal) {
00105 Request::redirect(null, Request::getRequestedPage());
00106 return;
00107 }
00108
00109 $versionId = isset($args[0])?$args[0]:0;
00110 $journalId = $journal->getJournalId();
00111
00112 $version = $rtDao->getVersion($versionId, $journalId);
00113
00114 if ($version) {
00115
00116 $versions = array(&$version);
00117 $versions = &new ArrayItemIterator($versions, 1, 1);
00118 } else {
00119
00120 $versions = $rtDao->getVersions($journalId);
00121 }
00122
00123 RTAdminHandler::setupTemplate(true, $version);
00124 $templateMgr = &TemplateManager::getManager();
00125 $templateMgr->register_modifier('validate_url', 'smarty_rtadmin_validate_url');
00126 $templateMgr->assign_by_ref('versions', $versions);
00127 $templateMgr->assign('helpTopicId', 'journal.managementPages.readingTools');
00128 $templateMgr->display('rtadmin/validate.tpl');
00129 }
00130
00131
00132
00133
00134
00135 function createVersion($args) {
00136 import('pages.rtadmin.RTVersionHandler');
00137 RTVersionHandler::createVersion($args);
00138 }
00139
00140 function exportVersion($args) {
00141 import('pages.rtadmin.RTVersionHandler');
00142 RTVersionHandler::exportVersion($args);
00143 }
00144
00145 function importVersion($args) {
00146 import('pages.rtadmin.RTVersionHandler');
00147 RTVersionHandler::importVersion($args);
00148 }
00149
00150 function restoreVersions() {
00151 import('pages.rtadmin.RTVersionHandler');
00152 RTVersionHandler::restoreVersions();
00153 }
00154
00155 function versions() {
00156 import('pages.rtadmin.RTVersionHandler');
00157 RTVersionHandler::versions();
00158 }
00159
00160 function editVersion($args) {
00161 import('pages.rtadmin.RTVersionHandler');
00162 RTVersionHandler::editVersion($args);
00163 }
00164
00165 function deleteVersion($args) {
00166 import('pages.rtadmin.RTVersionHandler');
00167 RTVersionHandler::deleteVersion($args);
00168 }
00169
00170 function saveVersion($args) {
00171 import('pages.rtadmin.RTVersionHandler');
00172 RTVersionHandler::saveVersion($args);
00173 }
00174
00175
00176
00177
00178
00179
00180 function createContext($args) {
00181 import('pages.rtadmin.RTContextHandler');
00182 RTContextHandler::createContext($args);
00183 }
00184
00185 function contexts($args) {
00186 import('pages.rtadmin.RTContextHandler');
00187 RTContextHandler::contexts($args);
00188 }
00189
00190 function editContext($args) {
00191 import('pages.rtadmin.RTContextHandler');
00192 RTContextHandler::editContext($args);
00193 }
00194
00195 function saveContext($args) {
00196 import('pages.rtadmin.RTContextHandler');
00197 RTContextHandler::saveContext($args);
00198 }
00199
00200 function deleteContext($args) {
00201 import('pages.rtadmin.RTContextHandler');
00202 RTContextHandler::deleteContext($args);
00203 }
00204
00205 function moveContext($args) {
00206 import('pages.rtadmin.RTContextHandler');
00207 RTContextHandler::moveContext($args);
00208 }
00209
00210
00211
00212
00213
00214
00215 function createSearch($args) {
00216 import('pages.rtadmin.RTSearchHandler');
00217 RTSearchHandler::createSearch($args);
00218 }
00219
00220 function searches($args) {
00221 import('pages.rtadmin.RTSearchHandler');
00222 RTSearchHandler::searches($args);
00223 }
00224
00225 function editSearch($args) {
00226 import('pages.rtadmin.RTSearchHandler');
00227 RTSearchHandler::editSearch($args);
00228 }
00229
00230 function saveSearch($args) {
00231 import('pages.rtadmin.RTSearchHandler');
00232 RTSearchHandler::saveSearch($args);
00233 }
00234
00235 function deleteSearch($args) {
00236 import('pages.rtadmin.RTSearchHandler');
00237 RTSearchHandler::deleteSearch($args);
00238 }
00239
00240 function moveSearch($args) {
00241 import('pages.rtadmin.RTSearchHandler');
00242 RTSearchHandler::moveSearch($args);
00243 }
00244
00252 function setupTemplate($subclass = false, $version = null, $context = null, $search = null) {
00253 $templateMgr = &TemplateManager::getManager();
00254
00255 $pageHierarchy = array(array(Request::url(null, 'user'), 'navigation.user'), array(Request::url(null, 'manager'), 'manager.journalManagement'));
00256
00257 if ($subclass) $pageHierarchy[] = array(Request::url(null, 'rtadmin'), 'rt.readingTools');
00258
00259 if ($version) {
00260 $pageHierarchy[] = array(Request::url(null, 'rtadmin', 'versions'), 'rt.versions');
00261 $pageHierarchy[] = array(Request::url(null, 'rtadmin', 'editVersion', $version->getVersionId()), $version->getTitle(), true);
00262 if ($context) {
00263 $pageHierarchy[] = array(Request::url(null, 'rtadmin', 'contexts', $version->getVersionId()), 'rt.contexts');
00264 $pageHierarchy[] = array(Request::url(null, 'rtadmin', 'editContext', array($version->getVersionId(), $context->getContextId())), $context->getAbbrev(), true);
00265 if ($search) {
00266 $pageHierarchy[] = array(Request::url(null, 'rtadmin', 'searches', array($version->getVersionId(), $context->getContextId())), 'rt.searches');
00267 $pageHierarchy[] = array(Request::url(null, 'rtadmin', 'editSearch', array($version->getVersionId(), $context->getContextId(), $search->getSearchId())), $search->getTitle(), true);
00268 }
00269 }
00270 }
00271 $templateMgr->assign('pageHierarchy', $pageHierarchy);
00272 }
00273 }
00274
00275 function rtadmin_validate_url($url, $useGet = false, $redirectsAllowed = 5) {
00276 $data = parse_url($url);
00277 if(!isset($data['host'])) {
00278 return false;
00279 }
00280
00281 $fp = @ fsockopen($data['host'], isset($data['port']) && !empty($data['port']) ? $data['port'] : 80, $errno, $errstr, 10);
00282 if (!$fp) {
00283 return false;
00284 }
00285
00286 $req = sprintf("%s %s HTTP/1.0\r\nHost: %s\r\nUser-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4b) Gecko/20030516\r\n\r\n", ($useGet ? 'GET' : 'HEAD'), (isset($data['path']) && $data['path'] !== '' ? $data['path'] : '/') . (isset($data['query']) && $data['query'] !== '' ? '?' . $data['query'] : ''), $data['host']);
00287
00288 fputs($fp, $req);
00289
00290 for($res = '', $time = time(); !feof($fp) && $time >= time() - 15; ) {
00291 $res .= fgets($fp, 128);
00292 }
00293
00294 fclose($fp);
00295
00296
00297 if(!preg_match('!^HTTP/(\d\.?\d*) (\d+)\s*(.+)[\n\r]!m', $res, $matches)) {
00298 return false;
00299 }
00300 list($match, $http_version, $http_status_no, $http_status_str) = $matches;
00301
00302
00303 if(preg_match('!^2\d\d$!', $http_status_no)) return true;
00304
00305
00306 if(preg_match('!^(?:(?:Location)|(?:URI)|(?:location)): ([^\s]+)[\r\n]!m', $res, $matches)) {
00307
00308 if ($redirectsAllowed >= 1) return rtadmin_validate_url(preg_match('!^https?://!', $matches[1]) ? $matches[1] : $data['scheme'] . '://' . $data['host'] . ($data['path'] !== '' && strpos($matches[1], '/') !== 0 ? $data['path'] : (strpos($matches[1], '/') === 0 ? '' : '/')) . $matches[1], $useGet, $redirectsAllowed-1);
00309 return false;
00310 }
00311
00312
00313 if(($http_status_no == 403 || $http_status_no == 404 || $http_status_no == 405 || $http_status_no == 500 || strstr($res, 'Bad Request') || strstr($res, 'Bad HTTP Request') || trim($res) == '') && !$useGet) {
00314 return rtadmin_validate_url($url, true, $redirectsAllowed-1);
00315 }
00316
00317 return false;
00318 }
00319
00320 function smarty_rtadmin_validate_url ($search, $errors) {
00321
00322 flush();
00323 ob_flush();
00324
00325 if (!is_array($errors)) $errors = array();
00326
00327 if (!rtadmin_validate_url($search->getUrl())) $errors[] = array('url' => $search->getUrl(), 'id' => $search->getSearchId());
00328 if ($search->getSearchUrl() && !rtadmin_validate_url($search->getSearchUrl())) $errors[] = array('url' => $search->getSearchUrl(), 'id' => $search->getSearchId());
00329
00330 return $errors;
00331 }
00332 ?>