* 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_utils.php'); require_once(t3lib_extMgm::extPath('nG6').'/lib/class.tx_nG6_db.php'); require_once(t3lib_extMgm::extPath('nG6').'/res/smarty/libs/Smarty.class.php'); class tx_nG6_pi6 extends tslib_pibase { var $prefixId = 'tx_nG6_pi6'; // Same as class name var $scriptRelPath = 'pi6/class.tx_nG6_pi6.php'; // Path to this script relative to the extension dir. var $extKey = 'nG6'; // The extension key. //var $pi_checkCHash = TRUE; /** * 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']; $conf['recursive'] = $this->cObj->data['recursive']; } $this->pi_loadLL(); $this->conf=$conf; $this->pi_setPiVarDefaults(); $this->pi_USER_INT_obj=1; // Add the jquery libs + the tree plugins and its css $GLOBALS['TSFE']->additionalHeaderData[$this->prefixId] = ' '; $smarty = new Smarty(); $smarty->setTemplateDir(t3lib_extMgm::extPath('nG6').'/pi6'); $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'); $group_list = tx_nG6_db::get_group_list(); $smarty->assign('login_user', $GLOBALS['TSFE']->loginUser); $smarty->assign('user_id', $GLOBALS['TSFE']->fe_user->user['uid']); $smarty->assign('user_name', $GLOBALS['TSFE']->fe_user->user['username']); $smarty->assign('group_list', $group_list); $smarty->assign('data_folder', $this->conf["data"]); $smarty->assign('server_url', $this->conf['server_url']); $smarty->assign('server_name', $this->conf["server_name"]); $distribution = tx_nG6_db::select_projects_repartition('create_user', 'title'); $smarty->assign('distribution', $distribution); $smarty->assign('ng6_admin_users', tx_nG6_db::get_ng6_admin_users() ); $smarty->assign('ng6_purge_delay',$GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['ng6']['delay_purge']); $txNG6Utils = new tx_nG6_utils; $smarty->assign_by_ref('tx_nG6_utils', $txNG6Utils); return $smarty->fetch('administration_view.tpl'); } function send_purge_demand_mail($user_id,$project_ids) { $template_mail= 'Mail automatique / en phase de TEST Dear user, The two years data storage time limit of your ###PROJECT_NAME### project (###nb_run### run(s) and ###nb_analyse### analyse(s)) is coming to end. This purge alert No ###DEMAND_ID### corresponds to ###STORAGE_SIZE### (see below files impacted). In ###PURGE_DELAY### days, your data will be deleted. Keep us informed if you wish to extend the storage period, please have a look at our prices (http://bioinfo.genotoul.fr/index.php/resources-2/pricing/) and reply to this email with the following information: ---------------------------------------------- Demand number: ###DEMAND_ID### Request for extension term: XXX (minimal unit: ###EXTENSION_DURATION###) Request for extension size: XXX (mininal unit: ###EXTENSION_SIZE###) Laboratory name/Institution: ---------------------------------------------- ###EMAILS###It would be appreciable if you could group your demand by laboratory. Yours sincerely nG6 team (for GeT-Genotoul and Bioinfo-Genotoul facilities) Files impacted of: - runs names: ###RUNS_LIST### - analyses ids: ###ANALYSES_LIST### '; $project_name=""; $txNG6Utils = new tx_nG6_utils; foreach(explode(",", $project_ids) as $project_id){ #retrieve project data $p=tx_nG6_db::select_a_project_retention_data_info($project_id); #build email list of managers $users_names=array(); $users_emails = array(); foreach ( $p[$project_id]["users"] as $u ){ if (!isset ($users_names[$u["right_level_label"]]) ){ $users_names[$u["right_level_label"]]=Array(); $users_emails[$u["right_level_label"]]=Array(); } $users_names[$u["right_level_label"]][] = $u["user_name"]; $users_emails[$u["right_level_label"]][] = $u["email"]; } #Warn if mail is sent to several manager $email_warn="" ; $purge_email_to=""; $purge_name_to=Array(); if ( count( $users_emails['manager']) >= 1 ) { if ( count( $users_emails['manager']) > 1 ) { $email_warn="Be aware that this project is associated to several managers (all recieved this email), please send only one answer per purge alert number.\n"; } $purge_email_to=join(',', $users_emails['manager']); $purge_name_to=$users_names['manager']; } elseif ( count($users_emails['manager']) == 0) { $purge_email_to=join(', ', array_merge($users_emails['administrator'],$users_emails['member'])); $purge_name_to=array_merge($users_names['administrator'],$users_names['member']); $email_warn="As this project do not have managers, administrators and members recieved this alert.\n"; $email_warn.= " - Administrator(s): ".join(', ',$users_emails['administrator']). "\n"; $email_warn.= " - Members(s): ".join(', ',$users_emails['member']). "\n"; } //Retrieve purgeable information for email $run_info=Array(); //ici bug car on prend l'ensemble des runs/analyses du projets $all_purgeable_runs=array_merge($p[$project_id]["state"]["stored"]["run_ids"],$p[$project_id]["state"]["extended"]["run_ids"]); $all_purgeable_analysis=array_merge($p[$project_id]["state"]["stored"]["analysis_ids"],$p[$project_id]["state"]["extended"]["analysis_ids"]); $nb_run_purgeable = $p[$project_id]["state"]["stored"]["nb_run"]+ $p[$project_id]["state"]["extended"]["nb_run"]; $nb_analyse_purgeable = $p[$project_id]["state"]["stored"]["nb_analyze"]+ $p[$project_id]["state"]["extended"]["nb_analyze"]; //Retrieve run name foreach($all_purgeable_runs as $run_id ){ $run = tx_nG6_db::select_run($run_id); $run_name = $run["name"]; $run_info[]= $run["name"]." ($run_id)"; } #Add purge demand to get id $purge_demand_id = tx_nG6_db::add_purge_demand($user_id,$project_id,$p[$project_id]["total_purgeable_size"],$all_purgeable_runs,$all_purgeable_analysis,$purge_name_to); #Build corresponding string array $search=array("###nb_run###","###nb_analyse###","###PROJECT_NAME###","###PROJET_ID###","###DEMAND_ID###", "###EMAILS###","###RUNS_LIST###","###ANALYSES_LIST###","###STORAGE_SIZE###", "###EXTENSION_DURATION###","###EXTENSION_SIZE###","###EXTENSION_URL_PRICES###","###PURGE_DELAY###"); $replace=array($nb_run_purgeable,$nb_analyse_purgeable,$p[$project_id]["project_name"],$project_id, $purge_demand_id , $email_warn, join(', ', $run_info), join(', ', $all_purgeable_analysis), tx_nG6_utils::get_octet_string_representation($p[$project_id]["total_purgeable_size"] ), $GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['ng6']['min_extension_duration'],$GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['ng6']['min_extension_size'], $GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['ng6']['extension_url_price'],$GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['ng6']['delay_purge']); $mail=str_replace($search, $replace, $template_mail); $to = $purge_email_to; $subject = '[nG6 purge] No '.$purge_demand_id.' - Project '.$p[$project_id]["project_name"]; $headers[] = 'From: '.$GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['ng6']['email_from']; $headers[] = 'X-Mailer: PHP/' . phpversion(); #TODO Uncomment $to = "celine.noirot@inra.fr"; mail($to, $subject, $mail, implode("\r\n", $headers)); } return implode("\r\n", $headers).$mail; } function extend_rentention_date($demand_ids, $date){ //extend $all_demands=tx_nG6_db::get_purge_demand_from_id($demand_ids); $all_runs=array(); $all_analyses=array(); foreach($all_demands as $res){ if ($res["state"] != "deleted") { $all_analyses=array_merge($all_analyses,explode(',',$res["analyze_ids"])); $all_runs=array_merge($all_runs,explode(',',$res["run_ids"])); } } tx_nG6_db::update_field('tx_nG6_run', $all_runs, array("retention_date","data_state", "mail_sent_date","purge_demand_id"), array($date,"extended","","NULL"), array("purge_demand_id")); tx_nG6_db::update_field('tx_nG6_analyze',$all_analyses, array("retention_date","data_state", "mail_sent_date","purge_demand_id"), array($date,"extended","","NULL"), array("purge_demand_id")); tx_nG6_db::update_field('tx_nG6_purge_demand',$demand_ids, array("processed_date","demand_state"), array($date,"extended")); return("Done extend"); } function delete_purge_demand($demand_ids,$user_login, $user_pwd, $data_folder){ $date= time(); $all_demands=tx_nG6_db::get_purge_demand_from_id($demand_ids); $directories=array(); $res = 0 ; foreach($all_demands as $demand){ if ($demand["state"] != "deleted"){ foreach(explode(',',$demand["analyze_ids"]) as $a_id){ $res = tx_nG6_db::purge_analysis($a_id, $user_login, $user_pwd, $data_folder); if ($res != 0) { break; } } if ($res == 0) { foreach(explode(',',$demand["run_ids"]) as $r_id){ $res = tx_nG6_db::purge_run($r_id, $user_login, $user_pwd, $data_folder); if ($res != 0) { break; } } } else { break; } } } # finally set purge demand as purged if ($res == 0){ tx_nG6_db::update_field('tx_nG6_purge_demand',explode(',',$demand_ids), array("processed_date","demand_state"), array($date,"purged")); } return $res; } } if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/nG6/pi6/class.tx_nG6_pi6.php']) { include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/nG6/pi6/class.tx_nG6_pi6.php']); } ?>