class.tx_nG6_pi6.php 13 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
30
31
32
33
34
35
36
37
38
39
<?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 <>
 */

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;
40

Jerome Mariette's avatar
Jerome Mariette committed
41
42
43
44
45
46
47
48
49
50
51
52
53
	/**
	 * 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'];
		}
54

Jerome Mariette's avatar
Jerome Mariette committed
55
56
57
58
		$this->pi_loadLL();
		$this->conf=$conf;
		$this->pi_setPiVarDefaults();
		$this->pi_USER_INT_obj=1;
59
                
Jerome Mariette's avatar
Jerome Mariette committed
60
61
		// Add the jquery libs + the tree plugins and its css
		$GLOBALS['TSFE']->additionalHeaderData[$this->prefixId] = '
Penom Nom's avatar
Penom Nom committed
62
			<script type="text/javascript" src="'.t3lib_extMgm::siteRelPath($this->extKey).'res/js/jquery.min.js"></script>
63
			<script type="text/javascript" src="'.t3lib_extMgm::siteRelPath($this->extKey).'res/js/highstock.js"></script>
Jerome Mariette's avatar
Jerome Mariette committed
64
			<script type="text/javascript" src="'.t3lib_extMgm::siteRelPath($this->extKey).'res/js/jquery.highcharts.exporting.js"></script>
Jerome Mariette's avatar
Jerome Mariette committed
65
			<script type="text/javascript" src="'.t3lib_extMgm::siteRelPath($this->extKey).'res/js/jquery.dataTables.min.js"></script>
Penom Nom's avatar
Penom Nom committed
66
67
68
			<script type="text/javascript" src="'.t3lib_extMgm::siteRelPath($this->extKey).'res/js/bootstrap.min.js"></script>
			<script type="text/javascript" src="'.t3lib_extMgm::siteRelPath($this->extKey).'res/js/dataTables.bootstrap.js"></script>
			<script type="text/javascript" src="'.t3lib_extMgm::siteRelPath($this->extKey).'res/js/typeahead.bundle.js"></script>
Penom Nom's avatar
Penom Nom committed
69
			<script type="text/javascript" src="'.t3lib_extMgm::siteRelPath($this->extKey).'res/js/jflow.min.js"></script>
Penom Nom's avatar
Penom Nom committed
70
			<script type="text/javascript" src="'.t3lib_extMgm::siteRelPath($this->extKey).'res/js/tx_nG6_utils.js"></script>
Penom Nom's avatar
Penom Nom committed
71
72
73
74
75
76
			<script type="text/javascript" src="'.t3lib_extMgm::siteRelPath($this->extKey).'res/js/tx_nG6_pi6.js"></script>
					
			<link type="text/css" rel="stylesheet" media="screen" href="'.t3lib_extMgm::siteRelPath($this->extKey).'res/css/bootstrap-theme.min.css"/>
			<link type="text/css" rel="stylesheet" media="screen" href="'.t3lib_extMgm::siteRelPath($this->extKey).'res/css/dataTables.bootstrap.css"/>
			<link type="text/css" rel="stylesheet" media="screen" href="'.t3lib_extMgm::siteRelPath($this->extKey).'res/css/typeaheadjs.css"/>	
			<link type="text/css" rel="stylesheet" media="screen" href="'.t3lib_extMgm::siteRelPath($this->extKey).'res/css/font-awesome.css"/>
Penom Nom's avatar
Penom Nom committed
77
			<link type="text/css" rel="stylesheet" media="screen" href="'.t3lib_extMgm::siteRelPath($this->extKey).'res/css/jflow.min.css"/>
Jerome Mariette's avatar
Jerome Mariette committed
78
			<link type="text/css" rel="stylesheet" media="screen" href="'.t3lib_extMgm::siteRelPath($this->extKey).'res/css/tx_nG6.css"/>';
Jerome Mariette's avatar
Jerome Mariette committed
79
80
81
82
83
84
85
86
87

		$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');

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

110
                        #retrieve project data
Celine Noirot's avatar
Celine Noirot committed
111
                        $p=tx_nG6_db::select_a_project_retention_data_info($project_id);
112

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

125
126
127
                        #Warn if mail is sent to several manager
                        $email_warn="" ;
                        $purge_email_to="";
128
                        $purge_user_id_to=Array();
129
130
131
132
133
                        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']);
134
                                $purge_user_id_to=$users_id['manager'];
135
136
                        } elseif ( count($users_emails['manager']) == 0) {
                      	  $purge_email_to=join(', ', array_merge($users_emails['administrator'],$users_emails['member']));
137
                      	  $purge_user_id_to=array_merge($users_id['administrator'],$users_id['member']);
138
139
								  $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";
140
141
								  $email_warn.=  " - Members(s): ".join(', ',$users_emails['member']). "\n";                  

142
								}
Celine Noirot's avatar
Celine Noirot committed
143
                        //Retrieve purgeable information for email
144
                        $run_info=Array();
Celine Noirot's avatar
Celine Noirot committed
145
                        
146
                        //ici bug car on prend l'ensemble des runs/analyses du projets 
Celine Noirot's avatar
Celine Noirot committed
147
148
149
150
151
152
153
                        $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);
154
                                $run_name = $run["name"];    
155
                                $run_info[]= $run["name"]." ($run_id)";
156
157
158
                        }
                        
                        #Add purge demand to get id
159
                        $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_user_id_to);
160
161
162
163
                        #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) ;
            
164
                        $mail = tx_nG6_utils::get_purge_mail($p[$project_id]["project_name"],$project_id, $nb_run_purgeable,$nb_analyse_purgeable, $purge_demand_id,
165
166
167
168
                        tx_nG6_utils::get_octet_string_representation($p[$project_id]["total_purgeable_size"]),    tx_nG6_utils::get_octet_string_representation($total_project_size), 
                        $GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['ng6']['delay_purge'], 
                        $GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['ng6']['extension_url_price'], $GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['ng6']['min_extension_duration'],
                        $GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['ng6']['min_extension_size'], $email_warn,  join(', ', $run_info), join(', ', $all_purgeable_analysis));
169
                        
170
                        $to      =   $purge_email_to;
Celine Noirot's avatar
Celine Noirot committed
171
                        $subject = '[nG6 purge] No '.$purge_demand_id.' - Project '.$p[$project_id]["project_name"];
172
                        $headers[] = 'From: '.$GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['ng6']['email_from'];
173
                        $headers[] = 'X-Mailer: PHP/' . phpversion();
174
                        #TODO Uncomment
Celine Noirot's avatar
Celine Noirot committed
175
                        $to      =   "celine.noirot@inra.fr";
176
                        mail($to, $subject, $mail, implode("\r\n", $headers));
177
178
179
                        //TODO check return function mail ok
                }	
                return "Mail sent";
180
        }
Celine Noirot's avatar
Celine Noirot committed
181
 
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
        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['TYPO3_CONF_VARS']['EXT']['extConf']['ng6']['delay_purge'], 
                        $GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['ng6']['extension_url_price'], $GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['ng6']['min_extension_duration'],
                        $GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['ng6']['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['TYPO3_CONF_VARS']['EXT']['extConf']['ng6']['email_from'];
                        $headers[] = 'X-Mailer: PHP/' . phpversion();
                        
                        $to= join(",",$res_demand["emails"]);
                        #TODO Uncomment
                        $to      =   "celine.noirot@inra.fr";
                        mail($to, $subject, $mail, implode("\r\n", $headers));

                }
        }
Jerome Mariette's avatar
Jerome Mariette committed
205
206
207
208
209
210
}

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

211
?>