* 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').'/pi6/class.tx_nG6_pi6.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 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'));
$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, true);
} else if ($view == "project") {
$full_size += tx_nG6_db::get_project_size($value, true);
}
}
print tx_nG6_utils::get_octet_string_representation($full_size);
// data size
}else if ($type == 'get_data_size'){
$run_ids = trim(t3lib_div::_GP('run_ids'));
$data_ids = trim(t3lib_div::_GP('data_ids'));
$analysis_ids = trim(t3lib_div::_GP('analysis_ids'));
$full_size = 0;
if ($run_ids){
$data = explode(',', $run_ids);
foreach($data as $id => $value) {
$full_size += tx_nG6_db::get_run_size($value, true);
}
}
if ($data_ids){
$data = explode(',', $data_ids);
foreach($data as $id => $value) {
$full_size += tx_nG6_db::get_run_size($value, false);
}
}
if ($analysis_ids){
$data = explode(',', $analysis_ids);
foreach($data as $id => $value) {
$full_size += tx_nG6_db::get_analysis_size($value);
}
}
print $full_size . ":::" . 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;
}
// add comment
else if ($type == 'add_comment') {
$view = trim(t3lib_div::_GP('view'));
$view_id = trim(t3lib_div::_GP('view_id')); // project_id or run_id or analyze_id
$new_comment = trim(t3lib_div::_GP('new_comment'));
$cruser_id = trim(t3lib_div::_GP('cruser_id'));
$res = 0 ;
if ($new_comment){
if($view == 'project'){
$res = tx_nG6_db::add_project_comment($view_id, $cruser_id, $new_comment) ;
}
elseif ($view == 'run') {
$res = tx_nG6_db::add_run_comment($view_id, $cruser_id, $new_comment) ;
}
elseif ($view == 'analyze') {
$res = tx_nG6_db::add_analyze_comment($view_id, $cruser_id, $new_comment) ;
}
}
print $res;
}
//delete comment
else if ($type == 'delete_comment') {
$view = trim(t3lib_div::_GP('view'));
$view_id = trim(t3lib_div::_GP('view_id')); // project_id or run_id or analyze_id
$comment_id = trim(t3lib_div::_GP('comment_id'));
$res = 0 ;
if($view == 'project'){
$res = tx_nG6_db::delete_project_comment($view_id, $comment_id);
}
elseif ($view == 'run') {
$res = tx_nG6_db::delete_run_comment($view_id, $comment_id);
}
elseif ($view == 'analyze') {
$res = tx_nG6_db::delete_analyze_comment($view_id, $comment_id);
}
print $res;
}
//update comment
else if ($type == 'update_comment') {
$comment_id = trim(t3lib_div::_GP('comment_id'));
$new_comment = trim(t3lib_div::_GP('new_comment'));
$res = 0;
$new_comment = urldecode($new_comment);
$res = tx_nG6_db::update_comment($comment_id, $new_comment);
print $res;
// 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'));
$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'));
$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, tx_nG6_utils::hash_password($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###", $password, $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
}
}
}
else if ( $type == 'add_to_ng6_admin'){
$userid = trim(t3lib_div::_GP('userid'));
tx_nG6_db::add_to_ng6_admin($userid);
}
else if ( $type == 'delete_from_ng6_admin'){
$userids = trim(t3lib_div::_GP('userids'));
$userids = explode(',', $userids);
tx_nG6_db::remove_from_ng6_admin($userids);
}
else if($type == 'update_user'){
$email = trim(t3lib_div::_GP('email'));
$first_name = trim(t3lib_div::_GP('first_name'));
$last_name = trim(t3lib_div::_GP('last_name'));
$group_name = trim(t3lib_div::_GP('title'));
$location = trim(t3lib_div::_GP('location'));
$organism = trim(t3lib_div::_GP('organism'));
$user_id = trim(t3lib_div::_GP('id'));
$password = trim(t3lib_div::_GP('password'));
$cruser_id = trim(t3lib_div::_GP('creator'));
$send_an_email = filter_var(trim(t3lib_div::_GP('send_an_email')), FILTER_VALIDATE_BOOLEAN);
$from_email = trim(t3lib_div::_GP('from_email'));
$updated = tx_nG6_db::update_user($user_id, $first_name, $last_name, $email, $group_name, $organism, $location, tx_nG6_utils::hash_password($password)) ;
$nb_updated = count($updated);
if ( $nb_updated > 0 && $send_an_email){
$user_infos = tx_nG6_db::get_user_informations($user_id);
$email = $user_infos['email'];
$first_name = $user_infos['first_name'];
$last_name = $user_infos['last_name'];
$mail_title = "[NG6]Your user informations have been updated.";
$mail_content = "Dear " . $first_name . " " . $last_name . ",\n\nSome of your personnal informations have been updated : \n\n";
if ($email != ''){
foreach($updated as $key => $value){
if($key == 'password'){
$mail_content .= 'password' . "\t: " . $password . "\n" ;
}
elseif ($key == 'usergroup'){
$mail_content .= 'title' . "\t: " . $group_name . "\n" ;
$mail_content .= 'location' . "\t: " . $location . "\n" ;
$mail_content .= 'organism' . "\t: " . $organism . "\n" ;
}
else {
$mail_content .= ucwords(str_replace("_", " ", $key)) . "\t: " . $value . "\n" ;
}
}
$mail_content .= "\nThe NG6 team";
mail($email, $mail_title, $mail_content, "From: <".$from_email.">");
}
}
print $nb_updated;
}
else if ($type == 'get_user_group'){
$id = trim(t3lib_div::_GP('id'));
print json_encode(tx_nG6_db::get_group_informations(tx_nG6_db::get_user_usergroup($id)));
}
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');
$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);
$smarty->assign('is_ng6_admin', tx_nG6_db::is_ng6_administrator($user_id) ? true : false);
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');
$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')),
tx_nG6_utils::hash_password(trim(t3lib_div::_GP('password'))),
trim(t3lib_div::_GP('pid')),
"Demo project",
"This project presents demonstration workflows",
trim(t3lib_div::_GP('title')),
trim(t3lib_div::_GP('organism')),
trim(t3lib_div::_GP('location'))
);
// 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));
} elseif($type == 'project_evolution') {
$values = split(",", trim(t3lib_div::_GP('values')));
$by = trim(t3lib_div::_GP('by'));
$role = trim(t3lib_div::_GP('role'));
$cumulate = false;
if(trim(t3lib_div::_GP('cumulate')) == '1'){
$cumulate = true;
}
print json_encode(tx_nG6_db::select_projects_evolution($values, $by, $role, $cumulate));
} elseif($type == 'data_distribution'){
$values = split(",", trim(t3lib_div::_GP('values')));
$by = trim(t3lib_div::_GP('by'));
$role = trim(t3lib_div::_GP('role'));
$get_analyzes = false;
if(trim(t3lib_div::_GP('get_analyzes')) == '1'){
$get_analyzes = true;
}
$octet = true;
if(trim(t3lib_div::_GP('bases')) == '1'){
$octet = false;
}
print json_encode(tx_nG6_db::select_storage_distribution($values, $by, $role, $get_analyzes, $octet));
} elseif($type == 'data_evolution'){
$values = split(",", trim(t3lib_div::_GP('values')));
$by = trim(t3lib_div::_GP('by'));
$role = trim(t3lib_div::_GP('role'));
$get_analyzes = false;
if(trim(t3lib_div::_GP('get_analyzes')) == '1'){
$get_analyzes = true;
}
$octet = true;
if(trim(t3lib_div::_GP('bases')) == '1'){
$octet = false;
}
$cumulate = false;
if(trim(t3lib_div::_GP('cumulate')) == '1'){
$cumulate = true;
}
print json_encode(tx_nG6_db::select_storage_evolution($values, $by, $role, $get_analyzes, $octet, $cumulate));
} elseif ($type == 'purge_managment_mail') {
$all_projects = trim(t3lib_div::_GP('project'));
print json_encode(tx_nG6_pi6::send_purge_demand_mail($all_projects));
} elseif ($type == 'purge_managment_resend_mail') {
$purge_ids = trim(t3lib_div::_GP('purge_demand'));
print json_encode(tx_nG6_pi6::resend_purge_demand_mail($purge_ids));
} elseif ($type == 'refresh_purge_demand') {
$purge_delay = trim(t3lib_div::_GP('purge_delay'));
print json_encode(tx_nG6_db::get_purge_demand_list($purge_delay));
} elseif ($type == 'refresh_purge_list') {
$max_retention_date = trim(t3lib_div::_GP('max_retention_date'));
$filter_size = trim(t3lib_div::_GP('filter_size'));
$without_laboratories_id = trim(t3lib_div::_GP('without_lab'));
$with_laboratories_id = trim(t3lib_div::_GP('with_lab'));
$create_users = trim(t3lib_div::_GP('create_users'));
//Change date format
print json_encode(tx_nG6_db::filter_list_retention_data_info($filter_size,$max_retention_date,$create_users, $without_laboratories_id,$with_laboratories_id));
} elseif ($type == 'delete_purge_data') {
//Delete data link to the list of purge demand
$purge_ids = trim(t3lib_div::_GP('purge_demand'));
$data_folder = trim(t3lib_div::_GP('data_folder'));
$user_login = trim(t3lib_div::_GP('user_login'));
$user_pwd = trim(t3lib_div::_GP('user_pwd'));
// check login and password
$res = 0;
if (isset($user_login) && isset($user_pwd) && $user_login != 'undefined' && $user_pwd != 'undefined') {
$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) {
$res = tx_nG6_db::delete_purge_demand($purge_ids,$user_login, $user_pwd, $data_folder);
}
print $res;
} elseif ($type == 'extend_retention_date_from_demand') {
//Extend the retention date for the
$purge_ids = trim(t3lib_div::_GP('purge_demand'));
$value = trim(t3lib_div::_GP('date_value'));
$type_extend = trim(t3lib_div::_GP('type_extend')); //all project or only run/analyse obsolete
//Change date format
$date = explode('/', $value);
$timestamp = mktime (0, 0, 1, $date[1], $date[0], $date[2]);
print json_encode(tx_nG6_db::extend_retention_date_from_demand(explode(',',$purge_ids),$timestamp,$type_extend));
} elseif ($type == 'extend_retention_date_from_project') {
//Extend the retention date for the
$projects_id_str = trim(t3lib_div::_GP('projects_id'));
$value = trim(t3lib_div::_GP('date_value'));
//Change date format
$date = explode('/', $value);
$timestamp = mktime (0, 0, 1, $date[1], $date[0], $date[2]);
//TODO project
print json_encode(tx_nG6_db::extend_retention_date_from_project($projects_id_str,$timestamp, TRUE));
} elseif ($type == 'get_all_project') {
print json_encode(tx_nG6_db::select_all_projects());
}
}
}
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();
?>