* 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!
***************************************************************/
require_once(PATH_t3lib.'class.t3lib_befunc.php');
require_once(PATH_t3lib.'stddb/tables.php');
require_once(t3lib_extMgm::extPath('cms','ext_tables.php'));
require_once(PATH_t3lib.'class.t3lib_db.php');
require_once(t3lib_extMgm::extPath('nG6').'/lib/class.tx_nG6_db.php');
require_once(t3lib_extMgm::extPath('nG6').'/lib/class.tx_nG6_utils.php');
require_once(t3lib_extMgm::extPath('nG6').'/lib/class.tx_nG6_process.php');
require_once(t3lib_extMgm::extPath('nG6').'/res/smarty/libs/Smarty.class.php');
/**
* Class 'tx_nG6_eid' for the 'nG6' extension.
* This class is in charge of all communication between the client and the server using AJAX
*
* @author PF bioinformatique de Toulouse <>
*/
class tx_nG6_eid {
/**
* The main function of the tx_nG6_eid, this function is the one called when using ajax
*/
function main() {
// Connect to the databse
tslib_eidtools::connectDB();
$type = trim(t3lib_div::_GP('type'));
$user_id = trim(t3lib_div::_GP('user_id'));
// If the type of data requested is project
if ($type == 'project') {
$project_id = trim(t3lib_div::_GP('id'));
// Select all runs linked to the project
$project_runs = tx_nG6_db::get_user_project_runs($user_id, $project_id, 'tx_nG6_run.date DESC');
// for each run
$html_tree = '';
foreach($project_runs as $run_id => $run_values) {
$html_tree .= '
'.str_replace(array('###SPAN_NAME###', '###SPAN_DATE###', '###SPAN_NB_SEQ###', '###SPAN_SPECIES###'), array($run_values['name'], strftime('%d-%m-%y',$run_values['date']), $run_values['nb_sequences'], $run_values['species']), trim(t3lib_div::_GP('run_description'))).'';
}
// Then all project analysis
$project_analysis = tx_nG6_db::get_user_project_analysis($user_id, $project_id, 'tx_nG6_analyze.name');
foreach($project_analysis as $analyse_id => $analyse_values) {
$html_tree .= ' '.str_replace(array('###SPAN_NAME###'), array($analyse_values["name"]), trim(t3lib_div::_GP('analyse_description'))).'';
}
// Return the html_tree
print $html_tree;
// If the type of data requested is run
} else if ($type == 'run'){
$run_id = trim(t3lib_div::_GP('id'));
// Select all analysis linked to the run and the run information
$run_analysis = tx_nG6_db::get_user_run_analysis($user_id, $run_id, 'tx_nG6_analyze.name');
$run_info = tx_nG6_db::select_run($run_id);
// for each analysis
$html_tree = '';
$html_tree .= ' '.trim(t3lib_div::_GP("raw_data_description")).'';
foreach($run_analysis as $analyse_id => $analyse_values) {
$html_tree .= ' '.str_replace(array('###SPAN_NAME###'), array($analyse_values["name"]), trim(t3lib_div::_GP('analyse_description'))).'';
}
// Return the html_tree
print $html_tree;
// If downloading data is requested
} else if ($type == 'download') {
$format = trim(t3lib_div::_GP('format'));
// If link in home directory
if ($format == 'home_link') {
$ids = trim(t3lib_div::_GP('ids'));
$data_folder = trim(t3lib_div::_GP('data_folder'));
$user_login = trim(t3lib_div::_GP('user_login'));
$user_pwd = trim(t3lib_div::_GP('user_pwd'));
$user_directory = trim(t3lib_div::_GP('user_directory'));
$retcode = $this->create_symbolic_links($user_id, $user_login, $user_pwd, $ids, $data_folder, $user_directory);
print $retcode;
// If a .tar.gz file
} else {
$ids = trim(t3lib_div::_GP('ids'));
$data_folder = trim(t3lib_div::_GP('data_folder'));
$tmp_folder = trim(t3lib_div::_GP('tmp_folder'));
$user_email = trim(t3lib_div::_GP('user_email'));
$title_email = trim(t3lib_div::_GP('title_email'));
$msg_email = trim(t3lib_div::_GP('msg_email'));
$archive_info = $this->create_archive_script($user_id, $ids, $data_folder, $tmp_folder, "tar.gz", $user_email, $title_email, $msg_email);
$process = new Process("tcsh ".$archive_info[0]);
print "pid=".$process->getPid()."&archive_path=".$archive_info[1];
}
// If asked to check a job status
} else if($type == 'check_status') {
$pid = trim(t3lib_div::_GP('pid'));
$archive_path = trim(t3lib_div::_GP('archive_path'));
$process = new Process();
$process->setPid($pid);
// If the job is done
if ($process->status()) {
print "pid=0&archive_path=".$archive_path;
// If the job is still runing
} else {
print "pid=".$process->getPid()."&archive_path=".$archive_path;
}
// If asked to hide a {project/run}
} else if ($type == 'hide') {
$ids = trim(t3lib_div::_GP('ids'));
// {project/run}_id to array (1;2;3;...) -> [1;2;3;...]
$tab_ids = explode(";",$ids);
$hide_level = trim(t3lib_div::_GP('hide_level'));
if ($hide_level == 'project') {
foreach($tab_ids as $id => $value) {
tx_nG6_db::hide_project($value);
}
} else if ($hide_level == 'run') {
foreach($tab_ids as $id => $value) {
tx_nG6_db::hide_run($value, $user_id);
}
} else if ($hide_level == 'analysis') {
foreach($tab_ids as $id => $value) {
tx_nG6_db::hide_analysis($value, $user_id);
}
}
// If asked to unhide a {project/run}
} else if ($type == 'unhide') {
$ids = trim(t3lib_div::_GP('ids'));
// {project/run}_id to array (1;2;3;...) -> [1;2;3;...]
$tab_ids = explode(";",$ids);
$unhide_level = trim(t3lib_div::_GP('unhide_level'));
if ($unhide_level == 'project') {
foreach($tab_ids as $id => $value) {
tx_nG6_db::unhide_project($value);
}
} else if ($unhide_level == 'run') {
foreach($tab_ids as $id => $value) {
tx_nG6_db::unhide_run($value, true);
}
} else if ($unhide_level == 'analysis') {
foreach($tab_ids as $id => $value) {
tx_nG6_db::unhide_analysis($value, true);
}
}
// If asked to delete a {project/run/analyze}
} else if ($type == 'delete') {
$ids = trim(t3lib_div::_GP('ids'));
// {project/run}_id to array (1;2;3;...) -> [1;2;3;...]
$tab_ids = explode(";",$ids);
$delete_level = trim(t3lib_div::_GP('del_level'));
$data_folder = trim(t3lib_div::_GP('data_folder'));
$user_login = trim(t3lib_div::_GP('user_login'));
$user_pwd = trim(t3lib_div::_GP('user_pwd'));
$res = 0;
// check login and password
if (isset($user_login) && isset($user_pwd) && $user_login != 'undefined' && $user_pwd != 'undefined') {
$res = 0;
$connection = ssh2_connect('127.0.0.1', 22);
if (!$connection) { $res = 3; }
if (!ssh2_auth_password($connection, $user_login, $user_pwd)) { $res=2;}
} else {
$res = 3;
}
if ($res == 0) {
if ($delete_level == 'project') {
foreach($tab_ids as $id => $value) {
$res = tx_nG6_db::delete_project($value, $user_login, $user_pwd, $data_folder);
if ($res != 0) { break; }
}
} else if ($delete_level == 'run') {
foreach($tab_ids as $id => $value) {
$res = tx_nG6_db::delete_run($value, $user_login, $user_pwd, $data_folder);
if ($res != 0) { break; }
}
} else if ($delete_level == 'analysis') {
foreach($tab_ids as $id => $value) {
$res = tx_nG6_db::delete_analysis($value, $user_login, $user_pwd, $data_folder);
if ($res != 0) { break; }
}
}
}
print $res;
// If asked to publish a project
} else if ($type == 'publish') {
$ids = trim(t3lib_div::_GP('ids'));
// project_id to array (1;2;3;...) -> [1;2;3;...]
$tab_ids = explode(";",$ids);
foreach($tab_ids as $id => $value) {
tx_nG6_db::publish_project($value);
}
// If asked to unpublish a project
} else if ($type == 'unpublish') {
$ids = trim(t3lib_div::_GP('ids'));
// project_id to array (1;2;3;...) -> [1;2;3;...]
$tab_ids = explode(";",$ids);
foreach($tab_ids as $id => $value) {
tx_nG6_db::unpublish_project($value);
}
// If asked the size
} else if ($type == 'get_size') {
$ids = trim(t3lib_div::_GP('ids'));
$view = trim(t3lib_div::_GP('view'));
$data_folder = trim(t3lib_div::_GP('data_folder'));
$tab_ids = explode(",",$ids);
$full_size = 0;
foreach($tab_ids as $id => $value) {
if ($view == "run") {
$full_size += tx_nG6_db::get_run_size($value, $data_folder, true);
} else if ($view == "project") {
$full_size += tx_nG6_db::get_project_size($value, $data_folder, true);
}
}
print tx_nG6_utils::get_octet_string_representation($full_size);
// If update a field
} else if ($type == 'update_db_field') {
//Retrieve infomation
$table = trim(t3lib_div::_GP('table'));
$id = trim(t3lib_div::_GP('pk'));
$field = trim(t3lib_div::_GP('field'));
$value = trim(t3lib_div::_GP('value'));
//If change concernes a date
if( $field == "date" || $field == "crdate" ) {
//Change date format
$date = explode('-', $value);
$timestamp = mktime (0, 0, 1, $date[1], $date[2], $date[0]);
//Update the entity
tx_nG6_db::update_field($table, $id, $field, $timestamp);
}
else {
//Update the entity
tx_nG6_db::update_field($table, $id, $field, $value);
}
print $value;
// If asked the krona page
} else if ($type == 'get_krona') {
$data_folder = trim(t3lib_div::_GP('data_folder'));
$file_name = trim(t3lib_div::_GP('file_name'));
$sequence_name = trim(t3lib_div::_GP('sequence_name'));
$doc = new DomDocument();
$data_root = $doc->createElement('data');
$doc->appendChild($data_root);
$attr_data_root = $doc->createAttribute("xml:id");
$data_root->appendChild($attr_data_root);
$t_data_root = $doc->createTextNode('data_root');
$attr_data_root->appendChild($t_data_root);
$data_root->setIdAttribute("xml:id", true);
$magnitude = $doc->createElement('magnitude');
$magnitude->setAttribute("attribute", "g");
$magnitude = $data_root->appendChild($magnitude);
$magnitudet = $doc->createTextNode('');
$magnitudet = $magnitude->appendChild($magnitudet);
$color = $doc->createElement('color');
$color = $data_root->appendChild($color);
$colort = $doc->createTextNode('');
$colort = $color->appendChild($colort);
$attributes = $doc->createElement('attributes');
$attributes->setAttribute("g", $sequence_name);
$attributes = $data_root->appendChild($attributes);
$attributest = $doc->createTextNode('');
$attributest = $attributes->appendChild($attributest);
$datasets = $doc->createElement('datasets');
$datasets->setAttribute("names", $file_name);
$datasets = $data_root->appendChild($datasets);
$datasetst = $doc->createTextNode('');
$datasetst = $datasets->appendChild($datasetst);
$file_path = trim(t3lib_div::_GP('file_path'));
$file_path = $data_folder."/".$file_path;
// If the file exists
$total = 0;
if (file_exists($file_path)) {
$lines = file($file_path);
// Loop through our array
foreach ($lines as $line_num => $line) {
if ($line != "") {
$mparts = explode("\t", trim($line));
if ($mparts[0] != "taxlevel" and $mparts[0] != "0") {
// If this guy doesnt exist yet
$id_searched = str_replace(".", "_", "node_".$mparts[1]);
if (is_null($doc->getElementById($id_searched))) {
$parentl = implode("_", array_slice(explode(".", $mparts[1]), 0, -1));
// If no parent yet, this is the root
if (is_null($doc->getElementById("node_".$parentl))) {
$current_node = $doc->createElement('node');
$current_node->setAttribute("name", $mparts[2]);
$current_node->setAttribute("g", $mparts[4]);
$id = $doc->getElementById("data_root");
$id->appendChild($current_node);
$attr_current_node = $doc->createAttribute("xml:id");
$current_node->appendChild($attr_current_node);
$t_current_node = $doc->createTextNode("node_".str_replace(".", "_", $mparts[1]));
$attr_current_node->appendChild($t_current_node);
$current_node->setIdAttribute("xml:id", true);
$current_nodet = $doc->createTextNode('');
$current_nodet = $current_node->appendChild($current_nodet);
} else {
$current_node = $doc->createElement('node');
$current_node->setAttribute("name", $mparts[2]);
$current_node->setAttribute("g", $mparts[4]);
$id = $doc->getElementById("node_".$parentl);
$id->appendChild($current_node);
$attr_current_node = $doc->createAttribute("xml:id");
$current_node->appendChild($attr_current_node);
$t_current_node = $doc->createTextNode("node_".str_replace(".", "_", $mparts[1]));
$attr_current_node->appendChild($t_current_node);
$current_node->setIdAttribute("xml:id", true);
$current_nodet = $doc->createTextNode('');
$current_nodet = $current_node->appendChild($current_nodet);
}
}
}
if ($mparts[0] == "1") {
$total += (int)$mparts[4];
}
}
}
}
$color->setAttribute("attribute", "g");
$color->setAttribute("valueStart", "0");
$color->setAttribute("valueEnd", (string)$total);
$color->setAttribute("hueStart", "120");
$color->setAttribute("hueEnd", "360");
$xml_string = $doc->saveXML();
$xml_parts = explode("\n", $xml_string);
$val = '';
$val .= '';
$val .= '';
$val .= '';
$val .= '';
$val .= '';
$val .= '';
$val .= '';
$val .= '

';
$val .= '';
$val .= $xml_parts[1];
$val .= '
';
$val .= '';
$val .= '';
print $val;
} else if ($type == 'delete_users') {
$ids = trim(t3lib_div::_GP('ids'));
// users_id to array (1;2;3;...) -> [1;2;3;...]
$tab_ids = explode(";",$ids);
$project_id = trim(t3lib_div::_GP('project_id'));
// try to delete users in project ...
if($project_id != "") {
$none_access = "";
foreach($tab_ids as $id => $del_user_id) {
tx_nG6_db::delete_access_to_project($del_user_id, $project_id);
// find if user can't access to any project
$users_access = tx_nG6_db::count_number_of_project_access($del_user_id);
if($users_access == '0'){
$none_access .= $del_user_id.";";
}
}
if($none_access == ""){ // everybody has at least one access to a project
$others_access = '0';
}else{ // list separate by coma of users who can't access to any project
$others_access = substr($none_access, 0, -1);
}
print $others_access;
// delete users of DB...
}else{
foreach($tab_ids as $k_id => $v_id){
// delete group
$gid = tx_nG6_db::get_user_usergroup($v_id);
// delete user
tx_nG6_db::delete_user($v_id);
if(tx_nG6_db::count_users_in_group($gid) == 0){
tx_nG6_db::delete_group($gid);
}
}
}
// to change users' right on project
} else if ($type == 'change_right') {
$project_id = trim(t3lib_div::_GP('project_id'));
$c_user_id = trim(t3lib_div::_GP('c_user_id'));
$right_id = trim(t3lib_div::_GP('right_id'));
tx_nG6_db::change_access_to_project($c_user_id, $project_id, $right_id);
// jquery autocomplete
} else if ($type == 'autocomplete') {
$col = trim(t3lib_div::_GP('gender'));
$project_id = trim(t3lib_div::_GP('project_id'));
// user search
if($col != 'group'){
$name_start = trim(t3lib_div::_GP('name_start'));
$res = tx_nG6_db::get_all_names_starting_with($name_start, $col);
foreach($res as $res_id => $res_val){
// find right on project
$res[$res_id]['right_id'] = tx_nG6_db::get_user_right_on_project($res_val['uid'], $project_id);
// find creator username
$cruser_infos = tx_nG6_db::get_user_informations($res[$res_id]['cruser_id']);
$res[$res_id]['cruser_username'] = $cruser_infos['username'];
}
// group search
}else{
$group_name_start = trim(t3lib_div::_GP('group_name'));
$res = tx_nG6_db::get_all_group_starting_with($group_name_start);
}
$json_res = json_encode($res);
print $json_res;
// add a new member on project
} else if ($type == 'add_user') {
$part = trim(t3lib_div::_GP('part'));
$user_name = trim(t3lib_div::_GP('username'));
$project_id = trim(t3lib_div::_GP('project_id'));
$right_id = trim(t3lib_div::_GP('right'));
$group_name = trim(t3lib_div::_GP('group'));
$email = trim(t3lib_div::_GP('email'));
$first_name = trim(t3lib_div::_GP('first_name'));
$last_name = trim(t3lib_div::_GP('last_name'));
$password = trim(t3lib_div::_GP('password'));
$cruser_id = trim(t3lib_div::_GP('creator'));
$clearpassword = trim(t3lib_div::_GP('clearpassword'));
$from_email = trim(t3lib_div::_GP('from_email'));
$pid = trim(t3lib_div::_GP('pid'));
$project_url = trim(t3lib_div::_GP('project_url'));
$send_an_email = filter_var(trim(t3lib_div::_GP('send_an_email')), FILTER_VALIDATE_BOOLEAN);
// if group not exists, create group
$group_id = tx_nG6_db::get_group_id($group_name);
if( !isset($group_id) ){
$cruser_id = trim(t3lib_div::_GP('creator'));
tx_nG6_db::create_new_group($cruser_id, $group_name);
$group_id = tx_nG6_db::get_group_id($group_name);
}
$user = tx_nG6_db::select_user_by_username($user_name);
// if user does not exists in DB
if(!isset($user)){
$create_user_email = trim(t3lib_div::_GP('create_user_email'));
$create_user_title = trim(t3lib_div::_GP('create_user_title'));
$res_code = tx_nG6_db::add_user($user_name, $first_name, $last_name, $email, $password, $cruser_id, $group_id, $pid);
if ($res_code == 0) {
// find the new user id
$user = tx_nG6_db::select_user_by_username($user_name);
// authorize new access
tx_nG6_db::add_access_to_project($user["uid"], $project_id, $right_id);
if ($send_an_email) {
// send an email to the new user
$message = str_replace("###USER_FIRST_NAME###", $first_name, $create_user_email);
$message = str_replace("###USER_LAST_NAME###", $last_name, $message);
$message = str_replace("###USER_LOGIN###", $user_name, $message);
$message = str_replace("###USER_PASSWORD###", $clearpassword, $message);
$message = str_replace("###PROJECT_LINK###", $project_url, $message);
$msg_table = explode('\n', $message);
$message = implode("\n", $msg_table);
mail($email, $create_user_title, $message, "From: <".$from_email.">");
}
print '2'; // ok
} else if ($res_code == 1) {
print '4'; // username exists
} else if ($res_code == 2) {
print '5'; // email exists
}
// user exists in DB
} else if ($user["username"] != $user_name || $user["email"] != $email || $user["first_name"] != $first_name || $user["last_name"] != $last_name) {
// there is difference between information provided and the user account
print '3';
} else {
// can user access to the project ?
if(tx_nG6_db::get_user_right_on_project($user["uid"], $project_id) == -1){
// authorize new access
tx_nG6_db::add_access_to_project($user["uid"], $project_id, $right_id);
// send an email to the user
if ($email != "" && $send_an_email) {
$add_user_email = trim(t3lib_div::_GP('add_user_email'));
$add_user_title = trim(t3lib_div::_GP('add_user_title'));
$project = tx_nG6_db::select_project($project_id);
$message = str_replace("###USER_FIRST_NAME###", $first_name, $add_user_email);
$message = str_replace("###USER_LAST_NAME###", $last_name, $message);
$message = str_replace("###PROJECT_NAME###", $project["name"], $message);
$message = str_replace("###PROJECT_DESCRIPTION###", $project["description"], $message);
$message = str_replace("###PROJECT_LINK###", $project_url, $message);
$msg_table = explode('\n', $message);
$message = implode("\n", $msg_table);
mail($email, $add_user_title, $message, "From: <".$from_email.">");
}
print '0';
} else {
print '1'; // already access to the project
}
}
} elseif($type == 'get_size_per_group'){
$usergroup = intVal(trim(t3lib_div::_GP('usergroup')));
$data_folder = trim(t3lib_div::_GP('data_folder'));
$get_analyzes = false;
if(trim(t3lib_div::_GP('get_analyzes')) == '1'){
$get_analyzes = true;
}
$get_cumulatives = false;
if(trim(t3lib_div::_GP('get_cumulatives')) == '1'){
$get_cumulatives = true;
}
$size_tab = tx_nG6_db::get_size($usergroup, $data_folder, $get_analyzes, $get_cumulatives, 0);
$encode_size_tab = json_encode($size_tab);
print $encode_size_tab;
} elseif($type == 'runs_table') {
$smarty = new Smarty();
$smarty->setTemplateDir(t3lib_extMgm::extPath('nG6').'/pi1');
$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');
$project_id = intVal(trim(t3lib_div::_GP('project_id')));
$user_id = intVal(trim(t3lib_div::_GP('user_id')));
$login_user = intVal(trim(t3lib_div::_GP('login_user')));
$page_id = intVal(trim(t3lib_div::_GP('page_id')));
$project_runs = tx_nG6_db::get_project_runs($project_id);
$is_project_admin = tx_nG6_db::is_administrator($user_id, 'project', $project_id);
$is_at_least_admin_of_1_run = false;
foreach($project_runs as $run_id => $run_values) {
$is_admin = tx_nG6_db::is_administrator($user_id, 'run', $run_values['id']);
$project_runs[$run_id]['is_admin'] = $is_admin;
if ($is_admin) { $is_at_least_admin_of_1_run = true; }
$href = ''.$run_values['name'].'';
$project_runs[$run_id]['href'] = $href;
}
$smarty->assign('runs', $project_runs);
$smarty->assign('is_project_admin', $is_project_admin);
$smarty->assign('is_at_least_admin_of_1_run', $is_at_least_admin_of_1_run);
$smarty->assign('login_user', $login_user);
print $smarty->fetch('run_table.tpl');
} elseif($type == 'projects_table') {
$smarty = new Smarty();
$smarty->setTemplateDir(t3lib_extMgm::extPath('nG6').'/pi1');
$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');
$user_id = trim(t3lib_div::_GP('user_id'));
$login_user = intVal(trim(t3lib_div::_GP('login_user')));
$page_id = intVal(trim(t3lib_div::_GP('page_id')));
$projects = tx_nG6_db::select_all_user_projects($user_id, 'tx_nG6_project.name');
$is_at_least_admin_of_1_project = false;
foreach($projects as $project_id => $project_values) {
$is_admin = tx_nG6_db::is_project_administrator($user_id, $project_values['id']);
if ($is_admin) { $is_at_least_admin_of_1_project = true; }
$projects[$project_id]['is_admin'] = $is_admin;
$projects[$project_id]['is_manager'] = tx_nG6_db::is_project_manager($user_id, $project_values['id']);
$projects[$project_id]['is_member'] = tx_nG6_db::is_project_member($user_id, $project_values['id']);
$href = ''.$project_values['name'].'';
$projects[$project_id]['href'] = $href;
}
$smarty->assign('projects', $projects);
$smarty->assign('is_at_least_admin_of_1_project', $is_at_least_admin_of_1_project);
$smarty->assign('login_user', $login_user);
print $smarty->fetch('project_table.tpl');
} elseif($type == 'analyses_table') {
$smarty = new Smarty();
$smarty->setTemplateDir(t3lib_extMgm::extPath('nG6').'/pi1');
$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');
$user_id = trim(t3lib_div::_GP('user_id'));
$login_user = intVal(trim(t3lib_div::_GP('login_user')));
$page_id = intVal(trim(t3lib_div::_GP('page_id')));
$project_id = intVal(trim(t3lib_div::_GP('project_id')));
$run_id = intVal(trim(t3lib_div::_GP('run_id')));
if ($run_id != "") {
$analysis = tx_nG6_db::get_run_analysis($run_id);
} else {
$analysis = tx_nG6_db::get_project_analysis($project_id);
}
// Add some information to the table
foreach($analysis as $analysis_id => $analysis_values) {
if (tx_nG6_db::is_administrator($user_id, 'analyze', $analysis_values['id'])) { $is_admin = true; }
$analysis[$analysis_id]['is_admin'] = tx_nG6_db::is_administrator($user_id, 'analyze', $analysis_values['id']);
if ($run_id != "") {
$href = ''.$analysis_values['name'].'';
} else {
$href = ''.$analysis_values['name'].'';
}
$analysis[$analysis_id]['href'] = $href;
}
$smarty->assign('display_analysis_result', $is_admin);
$smarty->assign('is_admin', $is_admin);
$smarty->assign('h_analysis', tx_nG6_utils::trace_hierarchy($analysis));
$smarty->assign('login_user', $login_user);
print $smarty->fetch('analysis_table.tpl');
} elseif($type == 'install') {
$res = tx_nG6_db::select_user_by_username("admin_install");
if ($res != null){
$res = tx_nG6_db::finalize_installation($res["uid"],
trim(t3lib_div::_GP('username')),
trim(t3lib_div::_GP('first_name')),
trim(t3lib_div::_GP('last_name')),
trim(t3lib_div::_GP('email')),
trim(t3lib_div::_GP('password')),
trim(t3lib_div::_GP('pid')),
trim(t3lib_div::_GP('project_name')),
trim(t3lib_div::_GP('description'))
);
}
print $res;
}
}
/**
* Creates an archiving script to archive data from ids
*
* @param string $user_id the user id
* @param array $ids list of ids to download
* @param string $data_folder the data folder where are stored the data
* @param string $tmp_folder the output directory
* @param string $format the archiving format (tar.gz)
* @param string $user_email the user email
* @param string $title_email the email title to send
* @param string $msg_email the email message to send
* @return array (the path to the script, the url path to the final archive)
*/
private function create_archive_script($user_id, $ids, $data_folder, $tmp_folder, $format, $user_email, $title_email, $msg_email) {
// First get the archive name where will be stored the data
$random_key = tx_nG6_utils::create_random_key(10);
$archive_path = $tmp_folder."/ng6_".$random_key;
while( file_exists($archive_path) )
$archive_path = $tmp_folder."/ng6_".$random_key;
// Then get the directories structure
$directories = $this->get_directories_structure_and_content($user_id, $ids, $data_folder, $archive_path);
$archive_script_path = $tmp_folder."/ng6_".$random_key.".sh";
// And write down the script in charge to create the archive
$fp = fopen($archive_script_path, 'w');
foreach($directories[0] as $index => $src_directory) {
if (!file_exists( $directories[1][$index])) {
fwrite($fp, "mkdir -p ".$directories[1][$index]."\n");
}
// For each files in the source directory
foreach(scandir($src_directory) as $file) {
if (is_file($src_directory."/".$file) and $file != "analyse.xml" and $file != "index.html" and $file != "run.cfg") {
fwrite($fp, "cp ".$src_directory."/".$file." ".$directories[1][$index]."\n");
}
}
}
fwrite($fp, "cd ".$tmp_folder."\n");
fwrite($fp, "tar -czf ng6_".$random_key.".tar.gz ng6_".$random_key."\n");
fwrite($fp, "rm -rf ".$archive_path."\n");
fwrite($fp, 'echo "'.str_replace(array('SPAN_ARCHIVE_NAME'), array("ng6_".$random_key.".tar.gz"), $msg_email).'" | mail -s "'.$title_email.'" '.$user_email."\n");
fclose($fp);
return array($archive_script_path, "ng6_".$random_key.".tar.gz");
}
/**
* Creates symbolic links between ids from data_folder into user_directory
*
* @param string $user_id the user id
* @param string $user_login the user login to make ssh
* @param string $user_pwd the user pwd to make ssh
* @param array $ids list of ids to download
* @param string $data_folder the data folder where are stored the data
* @param string $user_directory the output directory
* @return 0=>everything ok, 1=>user rigth problem, 2=>wrong authentification, 3=>connection error
*/
private function create_symbolic_links($user_id, $user_login, $user_pwd, $ids, $data_folder, $user_directory) {
// First try to connect the specified user using ssh
$connection = ssh2_connect('127.0.0.1', 22);
if (!$connection) return 3;
if (!ssh2_auth_password($connection, $user_login, $user_pwd)) return 2;
// Then get the directories structure
$directories = $this->get_directories_structure_and_content($user_id, $ids, $data_folder, $user_directory);
// And process the directories structure
$creation = true;
foreach($directories[0] as $index => $src_directory) {
if (!file_exists("ssh2.sftp://".$connection.$directories[1][$index])) {
if (!mkdir("ssh2.sftp://".$connection.$directories[1][$index], 0755, true)) {
$creation = false;
break;
}
// For each files in the source directory
foreach(scandir($src_directory) as $file) {
if (is_file($src_directory."/".$file) and $file != "analyse.xml" and $file != "index.html" and $file != "run.cfg") {
if (!ssh2_exec($connection, 'ln -s '.$src_directory.'/'.$file.' '.$directories[1][$index].'/'.$file)) {
$creation = false;
break;
}
}
}
}
}
if (!$creation) return 1;
return 0;
}
/**
* Returns a table with the right directories structure considering ids
*
* @param string $user_id The user id
* @param array $ids List of ids to download
* @param string $data_folder The data folder where are stored the data
* @param string $output_folder The output directory
* @return array [0] => source_directories, [1] => dest_directories
*/
private function get_directories_structure_and_content($user_id, $ids, $data_folder, $output_folder) {
$src_directories = array();
$dest_directories = array();
$vals = preg_split("/;/", $ids);
// Characters to be replaced in the names of the run, the analyses ...
$char_to_replace = array(' ','/');
// For each project/run/analysis
foreach($vals as $val) {
if ($val != "undefined" && $val != "") {
$id = preg_split("/_/", $val);
if ($id[0] == "data") {
$run = tx_nG6_db::select_run($id[1]);
if (!in_array($data_folder.$run["directory"], $src_directories)) {
$src_directories[] = $data_folder.$run["directory"];
$ddest = $output_folder."/Project_".str_replace($char_to_replace, '_', $run["project_name"]);
$ddest .= '.'.$run["project_id"]."/Run_".str_replace($char_to_replace, '_', $run["name"]).".".$id[1]."/RawData";
$dest_directories[] = $ddest;
}
} else if ($id[0] == "run") {
$run = tx_nG6_db::select_run($id[1]);
if (!in_array($data_folder.$run["directory"], $src_directories)) {
$src_directories[] = $data_folder.$run["directory"];
$ddest = $output_folder."/Project_".str_replace($char_to_replace, '_', $run["project_name"]);
$ddest .= '.'.$run["project_id"]."/Run_".str_replace($char_to_replace, '_', $run["name"]).".".$id[1]."/RawData";
$dest_directories[] = $ddest;
}
foreach(tx_nG6_db::get_user_run_analysis($user_id, $id[1], 'tx_nG6_analyze.name') as $analyse_id => $analyse_values) {
$aid = preg_split("/_/", $analyse_id);
if (!in_array($data_folder.$analyse_values["directory"], $src_directories)) {
$src_directories[] = $data_folder.$analyse_values["directory"];
$ddest = $output_folder."/Project_".str_replace($char_to_replace, '_', $run["project_name"]);
$ddest .= '.'.$run["project_id"]."/Run_".str_replace($char_to_replace, '_', $run["name"]);
$ddest .= ".".$id[1]."/Analyse_".str_replace($char_to_replace, '_', $analyse_values["name"]).".".$aid[1];
$dest_directories[] = $ddest;
}
}
} else if ($id[0] == "analyse") {
$analyse = tx_nG6_db::select_analyse($id[1]);
if (!in_array($data_folder.$analyse["directory"], $src_directories)) {
$src_directories[] = $data_folder.$analyse["directory"];
// If it's a project analyse
if ($analyse["run_id"] == 'None') {
$ddest = $output_folder."/Project_".str_replace($char_to_replace, '_', $analyse["project_name"]);
$ddest .= ".".$analyse["project_id"]."/Project_analyses/".str_replace($char_to_replace, '_', $analyse["name"]).".".$id[1];
$dest_directories[] = $ddest;
} else {
$ddest = $output_folder."/Project_".str_replace($char_to_replace, '_', $analyse["project_name"]);
$ddest .= ".".$analyse["project_id"]."/Run_".str_replace($char_to_replace, '_', $analyse["run_name"]);
$ddest .= ".".$analyse["run_id"]."/Analyse_".str_replace($char_to_replace, '_', $analyse["name"]).".".$id[1];
$dest_directories[] = $ddest;
}
}
}
}
}
return array($src_directories, $dest_directories);
}
}
if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/nG6/class.tx_nG6_eid.php']) {
include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/nG6/class.tx_nG6_eid.php']);
}
// Instanciation
$SOBE = t3lib_div::makeInstance('tx_nG6_eid');
$SOBE->main();
?>