* 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(\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('nG6').'/lib/class.tx_nG6_utils.php'); require_once(\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('nG6').'/lib/class.tx_nG6_db.php'); require_once(\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('nG6').'/res/smarty/libs/Smarty.class.php'); class tx_nG6_pi6 extends \TYPO3\CMS\Frontend\Plugin\AbstractPlugin { 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(\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('nG6').'/pi6'); $smarty->setCompileDir(\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('nG6').'/res/smarty/templates_c'); $smarty->setCacheDir(\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('nG6').'/res/smarty/cache'); $smarty->setConfigDir(\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::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_superadmin_users', tx_nG6_db::get_ng6_superadmin_users() ); $smarty->assign('is_current_user_superadmin', tx_nG6_db::is_user_ng6_superadmin($GLOBALS['TSFE']->fe_user->user['uid']) ); $smarty->assign('available_space_ids', tx_nG6_utils::get_available_space_ids()); $smarty->assign('tx_nG6_pi6_redirection_page',$this->conf['redirection_page']); $smarty->assign('ng6_purge_delay',$this->conf['delay_purge']); return $smarty->fetch('administration_view.tpl'); } static function send_purge_demand_mail($project_ids, $extension_allowed = 1){ $project_name=""; foreach(explode(",", $project_ids) as $project_id){ #retrieve project data $p=tx_nG6_db::select_a_project_retention_data_info($project_id, FALSE, TRUE); #retrieve discarded emails $string_emails_to_discard = $GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["email_to_discard"] ; $array_emails_to_discard = explode(',',$string_emails_to_discard); #build email list of managers $users_id=array(); $users_emails = array(); foreach ( $p[$project_id]["users"] as $u ){ if (!isset ($users_id[$u["right_level_label"]]) ){ $users_id[$u["right_level_label"]]=Array(); $users_emails[$u["right_level_label"]]=Array(); } $users_id[$u["right_level_label"]][] = $u["user_id"]; $users_emails[$u["right_level_label"]][] = $u["email"]; } //Warn if mail is sent to several manager $email_warn="" ; $purge_email_to=""; if ( count( $users_emails['manager']) > 1 ) { $email_warn.="Be aware that every user associated with this project received this email, please send only one answer per purge alert number.\n"; } $purge_user_id_to = array(); $users_emails_to = array(); if(isset($users_emails['administrator'])){ $users_emails_to = array_merge($users_emails_to, $users_emails['administrator']); $purge_user_id_to = array_merge($purge_user_id_to, $users_id['administrator']); } if(isset($users_emails['manager'])){ $users_emails_to = array_merge($users_emails_to,$users_emails['manager']); $purge_user_id_to = array_merge($purge_user_id_to, $users_id['manager']); } if(isset($users_emails['member'])){ $users_emails_to = array_merge($users_emails_to, $users_emails['member']); $purge_user_id_to = array_merge($purge_user_id_to, $users_id['member']); } $purge_email_to = join(', ',$users_emails_to ); $email_warn.= "Every user associated with this project received this alert.\n"; if( isset($users_emails['administrator']) && count($users_emails['administrator']) > 0 ){ $email_warn.= " - Administrator(s): ".join(', ',$users_emails['administrator']). "\n"; } if( isset($users_emails['manager']) && count($users_emails['manager']) > 0 ){ $email_warn.= " - Manager(s): ".join(', ',$users_emails['manager']). "\n"; } if( isset($users_emails['member']) && count($users_emails['member']) > 0 ){ $email_warn.= " - Member(s): ".join(', ',$users_emails['member']). "\n"; } //Retrieve purgeable information for email $run_info=Array(); $analyses_info=Array(); $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 $search=array("###TYPE_OBJECT###","###RUN_ID###","###PROJECT_ID###"); foreach($all_purgeable_runs as $run_id ){ $run = tx_nG6_db::select_run($run_id); $run_name = $run["name"]; $replace=array("run_id",$run_id,$project_id); $run_info[] = ''.$run["name"].' ('.$run_id.')'; } foreach($all_purgeable_analysis as $analysis_id ){ $analysis = tx_nG6_db::select_analyse($analysis_id); $analysis_name = $analysis["name"]; $replace=array("analyze_id",$analysis_id,$project_id); $analyses_info[] = ''.$analysis_name.' ('.$analysis_id.')'; } if (!$GLOBALS['TSFE']->fe_user->user['uid']){ http_response_code(401); return "Nobody seems to be authenticated."; } #Add purge demand to get id $purge_demand_id = tx_nG6_db::add_purge_demand($GLOBALS['TSFE']->fe_user->user['uid'],$project_id,$p[$project_id]["total_purgeable_size"],$all_purgeable_runs,$all_purgeable_analysis,$purge_user_id_to); //If the trigger check_demand_insert is triggered, add_purge_demand() returns 0 and the process has to send a mail to warn the admins instead. if($purge_demand_id > 0){ // We remove the hidden runs and analyzes from $p so they will not appear in the purge alert mail $p=tx_nG6_db::select_a_project_retention_data_info($project_id, FALSE, FALSE); //We then need to compute the displayed values once more, to make the hidden elements part of the purge without displaying them in the mail $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"]; //We need to reset those values to only display unhidden elements $run_info=Array(); $analyses_info=Array(); foreach($all_purgeable_runs as $run_id ){ $run = tx_nG6_db::select_run($run_id); $run_name = $run["name"]; $replace=array("run_id",$run_id,$project_id); $run_info[] = ''.$run["name"].' ('.$run_id.')'; } foreach($all_purgeable_analysis as $analysis_id ){ $analysis = tx_nG6_db::select_analyse($analysis_id); $analysis_name = $analysis["name"]; $replace=array("analyze_id",$analysis_id,$project_id); $analyses_info[] = ''.$analysis_name.' ('.$analysis_id.')'; } #Build corresponding string array //We get the project size without any hidden run or analyze $total_project_size = tx_nG6_db::get_project_size($project_id, true, false); $mail = tx_nG6_utils::get_purge_mail($p[$project_id]["project_name"],$project_id, $nb_run_purgeable,$nb_analyse_purgeable, $purge_demand_id, tx_nG6_utils::get_octet_string_representation($p[$project_id]["total_purgeable_size"]), tx_nG6_utils::get_octet_string_representation($total_project_size), $GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["delay_purge"], $GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["extension_url_price"], $GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["min_extension_duration"], $GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["min_extension_size"], $email_warn, join(', ', $run_info), join(', ', $analyses_info), $extension_allowed); $to = $purge_email_to; $subject = '[nG6 purge] No '.$purge_demand_id.' - Project '.$p[$project_id]["project_name"]; $headers = array(); $headers[] = 'From: '.$GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["email_from"]; $headers[] = 'Errors-To: '.$GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["email_from"]; $headers[] = 'X-Mailer: PHP/' . phpversion(); $headers[] = 'MIME-Version: 1.0'; $headers[] = 'Content-type: text/html; charset=utf-8'; $headers[] = 'Cc: '.$GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["email_copy"]; mail($to, $subject, $mail, implode("\r\n", $headers)); //TODO check return function mail ok }else{ //If the demand could not be inserted because another one already exists for the given project, we send a mail to the nG6 admins $mail = tx_nG6_utils::get_multiple_purge_demand_mail($p[$project_id]["project_name"]); //We send the mail to ng6-support@groupes.renater.fr and Didier (See $GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["email_warning"] ) $to = $GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["email_warning"]; $subject = '[nG6 purge] Project '.$p[$project_id]["project_name"].' already has a purge demand'; $headers[] = 'From: '.$GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["email_from"]; $headers[] = 'Errors-To: '.$GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["email_from"]; $headers[] = 'X-Mailer: PHP/' . phpversion(); $headers[] = 'MIME-Version: 1.0'; $headers[] = 'Content-type: text/html; charset=utf-8'; $headers[] = 'Cc: '.$GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["email_copy"]; mail($to, $subject, $mail, implode("\r\n", $headers)); } } return "Mail sent"; } static function resend_purge_demand_mail ($demands_id) { $res_demands = tx_nG6_db::get_purge_demand_from_id($demands_id); foreach($res_demands as $res_demand){ $res_project = tx_nG6_db::select_project($res_demand["project_id"]); //We compute the project size without hidden elements $total_project_size = tx_nG6_db::get_project_size($res_demand["project_id"], true, false) ; $run_info=Array(); $analyses_info=Array(); $search=array("###TYPE_OBJECT###","###RUN_ID###","###PROJECT_ID###"); $project_id = $res_demand["project_id"]; $all_purgeable_runs = explode(',',$res_demand["run_ids"]); $all_purgeable_analysis = explode(',',$res_demand["analyze_ids"]); $nb_run_purgeable = 0; $nb_analyse_purgeable = 0; $displayed_purge_size = 0; foreach($all_purgeable_runs as $run_id ){ $run = tx_nG6_db::select_run($run_id); // We exclude hidden runs from the mail if( $run["hidden"] != 1 && isset($run["name"]) ){ $run_name = $run["name"]; $replace=array("run_id",$run_id,$project_id); $run_info[] = ''.$run["name"].' ('.$run_id.')'; $nb_run_purgeable++; $displayed_purge_size = $displayed_purge_size + $run["storage_size"]; } } foreach($all_purgeable_analysis as $analysis_id ){ $analysis = tx_nG6_db::select_analyse($analysis_id); // We exclude hidden analyzes from the mail if( $analysis["hidden"] != 1 && isset($analysis["name"]) ){ $analysis_name = $analysis["name"]; $replace=array("analyze_id",$analysis_id,$project_id); $analyses_info[] = ''.$analysis_name.' ('.$analysis_id.')'; $nb_analyse_purgeable++; $displayed_purge_size = $displayed_purge_size + $analysis["storage_size"]; } } //We now use join(', ', $run_info) and join(', ', $analyses_info) in get_purge_mail(). $extension_allowed = 1; $mail = tx_nG6_utils::get_purge_mail($res_project["name"],$res_demand["project_id"], $nb_run_purgeable, $nb_analyse_purgeable, $res_demand["demand_id"], tx_nG6_utils::get_octet_string_representation($displayed_purge_size), tx_nG6_utils::get_octet_string_representation($total_project_size), $GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["delay_purge"], $GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["extension_url_price"], $GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["min_extension_duration"], $GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["min_extension_size"], "This email was send to ". join(', ',$res_demand["emails"]).". ", join(', ', $run_info), join(', ', $analyses_info), $extension_allowed); $headers = array(); $subject = '[nG6 purge / reminder] No '.$res_demand["demand_id"].' - Project '.$res_project["name"]; $headers[] = 'From: '.$GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["email_from"]; //$headers[] = 'Errors-To: '.$GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["email_copy"]; $headers[] = 'Errors-To: '.$GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["email_from"]; $headers[] = 'X-Mailer: PHP/' . phpversion(); $headers[] = 'MIME-Version: 1.0'; $headers[] = 'Content-type: text/html; charset=utf-8'; $headers[] = 'Cc: '.$GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["email_copy"]; $to= join(",",$res_demand["emails"]); mail($to, $subject, $mail, implode("\r\n", $headers)); } } } 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']); } ?>