* All rights reserved * * This script is part of the TYPO3 project. The TYPO3 project is * free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * The GNU General Public License can be found at * http://www.gnu.org/copyleft/gpl.html. * * This script is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * This copyright notice MUST APPEAR in all copies of the script! ***************************************************************/ /** * Plugin 'nG6' for the 'nG6' extension. * * @author PF bioinformatique de Toulouse <> */ require_once(PATH_tslib.'class.tslib_pibase.php'); require_once(t3lib_extMgm::extPath('nG6').'/lib/class.tx_nG6_db.php'); require_once(t3lib_extMgm::extPath('nG6').'/lib/class.tx_nG6_utils.php'); require_once(t3lib_extMgm::extPath('nG6').'/lib/class.tx_nG6_upgrade.php'); require_once(t3lib_extMgm::extPath('nG6').'/res/smarty/libs/Smarty.class.php'); class tx_nG6_pi1 extends tslib_pibase { var $prefixId = 'tx_nG6_pi1'; // Same as class name var $scriptRelPath = 'pi1/class.tx_nG6_pi1.php'; // Path to this script relative to the extension dir. var $extKey = 'nG6'; // The extension key. /** * Main method of your PlugIn * * @param string $content: The content of the PlugIn * @param array $conf: The PlugIn Configuration * @return The content that should be displayed on the website */ function main($content,$conf) { if (strstr($this->cObj->currentRecord,'tt_content')) { $conf['pidList'] = $this->cObj->data['pages']; } // Setting the TypoScript passed to this function in $this->conf $this->conf=$conf; $this->pi_setPiVarDefaults(); // Configuring so caching is not expected. This value means that no cHash params are ever set. We do this, because it's a USER_INT object! $this->pi_USER_INT_obj=1; // Loading the LOCAL_LANG values $this->pi_loadLL(); // Add the ng6 plugins css $GLOBALS['TSFE']->additionalHeaderData[$this->prefixId] = ' '; tx_nG6_db::check_db_rights_level(); // if asked to upgrade to version 1.2 if($this->piVars['upgrade']){ $content = '
'.tx_nG6_upgrade::upgrade($this->piVars['upgrade'], $this->conf["data"]).'
'; } else if(! $this->pi_is_install_finalized()) { $content .= $this->pi_install_view(); } else { switch((string)$this->conf['view']) { // If the plugin is configured to display results by run case 'run': if ($this->piVars['analyze_id']) { $content .= $this->pi_analyze_view(); } else { $content .= $this->pi_run_view(); } break; // If the plugin is not configured, display by project is default default: if ($this->piVars['analyze_id']) { $content .= $this->pi_analyze_view(); } elseif ($this->piVars['project_id'] && $this->piVars['run_id']) { $content .= $this->pi_run_view(); } else { $content .= $this->pi_project_view(); } break; } } return $this->pi_wrapInBaseClass($content); } /** * Return the project view */ function pi_project_view() { $projects = array(); if (!$GLOBALS['TSFE']->loginUser) { $user_id = null; } else { $user_id = $GLOBALS['TSFE']->fe_user->user['uid']; } $single_project_display = false; // If a single element if ($this->piVars['project_id']) { if (tx_nG6_db::user_is_authorized($user_id, $this->piVars['project_id'], $this->piVars['run_id'])) { $projects = array('project_'.$this->piVars['project_id'] => tx_nG6_db::select_project($this->piVars['project_id'])); $single_project_display = true ; } } else { $projects = tx_nG6_db::select_all_user_projects($user_id, 'tx_nG6_project.name'); } // If there is no project the user can access if (count($projects) > 0) { $smarty = new Smarty(); $smarty->setTemplateDir(t3lib_extMgm::extPath('nG6').'/pi1'); $smarty->setCompileDir(t3lib_extMgm::extPath('nG6').'/res/smarty/templates_c'); $smarty->setCacheDir(t3lib_extMgm::extPath('nG6').'/res/smarty/cache'); $smarty->setConfigDir(t3lib_extMgm::extPath('nG6').'/res/smarty/configs'); $smarty->security = true; $smarty->security_settings['MODIFIER_FUNCS'] = array('count'); // Add some information to the table $project_ids = ""; foreach($projects as $project_id => $project_values) { // project admin ? $projects[$project_id]['is_admin'] = tx_nG6_db::is_project_administrator($GLOBALS['TSFE']->fe_user->user['uid'], $project_values['id']); // project manager ? $projects[$project_id]['is_manager'] = tx_nG6_db::is_project_manager($GLOBALS['TSFE']->fe_user->user['uid'], $project_values['id']); // project member ? $projects[$project_id]['is_member'] = tx_nG6_db::is_project_member($GLOBALS['TSFE']->fe_user->user['uid'], $project_values['id']); $project_ids .= $project_values['id'].","; $projects[$project_id]['href'] = $this->pi_list_linkSingle($project_values['name'],$project_values['id'],1, array('project_id'=>$project_values['id'])); } $smarty->assign('projects', $projects); $smarty->assign('login_user', $GLOBALS['TSFE']->loginUser); $smarty->assign('user_id', $GLOBALS['TSFE']->fe_user->user['uid']); $smarty->assign('user_login', $GLOBALS['TSFE']->fe_user->user['username']); $smarty->assign('data_folder', $this->conf["data"]); $smarty->assign('from_email', $this->conf["FromEmail"]); $smarty->assign('server_name', $this->conf["server_name"]); $smarty->assign('project_ids', substr($project_ids,0,-1)); $smarty->assign('pid', $this->conf['userpidList']); $smarty->assign('server_url', $this->conf['server_url']); $smarty->assign('single_project_display', $single_project_display); // If it's a single project, add runs and analysis information if ($single_project_display) { // Get all users on project $project_users = tx_nG6_db::get_all_users_on_project($projects[key($projects)]['id']); $smarty->assign('project_users', $project_users); // Add some information to the table $project_runs = tx_nG6_db::get_project_runs($projects[key($projects)]['id']); foreach($project_runs as $run_id => $run_values) { $project_runs[$run_id]['is_admin'] = tx_nG6_db::is_administrator($GLOBALS['TSFE']->fe_user->user['uid'], 'run', $run_values['id']); $project_runs[$run_id]['href'] = $this->pi_list_linkSingle($run_values['name'],$run_values['id'],1, array('run_id'=>$run_values['id'], 'project_id'=>$run_values['project_id'])); } $smarty->assign('project_runs', $project_runs); $project_analysis = tx_nG6_db::get_project_analysis($projects[key($projects)]['id']); // Add some information to the table foreach($project_analysis as $analysis_id => $analysis_values) { $project_analysis[$analysis_id]['is_admin'] = tx_nG6_db::is_administrator($GLOBALS['TSFE']->fe_user->user['uid'], 'analyze', $analysis_values['id']); $project_analysis[$analysis_id]['href'] = $this->pi_list_linkSingle($analysis_values['name'],$analysis_values['id'],1, array('analyze_id'=>$analysis_values['id'], 'project_id'=>$this->piVars['project_id'])); } $smarty->assign('h_analysis', tx_nG6_utils::trace_hierarchy($project_analysis)); $smarty->assign('project_analysis', $project_analysis); } return $smarty->fetch('project_view.tpl'); } else { return "
Access denied - You are not authorized to access this page.
"; } } /** * Return the run view */ function pi_run_view() { $runs = array(); if (!$GLOBALS['TSFE']->loginUser) { $user_id = null; } else { $user_id = $GLOBALS['TSFE']->fe_user->user['uid']; } // If a single element if ($this->piVars['run_id']) { if (tx_nG6_db::user_is_authorized($user_id, $this->piVars['project_id'], $this->piVars['run_id'])) { $runs = array('run_'.$this->piVars['run_id'] => tx_nG6_db::select_run($this->piVars['run_id'])); } } else { $runs = tx_nG6_db::select_all_user_runs($user_id); } if (count($runs) > 0) { $smarty = new Smarty(); $smarty->setTemplateDir(t3lib_extMgm::extPath('nG6').'/pi1'); $smarty->setCompileDir(t3lib_extMgm::extPath('nG6').'/res/smarty/templates_c'); $smarty->setCacheDir(t3lib_extMgm::extPath('nG6').'/res/smarty/cache'); $smarty->setConfigDir(t3lib_extMgm::extPath('nG6').'/res/smarty/configs'); $smarty->security = true; $smarty->security_settings['MODIFIER_FUNCS'] = array('count'); // Add some information to the table $run_ids = ""; foreach($runs as $run_id => $run_values) { if (tx_nG6_db::is_administrator($user_id, 'run', $run_values['id']) ) { $runs[$run_id]['is_admin'] = true; } else { $runs[$run_id]['is_admin'] = false; } $run_ids .= $run_values['id'].","; if ($this->piVars['project_id']) { $runs[$run_id]['href'] = $this->pi_list_linkSingle($run_values['name'],$run_values['id'],1, array('run_id'=>$run_values['id'], 'project_id'=>$run_values['project_id'])); } else { $runs[$run_id]['href'] = $this->pi_list_linkSingle($run_values['name'],$run_values['id'],1, array('run_id'=>$run_values['id'])); } } $smarty->assign('runs', $runs); $smarty->assign('login_user', $GLOBALS['TSFE']->loginUser); $smarty->assign('user_login', $GLOBALS['TSFE']->fe_user->user['username']); $smarty->assign('user_id', $GLOBALS['TSFE']->fe_user->user['uid']); $smarty->assign('data_folder', $this->conf["data"]); $smarty->assign('server_name', $this->conf["server_name"]); $smarty->assign('server_url', $this->conf['server_url']); $smarty->assign('run_ids', substr($run_ids,0,-1)); // If it's a single run, add analysis information if (count($runs) == 1) { $run_analysis = tx_nG6_db::get_run_analysis($runs[key($runs)]['id']); // Add some information to the table foreach($run_analysis as $analysis_id => $analysis_values) { $run_analysis[$analysis_id]['is_admin'] = tx_nG6_db::is_administrator($GLOBALS['TSFE']->fe_user->user['uid'], 'analyze', $analysis_values['id']); if ($this->piVars['project_id']) { $run_analysis[$analysis_id]['href'] = $this->pi_list_linkSingle($analysis_values['name'],$analysis_values['id'],1, array('analyze_id'=>$analysis_values['id'], 'project_id'=>$this->piVars['project_id'], 'run_id'=>$this->piVars['run_id'])); } else { $run_analysis[$analysis_id]['href'] = $this->pi_list_linkSingle($analysis_values['name'],$analysis_values['id'],1, array('analyze_id'=>$analysis_values['id'], 'run_id'=>$this->piVars['run_id'])); } } $smarty->assign('h_analysis', tx_nG6_utils::trace_hierarchy($run_analysis)); $smarty->assign('run_analysis', $run_analysis); } return $smarty->fetch('run_view.tpl'); } else { return "
Access denied - You are not authorized to access this page.
"; } } /** * Return the analysis view */ function pi_analyze_view() { // First select the analyse $analyse = tx_nG6_db::select_analyse($this->piVars['analyze_id']); // Handle old fashion if (file_exists($this->conf['data'].$analyse['directory'].'/index.html' )) { // Add the analyse description $content = '
'; $content .= ''; $content .= 'pi_classParam('singleView').'>'; $content .= '

Analyse '.$analyse['name'].' : '.$analyse['description'].'

'; $fp = fopen((string)$this->conf['data'].$analyse['directory'].'/index.html',"r"); while (!feof($fp)) { $content .= fgets($fp, 4096); } return $content; // Else meaning using smarty } else { $smarty = new Smarty(); $smarty->setTemplateDir(t3lib_extMgm::extPath('nG6').'/pi1/analyzes'); $smarty->setCompileDir(t3lib_extMgm::extPath('nG6').'/res/smarty/templates_c'); $smarty->setCacheDir(t3lib_extMgm::extPath('nG6').'/res/smarty/cache'); $smarty->setConfigDir(t3lib_extMgm::extPath('nG6').'/res/smarty/configs'); $smarty->security = true; $smarty->security_settings['MODIFIER_FUNCS'] = array('count'); $smarty->assign('analyse', $analyse); $analysis_size = tx_nG6_db::get_analysis_size($this->piVars['analyze_id']); $smarty->assign('analyse_size', tx_nG6_utils::get_octet_string_representation($analysis_size)); $smarty->assign('data_folder', $this->conf["data"]); // Then select analyse results $results = tx_nG6_db::select_analyse_results($this->piVars['analyze_id']); $smarty->assign('analyse_results', $results); // Select the run file description if ($analyse['run_id'] != 'None') { $descriptions = tx_nG6_db::select_mid_descriptions($analyse['run_id']); } else { $descriptions = array(); } $smarty->assign('descriptions', $descriptions); $smarty->assign('data_folder', $this->conf['data']); // Try to process the analyse template try { if (file_exists(t3lib_extMgm::extPath($this->extKey).'pi1/analyzes/'.$analyse['class'].'.js')) { $GLOBALS['TSFE']->additionalHeaderData[$this->prefixId] .= ' '; } $GLOBALS['TSFE']->additionalHeaderData[$this->prefixId] .= ' '; return $smarty->fetch($analyse['class'].'.tpl'); } catch (Exception $e) { return 'No template found for class ' . $analyse['class']; } } } /** * Return the install view */ function pi_install_view() { $smarty = new Smarty(); $smarty->setTemplateDir(t3lib_extMgm::extPath('nG6').'/pi1'); $smarty->setCompileDir(t3lib_extMgm::extPath('nG6').'/res/smarty/templates_c'); $smarty->setCacheDir(t3lib_extMgm::extPath('nG6').'/res/smarty/cache'); $smarty->setConfigDir(t3lib_extMgm::extPath('nG6').'/res/smarty/configs'); $smarty->security = true; $smarty->security_settings['MODIFIER_FUNCS'] = array('count'); $smarty->assign('server_name', $this->conf["server_name"]); $smarty->assign('server_url', $this->conf['server_url']); $smarty->assign('pid', $this->conf['userpidList']); return $smarty->fetch('install_view.tpl'); } /** * Does installation need is finalized ( admin_install user exist in db ) * * @param integer Alternative page ID for the link. (By default this function links to the SAME page!) * @return boolean If true, intallation allready finalysed */ function pi_is_install_finalized() { $res = tx_nG6_db::select_user_by_username("admin_install"); if ($res == null) { return true; } else { return false; } } /** * Overloading of the tslib_pibase->pi_list_linkSingle function so piVars[showUid] is not set. * Uses pi_linkTP for the linking * * @param string The content string to wrap in tags * @param integer UID of the record for which to display details (basically this will become the value of [showUid] * @param boolean See pi_linkTP_keepPIvars * @param array Array of values to override in the current piVars. Same as $overrulePIvars in pi_linkTP_keepPIvars * @param boolean If true, only the URL is returned, not a full link * @param integer Alternative page ID for the link. (By default this function links to the SAME page!) * @return string The input string wrapped in tags * @see pi_linkTP(), pi_linkTP_keepPIvars() */ function pi_list_linkSingle($str,$uid,$cache=FALSE,$mergeArr=array(),$urlOnly=FALSE,$altPageId=0) { if ($this->prefixId) { if ($cache) { $overrulePIvars=(array)$mergeArr; $str = $this->pi_linkTP($str,Array($this->prefixId=>$overrulePIvars),$cache,$altPageId); } else { $overrulePIvars=(array)$mergeArr; $str = $this->pi_linkTP_keepPIvars($str,$overrulePIvars,$cache,0,$altPageId); } // If urlOnly flag, return only URL as it has recently be generated. if ($urlOnly) { $str = $this->cObj->lastTypoLinkUrl; } } return $str; } } if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/nG6/pi1/class.tx_nG6_pi1.php']) { include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/nG6/pi1/class.tx_nG6_pi1.php']); } ?>