* 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 .= 'This browser does not support HTML5
    '; $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')); $name_start = trim(t3lib_div::_GP('name_start')); // user search if($col != 'title' && $col != 'location' && $col != 'organism'){ $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{ if ($col == "location" || $col == "organism") { $col = "tx_nG6_".$col; } $res = tx_nG6_db::get_all_starts_with_in_group($name_start, $col); } $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('title')); $location = trim(t3lib_div::_GP('location')); $organism = trim(t3lib_div::_GP('organism')); $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, $organism, $location); $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){ $res2 = 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')) ); // if there is a result, then log the user if ($res2) { $GLOBALS['TSFE'] = t3lib_div::makeInstance('tslib_fe', $GLOBALS['TYPO3_CONF_VARS'], t3lib_div::_GP('id'), ''); $GLOBALS['TSFE']->initFEuser(); $GLOBALS['TSFE']->fe_user->createUserSession(array('uid' =>$res["uid"])); } } print $res; } elseif($type == 'project_data_repartition') { $role = trim(t3lib_div::_GP('role')); $by = trim(t3lib_div::_GP('by')); print json_encode(tx_nG6_db::select_projects_repartition($role, $by)); } elseif($type == 'project_distribution') { $values = split(",", trim(t3lib_div::_GP('values'))); $by = trim(t3lib_div::_GP('by')); $role = trim(t3lib_div::_GP('role')); print json_encode(tx_nG6_db::select_projects_distribution($values, $by, $role)); } } /** * 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(); ?>