* 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_purge_delay',$this->conf['delay_purge']); return $smarty->fetch('administration_view.tpl'); } static function send_purge_demand_mail($project_ids) { $project_name=""; 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_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=""; $purge_user_id_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 received this email), please send only one answer per purge alert number.\n"; } $purge_email_to=join(',', $users_emails['manager']); $purge_user_id_to=$users_id['manager']; } elseif ( count($users_emails['manager']) == 0) { if( count( $users_emails['member']) >= 1){ $users_emails_to = array_merge($users_emails['administrator'],$users_emails['member']); $purge_user_id_to=array_merge($users_id['administrator'],$users_id['member']); }else{ $users_emails_to = $users_emails['administrator']; $purge_user_id_to=array_merge($users_id['administrator']); } $purge_email_to=join(', ',$users_emails_to ); $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(); $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); #Build corresponding string array //TODO RETURN TOTAL SIZE tx_nG6_utils::get_octet_string_representation($p[$project_id]["total_size"] $total_project_size = tx_nG6_db::get_project_size($project_id, true); $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)); //$to = $purge_email_to; $to = "romain.therville@inra.fr"; $subject = '[nG6 purge] No '.$purge_demand_id.' - Project '.$p[$project_id]["project_name"]; $headers[] = 'From: '.$GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["email_from"]; //$headers[] = 'From: gerald.salin@inra.fr'; $headers[] = 'Errors-To: '.$GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["email_copy"]; $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 } 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"]); $total_project_size = tx_nG6_db::get_project_size($res_demand["project_id"], true) ; $mail = tx_nG6_utils::get_purge_mail($res_project["name"],$res_demand["project_id"], count(explode(",", $res_demand["run_ids"])), count(explode(",", $res_demand["analyze_ids"])), $res_demand["demand_id"], tx_nG6_utils::get_octet_string_representation($res_demand["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"]).". ", $res_demand["run_ids"], $res_demand["analyze_ids"]); $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[] = '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']); } ?>