class.tx_nG6_pi6.php 17.5 KB
Newer Older
Jerome Mariette's avatar
Jerome Mariette committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
/***************************************************************
*  Copyright notice
*
*  (c) 2009 PF bioinformatique de Toulouse <>
*  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 <>
 */

30
31
32
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'); 
Jerome Mariette's avatar
Jerome Mariette committed
33

34
class tx_nG6_pi6 extends \TYPO3\CMS\Frontend\Plugin\AbstractPlugin {
Jerome Mariette's avatar
Jerome Mariette committed
35
36
37
	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.
38
	
Jerome Mariette's avatar
Jerome Mariette committed
39
	//var $pi_checkCHash = TRUE;
40
	
Jerome Mariette's avatar
Jerome Mariette committed
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
	/**
	 * 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;
58

Jerome Mariette's avatar
Jerome Mariette committed
59
60
		// Add the jquery libs + the tree plugins and its css
		$GLOBALS['TSFE']->additionalHeaderData[$this->prefixId] = '
61
62
63
64
65
66
67
68
69
70
			<script type="text/javascript" src="'.\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::siteRelPath($this->extKey).'res/js/jquery.min.js"></script>
			<script type="text/javascript" src="'.\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::siteRelPath($this->extKey).'res/js/highstock.js"></script>
			<script type="text/javascript" src="'.\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::siteRelPath($this->extKey).'res/js/jquery.highcharts.exporting.js"></script>
			<script type="text/javascript" src="'.\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::siteRelPath($this->extKey).'res/js/jquery.dataTables.min.js"></script>
			<script type="text/javascript" src="'.\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::siteRelPath($this->extKey).'res/js/bootstrap.min.js"></script>
			<script type="text/javascript" src="'.\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::siteRelPath($this->extKey).'res/js/dataTables.bootstrap.js"></script>
			<script type="text/javascript" src="'.\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::siteRelPath($this->extKey).'res/js/typeahead.bundle.js"></script>
			<script type="text/javascript" src="'.\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::siteRelPath($this->extKey).'res/js/jflow.min.js"></script>
			<script type="text/javascript" src="'.\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::siteRelPath($this->extKey).'res/js/tx_nG6_utils.js"></script>
			<script type="text/javascript" src="'.\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::siteRelPath($this->extKey).'res/js/tx_nG6_pi6.js"></script>
Penom Nom's avatar
Penom Nom committed
71
					
72
73
74
75
76
77
			<link type="text/css" rel="stylesheet" media="screen" href="'.\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::siteRelPath($this->extKey).'res/css/bootstrap-theme.min.css"/>
			<link type="text/css" rel="stylesheet" media="screen" href="'.\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::siteRelPath($this->extKey).'res/css/dataTables.bootstrap.css"/>
			<link type="text/css" rel="stylesheet" media="screen" href="'.\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::siteRelPath($this->extKey).'res/css/typeaheadjs.css"/>	
			<link type="text/css" rel="stylesheet" media="screen" href="'.\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::siteRelPath($this->extKey).'res/css/font-awesome.css"/>
			<link type="text/css" rel="stylesheet" media="screen" href="'.\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::siteRelPath($this->extKey).'res/css/jflow.min.css"/>
			<link type="text/css" rel="stylesheet" media="screen" href="'.\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::siteRelPath($this->extKey).'res/css/tx_nG6.css"/>';
Jerome Mariette's avatar
Jerome Mariette committed
78
79

		$smarty = new Smarty();
80
81
82
83
		$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');
Jerome Mariette's avatar
Jerome Mariette committed
84
85
86
		$smarty->security = true;
		$smarty->security_settings['MODIFIER_FUNCS'] = array('count');

Jerome Mariette's avatar
Jerome Mariette committed
87
88
89
		$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']);
90
        $smarty->assign('user_name', $GLOBALS['TSFE']->fe_user->user['username']);
Jerome Mariette's avatar
Jerome Mariette committed
91
92
		$smarty->assign('group_list', $group_list);
		$smarty->assign('data_folder', $this->conf["data"]);
93
		$smarty->assign('server_url', $this->conf['server_url']);
94
        $smarty->assign('server_name', $this->conf["server_name"]);
95
                
96
97
		$distribution = tx_nG6_db::select_projects_repartition('create_user', 'title');
		$smarty->assign('distribution', $distribution);
Penom Nom's avatar
Penom Nom committed
98
		$smarty->assign('ng6_admin_users', tx_nG6_db::get_ng6_admin_users() );
99
               
100
		$smarty->assign('ng6_purge_delay',$this->conf['delay_purge']);
Jerome Mariette's avatar
Jerome Mariette committed
101
102
		return $smarty->fetch('administration_view.tpl');
	}
103
        
104
        static function send_purge_demand_mail($project_ids)	{
105
                 
Celine Noirot's avatar
Celine Noirot committed
106
                $project_name="";
107
108
                 foreach(explode(",", $project_ids) as $project_id){

109
                        #retrieve project data
Romain Therville's avatar
Romain Therville committed
110
                        $p=tx_nG6_db::select_a_project_retention_data_info($project_id, FALSE, TRUE);
111

112
                        #build email list of managers
113
                        $users_id=array();
114
						$users_emails = array();
Celine Noirot's avatar
Celine Noirot committed
115
                        foreach ( $p[$project_id]["users"] as  $u ){
116
117
                        	if (!isset ($users_id[$u["right_level_label"]]) ){
                        		$users_id[$u["right_level_label"]]=Array();
118
119
                        		$users_emails[$u["right_level_label"]]=Array();
                        	}
120
                           $users_id[$u["right_level_label"]][] = $u["user_id"];
121
                           $users_emails[$u["right_level_label"]][] = $u["email"];
122
                        }
123

124
125
126
                        #Warn if mail is sent to several manager
                        $email_warn="" ;
                        $purge_email_to="";
127
                        
128
129
130
131
                        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";
                        }
                        
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
                        $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']);
                        }
                        
147
148
149
                        $purge_email_to = join(', ',$users_emails_to );
                        
                        $email_warn.=  "Every user associated with this project received this alert.\n";
150
                        if( isset($users_emails['administrator']) && count($users_emails['administrator']) > 0 ){
151
152
							$email_warn.=  " - Administrator(s): ".join(', ',$users_emails['administrator']). "\n";
						}
153
						if( isset($users_emails['manager']) && count($users_emails['manager']) > 0 ){
154
							$email_warn.=  " - Manager(s): ".join(', ',$users_emails['manager']). "\n";
155
						}
156
157
						if( isset($users_emails['member']) && count($users_emails['member']) > 0 ){
							$email_warn.=  " - Member(s): ".join(', ',$users_emails['member']). "\n";
158
159
                        }
                        
Celine Noirot's avatar
Celine Noirot committed
160
                        //Retrieve purgeable information for email
161
                        $run_info=Array();
162
                        $analyses_info=Array();
163

Celine Noirot's avatar
Celine Noirot committed
164
165
166
167
168
                        $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
169
170
                        $search=array("###TYPE_OBJECT###","###RUN_ID###","###PROJECT_ID###");
                       
Celine Noirot's avatar
Celine Noirot committed
171
172
                        foreach($all_purgeable_runs as $run_id ){
                                $run = tx_nG6_db::select_run($run_id);
173
                                $run_name = $run["name"];    
174
175
176
177
                                $replace=array("run_id",$run_id,$project_id);
                                $run_info[] = '<a href="'.str_replace($search, $replace, $GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["run_link_url"]).'">'.$run["name"].' ('.$run_id.')</a>';
                        }
                        foreach($all_purgeable_analysis as $analysis_id ){
178
                        	$analysis = tx_nG6_db::select_analyse($analysis_id); 
179
                        	$analysis_name = $analysis["name"];
180
                        	$replace=array("analyze_id",$analysis_id,$project_id);
181
                        	$analyses_info[] = '<a href="'.str_replace($search, $replace, $GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["run_link_url"]).'">'.$analysis_name.' ('.$analysis_id.')</a>';
182
                        }
Gerald Salin's avatar
#79    
Gerald Salin committed
183
184
185
186
                        if (!$GLOBALS['TSFE']->fe_user->user['uid']){
                        	http_response_code(401);
                        	return "Nobody seems to be authenticated.";	
                        }
187
                        #Add purge demand to get id
188
                        $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);
189
190
                        #Build corresponding string array           
                        //TODO RETURN TOTAL SIZE tx_nG6_utils::get_octet_string_representation($p[$project_id]["total_size"]         
191
                        $total_project_size = tx_nG6_db::get_project_size($project_id, true);
192
            
193
                        $mail = tx_nG6_utils::get_purge_mail($p[$project_id]["project_name"],$project_id, $nb_run_purgeable,$nb_analyse_purgeable, $purge_demand_id,
194
195
196
                            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"],
197
                            $GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["min_extension_size"], $email_warn,  join(', ', $run_info), join(', ', $analyses_info));
198
                        
199
                        $to      =   $purge_email_to;
Celine Noirot's avatar
Celine Noirot committed
200
                        $subject = '[nG6 purge] No '.$purge_demand_id.' - Project '.$p[$project_id]["project_name"];
201
                        $headers[] = 'From: '.$GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["email_from"];
Gerald Salin's avatar
#79    
Gerald Salin committed
202
203
                        //$headers[] = 'From: gerald.salin@inra.fr';
                        $headers[] = 'Errors-To: '.$GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["email_copy"];
204
                        $headers[] = 'X-Mailer: PHP/' . phpversion();
205
206
207
                        $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"];
208
                        mail($to, $subject, $mail, implode("\r\n", $headers));
209
210
211
                        //TODO check return function mail ok
                }	
                return "Mail sent";
212
        }
Celine Noirot's avatar
Celine Noirot committed
213
 
214
                static function resend_purge_demand_mail ($demands_id) {
215
216
217
218
                $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) ;
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
                        $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"]);
                        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[] = '<a href="'.str_replace($search, $replace, $GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["run_link_url"]).'">'.$run["name"].' ('.$run_id.')</a>';
						}
						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[] = '<a href="'.str_replace($search, $replace, $GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["run_link_url"]).'">'.$analysis_name.' ('.$analysis_id.')</a>';
						}
						
238
                        $mail = tx_nG6_utils::get_purge_mail($res_project["name"],$res_demand["project_id"],
239
240
241
242
                            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"],
243
                            $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));
244
245
                        
                        $subject = '[nG6 purge / reminder] No '.$res_demand["demand_id"].' - Project '.$res_project["name"];
246
                        $headers[] = 'From: '.$GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["email_from"];
Gerald Salin's avatar
#79    
Gerald Salin committed
247
                        $headers[] = 'Errors-To: '.$GLOBALS['TSFE']->tmpl->setup["plugin."]["tx_nG6_pi6."]["email_copy"];
248
                        $headers[] = 'X-Mailer: PHP/' . phpversion();
249
250
251
                        $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"];
252
253
254
255
256
                        
                        $to= join(",",$res_demand["emails"]);
                        mail($to, $subject, $mail, implode("\r\n", $headers));
                }
        }
Jerome Mariette's avatar
Jerome Mariette committed
257
258
259
260
261
262
}

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

263
?>