* 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']);
}
?>