* 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(t3lib_extMgm::extPath('nG6').'/lib/class.tx_nG6_utils.php'); /** * Class_nG6_db' for the 'nG6' extension. * This class is in charge of all communication with the database * * @author PF bioinformatique de Toulouse <> */ class tx_nG6_db { /* * Global functions *------------------------------------------------------------*/ /** * Update the specified field of the table * * @param string $table the entity to change * @param string $id the element id to update * @param string $field the field to change * @param string $value the new value */ function update_field($table, $id, $field, $value) { if( $field == 'uid' ) { throw new Exception ("The function 'update_field' cannot change an id.") ; } $GLOBALS['TYPO3_DB']-> exec_UPDATEquery ($table, 'uid='.$id, array($field => $value)); } /** * Return the size used by ng6 datas from a starting date to a end date * * @param int $usergroup the usergroup * @param string $data_folder the folder data * @param bool $get_analyzes true if the admin wants to include analyzes * @param bool $cumul_values true if the admin wants cumulatives values * @param int $step the step (0 = one month, 1 = six months, 2 = one year) * @param int $date_start the date start * @param int $date_end the date end * @return array */ function get_size($usergroup, $data_folder, $get_analyzes=false, $cumul_values=false, $step=2, $date_start=0, $date_end=0){ //const - tstamp is in seconds, nb of seconds in one day $one_day_val = 24 * 3600; // init min max if($date_start==0){ $date_start = intval(tx_nG6_db::get_run_min_date()); } if($date_end==0){ $date_end = intval(tx_nG6_db::get_run_max_date()); } $date_cursors = $date_start; $res_tab = null; // get all users if ($usergroup != "0") { $users_in_group = tx_nG6_db::get_all_users_in_group($usergroup); $project_list_final = array(); foreach($users_in_group as $list_current_user_id){ // get all user projects $all_user_projects = tx_nG6_db::select_all_user_projects($list_current_user_id); foreach($all_user_projects as $p_val){ if(!in_array($p_val['id'], $project_list_final)){ $project_list_final[] = $p_val['id']; } } } } $cumulated_size = 0; while($date_cursors < $date_end){ // increment step iterator $total_day_count_tstamp = 0; switch ($step) { case 0: // 1 month $nb_days_in_month = date('t', $date_cursors); $total_day_count_tstamp = $one_day_val * $nb_days_in_month; break; case 1: // 6 months $date_cursor_tmp = $date_cursors; for($i = 0;$i < 6; $i++){ $nb_days_in_month = cal_days_in_month(CAL_GREGORIAN, date('n', $date_cursor_tmp), date('Y', $date_cursor_tmp)); $total_day_count_tstamp += $one_day_val * $nb_days_in_month; // +1 month * 6 $date_cursor_tmp = strtotime('+1 month', $date_cursor_tmp); } break; case 2: // 1 year $nb_days_in_year = date("z", mktime(0,0,0,12,31,date('Y', $date_cursors))); $total_day_count_tstamp = $one_day_val * $nb_days_in_year; break; } $date_cursore = $date_cursors + $total_day_count_tstamp; $current_size = 0; if ($usergroup != "0") { $where = 'tx_nG6_project.uid IN ('.implode(",",$project_list_final).') AND tx_nG6_run.date BETWEEN '.$date_cursors.' AND '.$date_cursore; } else { $where = 'tx_nG6_run.date BETWEEN '.$date_cursors.' AND '.$date_cursore; } // get all runs the usergroup can access to $queryParts = array( 'SELECT' => 'tx_nG6_run.uid as run_id', 'FROM' => 'tx_nG6_project ' .' INNER JOIN tx_nG6_project_run ON tx_nG6_project.uid=tx_nG6_project_run.project_id ' .' INNER JOIN tx_nG6_run ON tx_nG6_project_run.run_id=tx_nG6_run.uid ', 'WHERE' => $where, 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '' ); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); while($res_row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $current_size += tx_nG6_db::get_run_size($res_row['run_id'], $get_analyzes); } // get all project analysis the usergroup can access to if ($get_analyzes) { if ($usergroup != "0") { $where = 'tx_nG6_project.uid IN ('.implode(",",$project_list_final).') AND tx_nG6_analyze.date BETWEEN '.$date_cursors.' AND '.$date_cursore; } else { $where = 'tx_nG6_analyze.date BETWEEN '.$date_cursors.' AND '.$date_cursore; } $queryParts = array( 'SELECT' => 'tx_nG6_analyze.uid as analyze_id', 'FROM' => 'tx_nG6_project ' .' INNER JOIN tx_nG6_project_analyze ON tx_nG6_project.uid=tx_nG6_project_analyze.project_id ' .' INNER JOIN tx_nG6_analyze ON tx_nG6_project_analyze.analyze_id=tx_nG6_analyze.uid ', 'WHERE' => $where, 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '' ); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); while($res_row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $current_size += tx_nG6_db::get_analysis_size($res_row['analyze_id']); } } $cumulated_size += $current_size; if(!$cumul_values){ $res_tab[] = array($date_cursore*1000, $current_size); }else{ $res_tab[] = array($date_cursore*1000, $cumulated_size); } $date_cursors = $date_cursore + 1; } return $res_tab; } /** * Select all project for the current user * * @param string $by by can group, organism, location * @param string $role role can be create_user, manager * @return table with all projects */ function select_projects_repartition($role, $by='title') { if ($role == "create_user") { $queryParts = array( 'SELECT' => 'tx_nG6_project.uid as pid, fe_groups.title as title, fe_groups.tx_nG6_organism as organism, fe_groups.tx_nG6_location as location', 'FROM' => 'tx_nG6_project ' .' INNER JOIN fe_users ON tx_nG6_project.cruser_id=fe_users.uid ' .' INNER JOIN fe_groups ON fe_groups.uid=fe_users.usergroup ', 'WHERE' => "", 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '' ); //$where = "tx_nG6_project.cruser_id=" } else if ($role == "manager") { $queryParts = array( 'SELECT' => 'tx_nG6_project.uid as pid, fe_groups.title as title, fe_groups.tx_nG6_organism as organism, fe_groups.tx_nG6_location as location', 'FROM' => 'tx_nG6_project ' .' INNER JOIN fe_rights ON tx_nG6_project.uid=fe_rights.project_id ' .' INNER JOIN fe_users ON fe_rights.fe_user_id=fe_users.uid ' .' INNER JOIN fe_groups ON fe_groups.uid=fe_users.usergroup ', 'WHERE' => "fe_rights.right_id=1", 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '' ); } $by_title = array() ; $by_organism = array(); $by_location = array(); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); while($res_row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { if (!isset ($by_title[$res_row['title']])) { $by_title[$res_row['title']] = array( 'count' => 1, 'organism' => $res_row['organism'], 'location' => $res_row['location']); } else { $by_title[$res_row['title']]['count'] += 1; } if (!isset ($by_organism[$res_row['organism']])) { $by_organism[$res_row['organism']] = array( 'count' => 1); } else { $by_organism[$res_row['organism']]['count'] += 1; } if (!isset ($by_location[$res_row['location']])) { $by_location[$res_row['location']] = array( 'count' => 1); } else { $by_location[$res_row['location']]['count'] += 1; } } if ($by=='title') { return ($by_title); } else if ($by=='organism') { return ($by_organism); } else if ($by=='location') { return ($by_location); } } function select_projects_evolution($values, $by, $role) { if ($by == "organism" || $by == "location") { $by = "tx_nG6_".$by; } $from = "" ; $where = "fe_groups.".$by." IN ('".implode("', '", $values)."')" ; if ($role == "create_user") { $from = 'tx_nG6_project ' .' INNER JOIN fe_users ON tx_nG6_project.cruser_id=fe_users.uid ' .' INNER JOIN fe_groups ON fe_groups.uid=fe_users.usergroup ' ; } else if ($role == "manager") { $from = 'tx_nG6_project ' .' INNER JOIN fe_rights ON tx_nG6_project.uid=fe_rights.project_id ' .' INNER JOIN fe_users ON fe_rights.fe_user_id=fe_users.uid ' .' INNER JOIN fe_groups ON fe_groups.uid=fe_users.usergroup '; $where .= " AND fe_rights.right_id=1" ; } $queryParts = array( 'SELECT' => 'tx_nG6_project.crdate, count(tx_nG6_project.crdate) nb', 'FROM' => $from, 'WHERE' => $where, 'GROUPBY' => 'tx_nG6_project.crdate', 'ORDERBY' => 'tx_nG6_project.crdate', 'LIMIT' => '' ); $results = array(); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); while($res_row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $results[] = array($res_row["crdate"], $res_row["nb"]); } return $results; } function select_projects_distribution($values, $by, $role) { $from = "" ; $where = "" ; if ($by == "organism" || $by == "location") { $by = "tx_nG6_".$by; } if ($role == "create_user") { $from = 'tx_nG6_project ' .' INNER JOIN fe_users ON tx_nG6_project.cruser_id=fe_users.uid ' .' INNER JOIN fe_groups ON fe_groups.uid=fe_users.usergroup ' ; } else if ($role == "manager") { $from = 'tx_nG6_project ' .' INNER JOIN fe_rights ON tx_nG6_project.uid=fe_rights.project_id ' .' INNER JOIN fe_users ON fe_rights.fe_user_id=fe_users.uid ' .' INNER JOIN fe_groups ON fe_groups.uid=fe_users.usergroup '; $where = "fe_rights.right_id=1" ; } $queryParts = array( 'SELECT' => 'fe_groups.'.$by.', count(fe_groups.'.$by.') nb', 'FROM' => $from, 'WHERE' => $where, 'GROUPBY' => 'fe_groups.'.$by, 'ORDERBY' => '', 'LIMIT' => '' ); $results = array(); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); $others = 0 ; while($res_row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { if( in_array($res_row[$by], $values) ) { $results[] = array($res_row[$by], $res_row["nb"]); } else { $others += $res_row["nb"] ; } } if ($others != 0) { $results[] = array("OTHERS", $others); } return $results; } /* * Project functions *------------------------------------------------------------*/ /** * Select all project for the current user * * @param string $user_id the user id * @return table with all projects */ function select_all_user_projects($user_id, $orderby='', $limit='') { $projects = array(); // If the user is not logged on display demonstration project if ($user_id == null) { $where = 'tx_nG6_project.public=0'; } else { $where = 'fe_rights.fe_user_id='.$user_id; } //First, get the analyzis project-scale $queryParts = array( 'SELECT' => 'tx_nG6_project.uid AS project_id, '. 'tx_nG6_project.name AS project_name, '. 'tx_nG6_project.description AS project_description, '. 'tx_nG6_project.public AS project_public, '. 'tx_nG6_project.crdate AS project_crdate, '. 'tx_nG6_project.hidden AS project_hidden ', 'FROM' => 'tx_nG6_project INNER JOIN fe_rights ON fe_rights.project_id=tx_nG6_project.uid', 'WHERE' => $where, 'GROUPBY' => '', 'ORDERBY' => $orderby, 'LIMIT' => $limit ); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $project_id = $row['project_id']; if (!isset ($projects['project_'.$project_id])) { $projects['project_'.$project_id] = array( 'id' => $project_id, 'name' => $row['project_name'], 'hidden' => $row['project_hidden'], 'date' => $row['project_crdate'], 'public' => $row['project_public'], 'description' => $row['project_description']); } } return $projects; } /** * Select all project for the current user * * @param string $user_id the user id * @return table with all projects */ function get_user_projects($user_id, $orderby='', $limit='') { $projects = array(); // If the user is not logged on display demonstration project if ($user_id == null) { $where = 'tx_nG6_project.public=0'; } else { $where = 'fe_rights.fe_user_id='.$user_id.' AND ((fe_rights.right_id<>2 AND tx_nG6_project.hidden=0) ' .'OR fe_rights.right_id=2)' ; } //First, get the analyzis project-scale $queryParts = array( 'SELECT' => 'tx_nG6_project.uid AS project_id, '. 'tx_nG6_project.name AS project_name, '. 'tx_nG6_project.description AS project_description, '. 'tx_nG6_project.public AS project_public, '. 'tx_nG6_project.crdate AS project_crdate, '. 'tx_nG6_project.hidden AS project_hidden ', 'FROM' => 'tx_nG6_project INNER JOIN fe_rights ON fe_rights.project_id=tx_nG6_project.uid', 'WHERE' => $where, 'GROUPBY' => '', 'ORDERBY' => $orderby, 'LIMIT' => $limit ); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $project_id = $row['project_id']; if (!isset ($projects['project_'.$project_id])) { $projects['project_'.$project_id] = array( 'id' => $project_id, 'name' => $row['project_name'], 'hidden' => $row['project_hidden'], 'date' => $row['project_crdate'], 'public' => $row['project_public'], 'description' => $row['project_description']); } } return $projects; } /** * Select a run from the database * * @param string $project_id the project id to return * @return hash table with all project information */ function select_project($project_id) { $queryParts = array( 'SELECT' => '*', 'FROM' => 'tx_nG6_project', 'WHERE' => 'tx_nG6_project.uid = '.$project_id, 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '' ); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); $vals = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res); return array('id' => $vals['uid'], 'name' => $vals['name'], 'hidden' => $vals['hidden'], 'date' => $vals['crdate'], 'public' => $vals['public'], 'description' => $vals['description']); } /** * Select all runs linked to the specified project * * @param string $project_id the project id * @return hash table with all runs information */ function get_project_runs($project_id, $orderby='', $limit='') { // First select all runs from the database $queryParts = Array( 'SELECT' => 'tx_nG6_run.uid AS run_id,'. 'tx_nG6_run.directory AS run_directory,'. 'tx_nG6_run.species AS run_species,'. 'tx_nG6_run.description AS run_description, '. 'tx_nG6_run.data_nature AS run_data_nature, '. 'tx_nG6_run.sequencer AS run_sequencer, '. 'tx_nG6_run.type AS run_type, '. 'tx_nG6_run.name AS run_name, '. 'tx_nG6_run.nb_sequences AS run_nb_sequences, '. 'tx_nG6_run.full_seq_size AS run_full_seq_size, '. 'tx_nG6_run.date AS run_date, '. 'tx_nG6_run.hidden AS run_hidden, '. 'tx_nG6_project.uid AS project_id, '. 'tx_nG6_project.name AS project_name ', 'FROM' => 'tx_nG6_project '. 'INNER JOIN tx_nG6_project_run ON tx_nG6_project.uid=tx_nG6_project_run.project_id '. 'INNER JOIN tx_nG6_run ON tx_nG6_project_run.run_id=tx_nG6_run.uid ', 'WHERE' => 'tx_nG6_project.uid='.$project_id, 'GROUPBY' => '', 'ORDERBY' => $orderby, 'LIMIT' => $limit ); // Then create the result hash table $results = array(); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $run_id = $row['run_id']; if (!isset($results['run_'.$run_id])) { $results['run_'.$run_id] = array( 'id' => $run_id, 'directory' => $row['run_directory'], 'name' => $row['run_name'], 'project_name' => $row['project_name'], 'hidden' => $row['run_hidden'], 'species' => $row['run_species'], 'nb_sequences' => $row['run_nb_sequences'], 'full_seq_size' => $row['run_full_seq_size'], 'project_id' => $row['project_id'], 'date' => $row['run_date'], 'data_nature' => $row['run_data_nature'], 'sequencer' => $row['run_sequencer'], 'type' => $row['run_type'], 'description' => $row['run_description'] ); } } return $results; } /** * Select all runs linked to the specified project for the user * * @param string $user_id the user id * @param string $project_id the project id * @return hash table with all runs information */ function get_user_project_runs($user_id, $project_id, $orderby='', $limit='') { // If the user is not logged on display demonstration project if ($user_id == null) { $where = 'tx_nG6_project.uid='.$project_id.' AND tx_nG6_project.public=0 AND tx_nG6_run.hidden=0'; } else { $where = 'fe_users.uid='.$user_id.' AND '.'tx_nG6_project.uid='.$project_id. ' AND ((fe_rights.right_id<>2 AND tx_nG6_run.hidden=0) OR fe_rights.right_id=2)' ; } // First select all runs from the database $queryParts = Array( 'SELECT' => 'tx_nG6_run.uid AS run_id,'. 'tx_nG6_run.directory AS run_directory,'. 'tx_nG6_run.species AS run_species,'. 'tx_nG6_run.description AS run_description, '. 'tx_nG6_run.data_nature AS run_data_nature, '. 'tx_nG6_run.sequencer AS run_sequencer, '. 'tx_nG6_run.type AS run_type, '. 'tx_nG6_run.name AS run_name, '. 'tx_nG6_run.nb_sequences AS run_nb_sequences, '. 'tx_nG6_run.full_seq_size AS run_full_seq_size, '. 'tx_nG6_run.date AS run_date, '. 'tx_nG6_run.hidden AS run_hidden, '. 'tx_nG6_project.uid AS project_id, '. 'tx_nG6_project.name AS project_name ', 'FROM' => 'tx_nG6_run '. 'INNER JOIN tx_nG6_project_run ON tx_nG6_run.uid=tx_nG6_project_run.run_id '. 'INNER JOIN tx_nG6_project ON tx_nG6_project_run.project_id=tx_nG6_project.uid '. 'INNER JOIN fe_rights ON tx_nG6_project.uid=fe_rights.project_id '. 'INNER JOIN fe_users ON fe_rights.fe_user_id=fe_users.uid ', 'WHERE' => $where, 'GROUPBY' => '', 'ORDERBY' => $orderby, 'LIMIT' => $limit ); // Then create the result hash table $results = array(); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $run_id = $row['run_id']; if (!isset($results['run_'.$run_id])) { $results['run_'.$run_id] = array( 'id' => $run_id, 'directory' => $row['run_directory'], 'name' => $row['run_name'], 'project_name' => $row['project_name'], 'hidden' => $row['run_hidden'], 'species' => $row['run_species'], 'nb_sequences' => $row['run_nb_sequences'], 'full_seq_size' => $row['run_full_seq_size'], 'project_id' => $row['project_id'], 'date' => $row['run_date'], 'data_nature' => $row['run_data_nature'], 'sequencer' => $row['run_sequencer'], 'type' => $row['run_type'], 'description' => $row['run_description'] ); } } return $results; } /** * Select all analysis linked to the specified project * * @param string $project_id the project id * @return hash table with all analysis information */ function get_project_analysis($project_id, $orderby='', $limit='') { // First select all analysis from the database $queryParts = array( 'SELECT' => 'tx_nG6_analyze.uid AS analyze_id,'. 'tx_nG6_analyze.directory AS analyze_directory,'. 'tx_nG6_analyze.name AS analyze_name, '. 'tx_nG6_analyze.class AS analyze_class, '. 'tx_nG6_analyze.date AS analyze_date, '. 'tx_nG6_analyze.software AS analyze_software, '. 'tx_nG6_analyze.version AS analyze_version, '. 'tx_nG6_analyze.params AS analyze_params, '. 'tx_nG6_analyze.description AS analyze_description, '. 'tx_nG6_analyze.is_editable AS analyze_is_editable, '. 'tx_nG6_analyze.parent_uid AS analyze_parent_uid, '. 'tx_nG6_analyze.hidden AS analyze_hidden ', 'FROM' => 'tx_nG6_project '. 'INNER JOIN tx_nG6_project_analyze ON tx_nG6_project.uid = tx_nG6_project_analyze.project_id '. 'INNER JOIN tx_nG6_analyze ON tx_nG6_analyze.uid=tx_nG6_project_analyze.analyze_id ', 'WHERE' => 'tx_nG6_project.uid='.$project_id, 'GROUPBY' => '', 'ORDERBY' => $orderby, 'LIMIT' => $limit ); // Then create the result hash table $results = array(); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $analyze_id = $row['analyze_id']; if (!isset ($results['analyse_'.$analyze_id])) { $results['analyse_'.$analyze_id] = array( 'directory' => $row['analyze_directory'], 'name' => $row['analyze_name'], 'class' => $row['analyze_class'], 'id' => $row['analyze_id'], 'hidden' => $row['analyze_hidden'], 'params' => $row['analyze_params'], 'software' => $row['analyze_software'], 'version' => $row['analyze_version'], 'date' => $row['analyze_date'], 'description' => $row['analyze_description'], 'is_editable' => $row['analyze_is_editable'], 'parent_id' => $row['analyze_parent_uid'] ); } } return $results; } /** * Select all analysis linked to the specified project for the user * * @param string $user_id the user id * @param string $project_id the project id * @return hash table with all analysis information */ function get_user_project_analysis($user_id, $project_id, $orderby='', $limit='') { // If the user is not logged on display demonstration project if ($user_id == null) { $where = 'tx_nG6_project.uid='.$project_id.' AND tx_nG6_project.public=0 AND tx_nG6_run.hidden=0'; } else { $where = 'fe_users.uid='.$user_id.' AND tx_nG6_project.uid='.$project_id. ' AND ((fe_rights.right_id<>2 AND tx_nG6_analyze.hidden=0) OR fe_rights.right_id=2)' ; } // First select all analysis from the database $queryParts = array( 'SELECT' => 'tx_nG6_analyze.uid AS analyze_id,'. 'tx_nG6_analyze.directory AS analyze_directory,'. 'tx_nG6_analyze.name AS analyze_name, '. 'tx_nG6_analyze.class AS analyze_class, '. 'tx_nG6_analyze.date AS analyze_date, '. 'tx_nG6_analyze.software AS analyze_software, '. 'tx_nG6_analyze.version AS analyze_version, '. 'tx_nG6_analyze.params AS analyze_params, '. 'tx_nG6_analyze.description AS analyze_description, '. 'tx_nG6_analyze.is_editable AS analyze_is_editable, '. 'tx_nG6_analyze.parent_uid AS analyze_parent_uid, '. 'tx_nG6_analyze.hidden AS analyze_hidden ', 'FROM' => 'tx_nG6_analyze '. 'INNER JOIN tx_nG6_project_analyze ON tx_nG6_analyze.uid = tx_nG6_project_analyze.analyze_id '. 'INNER JOIN tx_nG6_project ON tx_nG6_project_analyze.project_id=tx_nG6_project.uid '. 'INNER JOIN fe_rights ON tx_nG6_project.uid=fe_rights.project_id '. 'INNER JOIN fe_users ON fe_rights.fe_user_id=fe_users.uid ', 'WHERE' => $where, 'GROUPBY' => '', 'ORDERBY' => $orderby, 'LIMIT' => $limit ); // Then create the result hash table $results = array(); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $analyze_id = $row['analyze_id']; if (!isset ($results['analyse_'.$analyze_id])) { $results['analyse_'.$analyze_id] = array( 'directory' => $row['analyze_directory'], 'name' => $row['analyze_name'], 'class' => $row['analyze_class'], 'id' => $row['analyze_id'], 'hidden' => $row['analyze_hidden'], 'params' => $row['analyze_params'], 'software' => $row['analyze_software'], 'version' => $row['analyze_version'], 'date' => $row['analyze_date'], 'description' => $row['analyze_description'], 'is_editable' => $row['analyze_is_editable'], 'parent_id' => $row['analyze_parent_uid'] ); } } return $results; } /** * Hide a project and sublevels (runs & analyzes) datas from database project * * @param string $p_id the project id to hide */ function hide_project($p_id) { // First change all project runs $project_runs = tx_nG6_db::get_project_runs($p_id); foreach($project_runs as $run_id => $run_values) { tx_nG6_db::hide_run($run_values['id']); } // Then all project analysis $project_analysis = tx_nG6_db::get_project_analysis($p_id); foreach($project_analysis as $analysis_id => $analysis_values) { tx_nG6_db::hide_analysis($analysis_values['id']); } tx_nG6_db::unpublish_project($p_id); // Finaly change the project itself $GLOBALS['TYPO3_DB']-> exec_UPDATEquery ('tx_nG6_project', 'uid='.$p_id, array('hidden' => '1')); } /** * Unhide a project and sublevels (runs & analyzes) datas * * @param string $p_id the project id to hide */ function unhide_project($p_id) { // First change all project runs $project_runs = tx_nG6_db::get_project_runs($p_id); foreach($project_runs as $run_id => $run_values) { tx_nG6_db::unhide_run($run_values['id']); } // Then all project analysis $project_analysis = tx_nG6_db::get_project_analysis($p_id); foreach($project_analysis as $analysis_id => $analysis_values) { tx_nG6_db::unhide_analysis($analysis_values['id']); } // Finaly change the project itself $GLOBALS['TYPO3_DB']-> exec_UPDATEquery ('tx_nG6_project', 'uid='.$p_id, array('hidden' => '0')); } /** * Publish the project * * @param string $p_id the project id to publish */ function publish_project($p_id) { // First unhide the project tx_nG6_db::unhide_project($p_id); // The set the project as visible $GLOBALS['TYPO3_DB']-> exec_UPDATEquery ('tx_nG6_project', 'uid='.$p_id, array('public' => '0')); } /** * Unpublish the project * * @param string $p_id the project id to publish */ function unpublish_project($p_id) { $GLOBALS['TYPO3_DB']-> exec_UPDATEquery ('tx_nG6_project', 'uid='.$p_id, array('public' => '1')); } /** * Delete a project and sublevels (runs & analyzes) datas from database project * * @param string $p_id the project id * @param string $user_login the user login * @param string $user_pwd the user password * @param string $data_folder the data folder */ function delete_project($p_id, $user_login, $user_pwd, $data_folder) { $res = 0; // All runs $project_runs = tx_nG6_db::get_project_runs($p_id); foreach($project_runs as $run_id => $run_values) { if ($run_values['id'] != 'undefined' && $run_values['id'] != '') { //delete the run sublevels $res = tx_nG6_db::delete_run($run_values['id'], $user_login, $user_pwd, $data_folder); if ($res != 0) { break; } } } // All project_analysis if ($res == 0) { $project_analysis = tx_nG6_db::get_project_analysis($p_id); foreach($project_analysis as $analyse_id => $analyze_values) { if ($analyze_values['id'] != 'undefined' && $analyze_values['id'] != '') { // delete table 'analyze' entries $res = tx_nG6_db::delete_analysis($analyze_values['id'], $user_login, $user_pwd, $data_folder); if ($res != 0) { break; } } } } // Delete DB project entry if ($res == 0) { $table='tx_nG6_project'; $where='tx_nG6_project.uid='.$p_id; $res1 = $GLOBALS['TYPO3_DB']-> exec_DELETEquery ($table, $where); if ($res1 != 1) {$res = 1;} } // Delete right associated to the project if ($res == 0) { $table='fe_rights'; $where='fe_rights.project_id='.$p_id; $res1 = $GLOBALS['TYPO3_DB']-> exec_DELETEquery ($table, $where); if ($res1 != 1) {$res = 1;} } return $res; } /** * Return the size of the project * * @param string $p_id the project id to return the size * @param string $data_folder the data folder * @param boolean $get_analyzes get analyzes size ? */ function get_project_size($p_id, $get_analyzes=false) { $full_size = 0; // All runs $project_runs = tx_nG6_db::get_project_runs($p_id); foreach($project_runs as $run_id => $run_values) { $full_size += tx_nG6_db::get_run_size($run_values['id'], $get_analyzes); } if ($get_analyzes) { // All analysis $project_analysis = tx_nG6_db::get_project_analysis($p_id); foreach($project_analysis as $analyse_id => $analyze_values) { $full_size += tx_nG6_db::get_analysis_size($analyze_values['id']); } } return $full_size; } /* * Run functions *------------------------------------------------------------*/ /** * Select all run for the specified user * * @param string $user_id the user id * @return table with all projects */ function select_all_user_runs($user_id, $orderby='', $limit='') { // If the user is not logged on display demonstration project if ($user_id == null) { $where = 'tx_nG6_project.public=0'; } else { $where = 'fe_rights.fe_user_id='.$user_id; } // Execute the request $queryParts = Array( 'SELECT' => 'tx_nG6_run.uid AS run_id,'. 'tx_nG6_run.directory AS run_directory,'. 'tx_nG6_run.species AS run_species,'. 'tx_nG6_run.description AS run_description, '. 'tx_nG6_run.data_nature AS run_data_nature, '. 'tx_nG6_run.sequencer AS run_sequencer, '. 'tx_nG6_run.type AS run_type, '. 'tx_nG6_run.name AS run_name, '. 'tx_nG6_run.nb_sequences AS run_nb_sequences, '. 'tx_nG6_run.full_seq_size AS run_full_seq_size, '. 'tx_nG6_run.date AS run_date, '. 'tx_nG6_run.hidden AS run_hidden, '. 'tx_nG6_project.uid AS project_id, '. 'tx_nG6_project.name AS project_name ', 'FROM' => 'fe_rights '. 'INNER JOIN tx_nG6_project ON tx_nG6_project.uid=fe_rights.project_id '. 'INNER JOIN tx_nG6_project_run ON tx_nG6_project.uid=tx_nG6_project_run.project_id '. 'INNER JOIN tx_nG6_run ON tx_nG6_project_run.run_id=tx_nG6_run.uid ', 'WHERE' => $where, 'GROUPBY' => '', 'ORDERBY' => $orderby, 'LIMIT' => $limit ); // Then create the result hash table $results = array(); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $run_id = $row['run_id']; if (!isset($results['run_'.$run_id])) { $results['run_'.$run_id] = array( 'id' => $run_id, 'directory' => $row['run_directory'], 'name' => $row['run_name'], 'project_name' => $row['project_name'], 'project_id' => $row['project_id'], 'hidden' => $row['run_hidden'], 'species' => $row['run_species'], 'nb_sequences' => $row['run_nb_sequences'], 'full_seq_size' => $row['run_full_seq_size'], 'date' => $row['run_date'], 'data_nature' => $row['run_data_nature'], 'sequencer' => $row['run_sequencer'], 'type' => $row['run_type'], 'description' => $row['run_description'] ); } } return $results; } /** * Select all information for the specified run * * @param string $run_id the run id * @return hash table with all the run information */ function select_run($run_id) { // First select the run from the database $queryParts = Array( 'SELECT' => 'tx_nG6_project.uid AS project_id,'. 'tx_nG6_project.name AS project_name,'. 'tx_nG6_run.uid AS run_id,'. 'tx_nG6_run.directory AS run_directory,'. 'tx_nG6_run.description AS run_description, '. 'tx_nG6_run.species AS run_species, '. 'tx_nG6_run.name AS run_name, '. 'tx_nG6_run.data_nature AS run_data_nature, '. 'tx_nG6_run.sequencer AS run_sequencer, '. 'tx_nG6_run.type AS run_type, '. 'tx_nG6_run.full_seq_size, '. 'tx_nG6_run.hidden AS run_hidden, '. 'tx_nG6_run.nb_sequences, '. 'tx_nG6_run.storage_size, '. 'tx_nG6_run.date AS run_date', 'FROM' => 'fe_rights '. 'INNER JOIN tx_nG6_project ON tx_nG6_project.uid=fe_rights.project_id '. 'INNER JOIN tx_nG6_project_run ON tx_nG6_project.uid=tx_nG6_project_run.project_id '. 'INNER JOIN tx_nG6_run ON tx_nG6_project_run.run_id=tx_nG6_run.uid ', 'WHERE' => 'tx_nG6_run.uid='.$run_id, 'GROUPBY' => '', 'ORDERBY' => 'tx_nG6_run.date DESC', 'LIMIT' => '' ); // Then create the result hash table $result = array(); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $result = array( 'id' => $row['run_id'], 'project_id' => $row['project_id'], 'project_name' => $row['project_name'], 'directory' => $row['run_directory'], 'name' => $row['run_name'], 'hidden' => $row['run_hidden'], 'species' => $row['run_species'], 'nb_sequences' => $row['nb_sequences'], 'storage_size' => intval($row['storage_size']), 'full_seq_size' => $row['full_seq_size'], 'date' => $row['run_date'], 'data_nature' => $row['run_data_nature'], 'sequencer' => $row['run_sequencer'], 'type' => $row['run_type'], 'description' => $row['run_description'] ); } return $result; } /** * Select all mids linked to the specified run * * @param string $run_id the run id * @return hash table with all mids description */ function select_mid_descriptions($run_id) { // First select all analysis from the database $queryParts = array( 'SELECT' => 'mid, description ', 'FROM' => 'tx_nG6_sample ', 'WHERE' => 'run_id='.$run_id, 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '' ); $result = array(); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $result[$row["mid"]] = $row["description"]; } return $result; } /** * Select all analysis linked to the specified run * * @param string $run_id the run id * @return hash table with all analysis information */ function get_run_analysis($run_id, $orderby='', $limit='') { // First select all analysis from the database $queryParts = array( 'SELECT' => 'tx_nG6_analyze.uid AS analyze_id,'. 'tx_nG6_analyze.directory AS analyze_directory,'. 'tx_nG6_analyze.name AS analyze_name, '. 'tx_nG6_analyze.params AS analyze_params, '. 'tx_nG6_analyze.class AS analyze_class, '. 'tx_nG6_analyze.date AS analyze_date, '. 'tx_nG6_analyze.software AS analyze_software, '. 'tx_nG6_analyze.version AS analyze_version, '. 'tx_nG6_analyze.hidden AS analyze_hidden, '. 'tx_nG6_analyze.description AS analyze_description, '. 'tx_nG6_analyze.is_editable AS analyze_is_editable, '. 'tx_nG6_analyze.parent_uid AS analyze_parent_uid ', 'FROM' => 'tx_nG6_run_analyze '. 'INNER JOIN tx_nG6_analyze ON tx_nG6_analyze.uid = tx_nG6_run_analyze.analyze_id ', 'WHERE' => 'tx_nG6_run_analyze.run_id='.$run_id, 'GROUPBY' => '', 'ORDERBY' => $orderby, 'LIMIT' => $limit ); // Then create the result hash table $results = array(); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $analyze_id = $row['analyze_id']; if (!isset ($results['analyse_'.$analyze_id])) { $results['analyse_'.$analyze_id] = array( 'directory' => $row['analyze_directory'], 'name' => $row['analyze_name'], 'params' => $row['analyze_params'], 'class' => $row['analyze_class'], 'id' => $row['analyze_id'], 'hidden' => $row['analyze_hidden'], 'software' => $row['analyze_software'], 'version' => $row['analyze_version'], 'date' => $row['analyze_date'], 'description' => $row['analyze_description'], 'is_editable' => $row['analyze_is_editable'], 'parent_id' => $row['analyze_parent_uid'] ); } } return $results; } /** * Select all analysis linked to the specified run for the user * * @param string $user_id the user id * @param string $run_id the run id * @return hash table with all analysis information */ function get_user_run_analysis($user_id, $run_id, $orderby='', $limit='') { // If the user is not logged on display demonstration project if ($user_id == null) { $where = 'tx_nG6_run_analyze.run_id='.$run_id.' AND tx_nG6_project.public=0 AND tx_nG6_analyze.hidden=0' ; } else { $where = 'fe_users.uid='.$user_id.' AND '.'tx_nG6_run_analyze.run_id='.$run_id. ' AND ((fe_rights.right_id<>2 AND tx_nG6_analyze.hidden=0) OR fe_rights.right_id=2)' ; } // First select all analysis from the database $queryParts = array( 'SELECT' => 'tx_nG6_analyze.uid AS analyze_id,'. 'tx_nG6_analyze.directory AS analyze_directory,'. 'tx_nG6_analyze.name AS analyze_name, '. 'tx_nG6_analyze.params AS analyze_params, '. 'tx_nG6_analyze.class AS analyze_class, '. 'tx_nG6_analyze.date AS analyze_date, '. 'tx_nG6_analyze.software AS analyze_software, '. 'tx_nG6_analyze.version AS analyze_version, '. 'tx_nG6_analyze.hidden AS analyze_hidden, '. 'tx_nG6_analyze.description AS analyze_description, '. 'tx_nG6_analyze.is_editable AS analyze_is_editable, '. 'tx_nG6_analyze.parent_uid AS analyze_parent_uid ', 'FROM' => 'tx_nG6_analyze '. 'INNER JOIN tx_nG6_run_analyze ON tx_nG6_analyze.uid = tx_nG6_run_analyze.analyze_id '. 'INNER JOIN tx_nG6_run ON tx_nG6_run_analyze.run_id = tx_nG6_run.uid '. 'INNER JOIN tx_nG6_project_run ON tx_nG6_run.uid = tx_nG6_project_run.run_id '. 'INNER JOIN tx_nG6_project ON tx_nG6_project_run.project_id = tx_nG6_project.uid '. 'INNER JOIN fe_rights ON tx_nG6_project.uid=fe_rights.project_id '. 'INNER JOIN fe_users ON fe_rights.fe_user_id=fe_users.uid ', 'WHERE' => $where, 'GROUPBY' => '', 'ORDERBY' => $orderby, 'LIMIT' => $limit ); // Then create the result hash table $results = array(); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $analyze_id = $row['analyze_id']; if (!isset ($results['analyse_'.$analyze_id])) { $results['analyse_'.$analyze_id] = array( 'directory' => $row['analyze_directory'], 'name' => $row['analyze_name'], 'params' => $row['analyze_params'], 'class' => $row['analyze_class'], 'id' => $row['analyze_id'], 'hidden' => $row['analyze_hidden'], 'software' => $row['analyze_software'], 'version' => $row['analyze_version'], 'date' => $row['analyze_date'], 'description' => $row['analyze_description'], 'is_editable' => $row['analyze_is_editable'], 'parent_id' => $row['analyze_parent_uid'] ); } } return $results; } /** * Delete a run, sample and sublevel (analyzes) datas from database project * * @param string $r_id the run id * @param string $user_login the user login * @param string $user_pwd the user password * @param string $data_folder the data folder */ function delete_run($r_id, $user_login, $user_pwd, $data_folder) { $res = 0; $run_analysis = tx_nG6_db::get_run_analysis($r_id); foreach($run_analysis as $analyse_id => $analyze_values) { if ($analyze_values['id'] != 'undefined' && $analyze_values['id'] != '') { // delete table 'analyze' entries $res = tx_nG6_db::delete_analysis($analyze_values['id'], $user_login, $user_pwd, $data_folder); if ($res != 0) { break; } } } // First select the run $my_run = tx_nG6_db::select_run($r_id); // delete run if ($res == 0) { $table='tx_nG6_project_run'; $where='run_id='.$r_id; $GLOBALS['TYPO3_DB']-> exec_DELETEquery ($table, $where); $table='tx_nG6_run'; $where='tx_nG6_run.uid='.$r_id; $res1 = $GLOBALS['TYPO3_DB']-> exec_DELETEquery ($table, $where); if ($res1 != 1) {$res = 1;} } // delete run samples if ($res == 0) { $table='tx_nG6_sample'; $where='tx_nG6_sample.run_id='.$r_id; $GLOBALS['TYPO3_DB']-> exec_DELETEquery ($table, $where); } if ($res == 0) { // Delete the run directory $res = tx_nG6_utils::delete_directory($user_login, $user_pwd, $data_folder.$my_run['directory']); } return $res; } /** * Return the size of the run * * @param string $r_id the run id to return the size * @param string $data_folder the data folder * @param boolean $get_analyzes get analyzes size ? */ function get_run_size($r_id, $get_analyzes=false) { $full_size = 0; if($get_analyzes){ $run_analysis = tx_nG6_db::get_run_analysis($r_id); foreach($run_analysis as $analyse_id => $analyze_values) { $full_size += tx_nG6_db::get_analysis_size($analyze_values['id']); } } // Then select the run $my_run = tx_nG6_db::select_run($r_id); $full_size += $my_run['storage_size']; return $full_size; } /** * Hide a run and sublevels (analysis) * * @param string $r_id the run id to hide */ function hide_run($r_id) { // First select all run analysis $run_analysis = tx_nG6_db::get_run_analysis($r_id); foreach($run_analysis as $analysis_id => $analysis_values) { tx_nG6_db::hide_analysis($analysis_values['id']); } // Finaly change the project itself $GLOBALS['TYPO3_DB']-> exec_UPDATEquery ('tx_nG6_run', 'uid='.$r_id, array('hidden' => '1')); } /** * Unhide a run and sublevels (analysis) * * @param string $r_id the run id to hide */ function unhide_run($r_id, $unhide_up=false) { if ($unhide_up) { // Unhide the project $GLOBALS['TYPO3_DB']-> exec_UPDATEquery ( 'tx_nG6_project, tx_nG6_project_run', 'tx_nG6_project.uid = tx_nG6_project_run.project_id AND tx_nG6_project_run.run_id = '.$r_id , array('tx_nG6_project.hidden' => '0') ); } // Then all run analysis $run_analysis = tx_nG6_db::get_run_analysis($r_id); foreach($run_analysis as $analysis_id => $analysis_values) { tx_nG6_db::unhide_analysis($analysis_values['id']); } // Finaly change the run itself $GLOBALS['TYPO3_DB']-> exec_UPDATEquery ('tx_nG6_run', 'uid='.$r_id, array('hidden' => '0')); } /** * Get the run min date * * @return int timestamp */ function get_run_min_date(){ $queryParts = Array( 'SELECT' => 'MIN(tx_nG6_run.date) as min_date ', 'FROM' => 'tx_nG6_run', 'WHERE' => 'tx_nG6_run.date!=0', 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '' ); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); $min_date = 0; if($GLOBALS['TYPO3_DB']->sql_num_rows($res) == 1) { $tab = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res); $min_date = intval($tab['min_date']); }else{ $min_date = -1; } return $min_date; } /** * Get the run max date * * @return int timestamp */ function get_run_max_date(){ $queryParts = Array( 'SELECT' => 'MAX(tx_nG6_run.date) as max_date ', 'FROM' => 'tx_nG6_run', 'WHERE' => 'tx_nG6_run.date!=0', 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '' ); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); $max_date = 0; if($GLOBALS['TYPO3_DB']->sql_num_rows($res) == 1) { $tab = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res); $max_date = intval($tab['max_date']); }else{ $max_date = -1; } return $max_date; } /* * Analysis functions *------------------------------------------------------------*/ /** * Select all information on an analyse * * @param string $analyse_id the analyse id * @return hash table with all analyse information */ function select_analyse($analyse_id) { // First select all analyse information $queryParts = array( 'SELECT' => 'tx_nG6_project.uid AS project_id,'. 'tx_nG6_project.name AS project_name,'. 'tx_nG6_analyze.uid AS analyze_id,'. 'tx_nG6_analyze.directory AS analyze_directory,'. 'tx_nG6_analyze.name AS analyze_name, '. 'tx_nG6_analyze.params AS analyze_params, '. 'tx_nG6_analyze.software AS analyze_software, '. 'tx_nG6_analyze.class AS analyze_class, '. 'tx_nG6_analyze.date AS analyze_date, '. 'tx_nG6_analyze.description AS analyze_description, '. 'tx_nG6_analyze.version AS analyze_version, '. 'tx_nG6_analyze.is_editable AS analyze_is_editable, '. 'tx_nG6_analyze.storage_size AS analyze_storage_size, '. 'tx_nG6_analyze.parent_uid AS analyze_parent_uid ', 'FROM' => 'tx_nG6_project '. 'INNER JOIN tx_nG6_project_analyze ON tx_nG6_project.uid = tx_nG6_project_analyze.project_id '. 'INNER JOIN tx_nG6_analyze ON tx_nG6_analyze.uid=tx_nG6_project_analyze.analyze_id ', 'WHERE' => 'tx_nG6_analyze.uid='.$analyse_id, 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '' ); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); // If it's a project analyse, add project information if ($GLOBALS['TYPO3_DB']->sql_num_rows($res) > 0) { $result = array(); while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $result = array( 'project_name' => $row['project_name'], 'project_id' => $row['project_id'], 'run_name' => 'None', 'run_id' => 'None', 'directory' => $row['analyze_directory'], 'name' => $row['analyze_name'], 'class' => $row['analyze_class'], 'params' => $row['analyze_params'], 'date' => $row['analyze_date'], 'description' => $row['analyze_description'], 'parent_id' => $row['analyze_parent_uid'], 'software' => $row['analyze_software'], 'storage_size' => intval($row['analyze_storage_size']), 'version' => $row['analyze_version'], 'is_editable' => $row['analyze_is_editable'] ); } return $result; } else { // If it's a run analyse, add run information $queryParts = array( 'SELECT' => 'tx_nG6_project.name AS project_name,'. 'tx_nG6_project.uid AS project_id,'. 'tx_nG6_run.uid AS run_id,'. 'tx_nG6_run.name AS run_name,'. 'tx_nG6_analyze.uid AS analyze_id,'. 'tx_nG6_analyze.directory AS analyze_directory,'. 'tx_nG6_analyze.name AS analyze_name, '. 'tx_nG6_analyze.params AS analyze_params, '. 'tx_nG6_analyze.class AS analyze_class, '. 'tx_nG6_analyze.date AS analyze_date, '. 'tx_nG6_analyze.software AS analyze_software, '. 'tx_nG6_analyze.version AS analyze_version, '. 'tx_nG6_analyze.description AS analyze_description,'. 'tx_nG6_analyze.is_editable AS analyze_is_editable,'. 'tx_nG6_analyze.storage_size AS analyze_storage_size, '. 'tx_nG6_analyze.parent_uid AS analyze_parent_uid ', 'FROM' => 'tx_nG6_project '. 'INNER JOIN tx_nG6_project_run ON tx_nG6_project_run.project_id = tx_nG6_project.uid '. 'INNER JOIN tx_nG6_run ON tx_nG6_run.uid = tx_nG6_project_run.run_id '. 'INNER JOIN tx_nG6_run_analyze ON tx_nG6_run_analyze.run_id = tx_nG6_run.uid '. 'INNER JOIN tx_nG6_analyze ON tx_nG6_analyze.uid = tx_nG6_run_analyze.analyze_id ', 'WHERE' => 'tx_nG6_analyze.uid='.$analyse_id, 'GROUPBY' => '', 'ORDERBY' => 'tx_nG6_analyze.name', 'LIMIT' => '' ); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); $result = array(); while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $result = array( 'project_name' => $row['project_name'], 'project_id' => $row['project_id'], 'run_name' => $row['run_name'], 'run_id' => $row['run_id'], 'directory' => $row['analyze_directory'], 'name' => $row['analyze_name'], 'params' => $row['analyze_params'], 'class' => $row['analyze_class'], 'date' => $row['analyze_date'], 'description' => $row['analyze_description'], 'software' => $row['analyze_software'], 'parent_id' => $row['analyze_parent_uid'], 'version' => $row['analyze_version'], 'storage_size' => intval($row['analyze_storage_size']), 'is_editable' => $row['analyze_is_editable'] ); } return $result; } } /** * Select all results of an analyse * * @param string $analyse_id the analyse id * @return hash table with all analyse results */ function select_analyse_results($analyse_id) { // First select all analyse information $queryParts = array( 'SELECT' => 'uid,file,rkey,rvalue,rgroup ', 'FROM' => 'tx_nG6_result ', 'WHERE' => 'analyze_id='.$analyse_id, 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '' ); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); $result = array(); while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { if (array_key_exists($row['file'], $result)) { if (array_key_exists($row['rgroup'], $result[$row['file']])) { $result[$row['file']][$row['rgroup']][$row['rkey']] = $row['rvalue']; } else { $result[$row['file']][$row['rgroup']] = array($row['rkey'] => $row['rvalue']); } } else { $result[$row['file']] = array($row['rgroup'] => array($row['rkey'] => $row['rvalue'])); } } return $result; } /** * Return the size of the analysis * * @param string $a_id the analysis id to return the size * @param string $data_folder the data folder */ function get_analysis_size($a_id) { // First select the analyse $my_analysis = tx_nG6_db::select_analyse($a_id); return $my_analysis['storage_size']; } /** * Hide an analysis * * @param string $a_id the analysis id to hide */ function hide_analysis($a_id) { // Change the analysis itself $GLOBALS['TYPO3_DB']-> exec_UPDATEquery ('tx_nG6_analyze', 'uid='.$a_id, array('hidden' => '1')); } /** * Unhide an analysis * * @param string $a_id the analysis id to hide */ function unhide_analysis($a_id, $unhide_up=false) { if ($unhide_up) { $queryParts = array( 'SELECT' => 'tx_nG6_project_analyze.uid', 'FROM' => 'tx_nG6_project_analyze', 'WHERE' => 'tx_nG6_project_analyze.analyze_id = '.$a_id, 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '' ); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts) ; $is_project_analyze = $GLOBALS['TYPO3_DB']->sql_num_rows( $res ) ; // If the analyse isn't link to run if( $is_project_analyze ) { // unhide the project $GLOBALS['TYPO3_DB']-> exec_UPDATEquery ( 'tx_nG6_project, tx_nG6_project_analyze', 'tx_nG6_project.uid = tx_nG6_project_analyze.project_id AND tx_nG6_project_analyze.analyze_id = '.$a_id , array('tx_nG6_project.hidden' => '0') ) ; } // If the analyse is link to run else { // unhide the project and the run $GLOBALS['TYPO3_DB']->exec_UPDATEquery ( 'tx_nG6_project, tx_nG6_project_run, tx_nG6_run, tx_nG6_run_analyze', 'tx_nG6_project.uid = tx_nG6_project_run.project_id '. 'AND tx_nG6_project_run.run_id = tx_nG6_run.uid '. 'AND tx_nG6_run.uid = tx_nG6_run_analyze.run_id '. 'AND tx_nG6_run_analyze.analyze_id = '.$a_id , array('tx_nG6_project.hidden' => '0', 'tx_nG6_run.hidden' => '0') ) ; } } // Change the analysis itself $GLOBALS['TYPO3_DB']-> exec_UPDATEquery ('tx_nG6_analyze', 'uid='.$a_id, array('hidden' => '0')); } /** * Delete an analyze and results from database project * * @param string $a_id the analyze id * @param string $user_login the user login * @param string $user_pwd the user password * @param string $data_folder the data folder * @return 0=>everything ok, 1=>user right problem, 2=>wrong authentification, 3=>connection error */ function delete_analysis($a_id, $user_login, $user_pwd, $data_folder) { $res = 0; // First select the analyse $my_analysis = tx_nG6_db::select_analyse($a_id); // Delete the analysis results from the database $table='tx_nG6_result'; $where='tx_nG6_result.analyze_id='.$a_id; $GLOBALS['TYPO3_DB']-> exec_DELETEquery ($table, $where); // Intermediate tables $table='tx_nG6_project_analyze'; $where='analyze_id='.$a_id; $GLOBALS['TYPO3_DB']-> exec_DELETEquery ($table, $where); $table='tx_nG6_run_analyze'; $where='analyze_id='.$a_id; $GLOBALS['TYPO3_DB']-> exec_DELETEquery ($table, $where); // Finaly the analysis itself $table='tx_nG6_analyze'; $where='tx_nG6_analyze.uid='.$a_id; $res1 = $GLOBALS['TYPO3_DB']-> exec_DELETEquery ($table, $where); if ($res1 != 1) { $res = 1; } if ($res == 0) { // Delete the analyse directory $res = tx_nG6_utils::delete_directory($user_login, $user_pwd, $data_folder.$my_analysis['directory']); } return $res; } /* * User functions *------------------------------------------------------------*/ /** * Return if the user is authorized or not to access the specified project and run * * @param int $user_id the user id * @param string $project_id the project id * @param string $project_id the run id * @return boolean */ function user_is_authorized ($user_id, $project_id, $run_id) { $authorized = false; // public project ? if ($project_id) { $queryParts = array( 'SELECT' => 'public', 'FROM' => 'tx_nG6_project', 'WHERE' => 'uid='.$project_id, 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '' ); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); $val = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res); $authorized = ($val['public'] == 0); } elseif($run_id) { $queryParts = array( 'SELECT' => 'public', 'FROM' => 'tx_nG6_project INNER JOIN tx_nG6_project_run ON tx_nG6_project.uid=tx_nG6_project_run.project_id', 'WHERE' => 'tx_nG6_project_run.run_id='.$run_id, 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '' ); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); $val = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res); $authorized = ($val['public'] == 0); } // not a public project if(!$authorized){ // authorized in project ? if ($project_id) { $queryParts = array( 'SELECT' => 'fe_rights.right_id ', 'FROM' => 'fe_rights INNER JOIN tx_nG6_project ON tx_nG6_project.uid=fe_rights.project_id ', 'WHERE' => 'fe_rights.fe_user_id='.$user_id.' AND tx_nG6_project.uid='.$project_id, 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '' ); $res1 = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); $val = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res1); if(isset($val['right_id'])){ $authorized = true; } // authorized in run ? } elseif ($run_id) { $queryParts = array( 'SELECT' => 'fe_rights.right_id ', 'FROM' => 'fe_rights '. 'INNER JOIN tx_nG6_project ON tx_nG6_project.uid=fe_rights.project_id '. 'INNER JOIN tx_nG6_project_run ON tx_nG6_project.uid=tx_nG6_project_run.project_id ', 'WHERE' => 'fe_rights.fe_user_id='.$user_id.' AND tx_nG6_project_run.run_id='.$run_id, 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '' ); $res1 = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); $val = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res1); if(isset($val['right_id'])){ $authorized = true; } } } return $authorized; } /** * Return if the user is a superuser (administrator) for the specified project/run/analyse * * @param string $user_id the user id * @param string $type can be project/run/analyse * @param string $uid the [project/run/analyse]'s uid * @return boolean {1 = ok, 0 = nok} */ function is_administrator($user_id, $type, $uid) { $is_admin = false; if(!$user_id == null){ // Project if ($type == 'project') { $is_admin = tx_nG6_db::is_project_administrator($user_id, $uid); // Run } elseif ($type == 'run') { $queryParts = array( 'SELECT' => 'project_id', 'FROM' => 'tx_nG6_project_run', 'WHERE' => 'run_id='.$uid, 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '' ); $res1 = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); $val = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res1); $is_admin = tx_nG6_db::is_project_administrator($user_id, $val['project_id']); // Analyze } elseif ($type == 'analyze') { $queryParts = array( 'SELECT' => 'run_id', 'FROM' => 'tx_nG6_run_analyze', 'WHERE' => 'analyze_id='.$uid, 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '' ); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); // Run_analyze if ($GLOBALS['TYPO3_DB']->sql_num_rows($res) > 0) { $val = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res); $queryParts = array( 'SELECT' => 'project_id', 'FROM' => 'tx_nG6_project_run', 'WHERE' => 'run_id='.$val['run_id'], 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '' ); $res2 = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); $val = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res2); $is_admin = tx_nG6_db::is_project_administrator($user_id, $val['project_id']); // project_analyze } else { $queryParts = array( 'SELECT' => 'project_id', 'FROM' => 'tx_nG6_project_analyze', 'WHERE' => 'analyze_id='.$uid, 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '' ); $res2 = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); $val = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res2); $is_admin = tx_nG6_db::is_project_administrator($user_id, $val['project_id']); } } } return $is_admin; } /** * Get user's rights on project. * * @param int $project_id the project id * @param int $user_id the user id */ function get_user_right_on_project($user_id, $project_id) { $right_id = -1; $queryParts = array( 'SELECT' => 'fe_rights.right_id AS right_id ', 'FROM' => 'fe_rights', 'WHERE' => 'fe_rights.fe_user_id='. $user_id .' AND fe_rights.project_id='.$project_id ); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $right_id = $row['right_id']; } return $right_id; } /** * Return true if the user is a member on the project * * @param int $user_id the user id * @param int $project_id ths project id */ function is_project_member($user_id, $project_id){ $is_member = false; $right = tx_nG6_db::get_user_right_on_project($user_id, $project_id); if ($right == 0) { $is_member = true; } return $is_member; } /** * Return true if the user is a manager on the project * * @param int $user_id the user id * @param int $project_id ths project id */ function is_project_manager($user_id, $project_id){ $is_manager = false; $right = tx_nG6_db::get_user_right_on_project($user_id, $project_id); if ($right == 1) { $is_manager = true; } return $is_manager; } /** * Return true if the user is an administrator on the project * * @param int $user_id the user id * @param int $project_id ths project id */ function is_project_administrator($user_id, $project_id){ $is_admin = false; $right = tx_nG6_db::get_user_right_on_project($user_id, $project_id); if ($right == 2) { $is_admin = true; } return $is_admin; } /** * Get all users with rights on the project. * * @param int $project_id the project id */ function get_all_users_on_project($project_id){ $users = array(); $queryParts = Array( 'SELECT' => 'fe_users.uid, fe_users.username, fe_users.lastlogin, fe_users.first_name, ' .' fe_users.last_name, fe_users.email, fe_rights.right_id, fe_users.cruser_id ', 'FROM' => 'fe_users INNER JOIN fe_rights ON fe_users.uid=fe_rights.fe_user_id ', 'WHERE' => 'fe_rights.project_id='.$project_id, 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '', ); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); $res_tab = array(); while($res_row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $user_id = $res_row['uid']; $lastlogin = date("d-m-Y", $res_row['lastlogin']); $cruser_infos = tx_nG6_db::get_user_informations($res_row['cruser_id']); if (!isset ($users['user_'.$user_id])){ $users['user_'.$user_id] = array( 'id' => $user_id, 'username' => $res_row['username'], 'lastlogin' => $lastlogin, 'first_name' => $res_row['first_name'], 'last_name' => $res_row['last_name'], 'email' => $res_row['email'], 'right_id' => $res_row['right_id'], 'cruser_id' => $res_row['cruser_id'], 'cruser_name' => $cruser_infos['username'] ); } } return $users; } /** * Delete acces from a project to a specific member * * @param int $user_id the user id * @param int $project_id the project id */ function delete_access_to_project($user_id, $project_id){ $GLOBALS['TYPO3_DB']->exec_DELETEquery('fe_rights', 'fe_rights.fe_user_id='.$user_id.' AND fe_rights.project_id='.$project_id); } /** * Change right on project for a member. * * @param int $user_id the user id * @param int $project_id the project id * @param int $right the right id (0=member, 1=manager, 2=admin) */ function change_access_to_project($user_id, $project_id, $right){ $GLOBALS['TYPO3_DB']->exec_UPDATEquery ('fe_rights', 'fe_rights.fe_user_id='.$user_id.' AND fe_rights.project_id='.$project_id, array('fe_rights.right_id' => $right)); } /** * Add a new member to the project. * * @param int $user_id the user id * @param int $project_id the project id * @param int $right the right id (0=member, 1=manager, 2=admin) */ function add_access_to_project($user_id, $project_id, $right_id){ $member_tab = array( 'fe_user_id' => $user_id, 'project_id' => $project_id, 'right_id' => $right_id ); $GLOBALS['TYPO3_DB']->exec_INSERTquery ('fe_rights', $member_tab); } /** * Get all usernames, firstnames and lastnames starting with a string. * * @param string $name_start the string part * @param string $user_col the fe_users column to use * @return array */ function get_all_names_starting_with($name_start, $user_col) { $queryParts = Array( 'SELECT' => 'fe_users.uid, fe_users.username, fe_users.last_name, fe_users.first_name, fe_users.password, fe_users.email, fe_users.cruser_id, fe_groups.title, fe_groups.tx_nG6_organism, fe_groups.tx_nG6_location', 'FROM' => 'fe_users INNER JOIN fe_groups ON fe_users.usergroup=fe_groups.uid', 'WHERE' => 'fe_users.'.$user_col.' LIKE "'.$name_start.'%"', 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '', ); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); $res_tab = array(); while($res_row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $res_tab[] = array( 'uid' => $res_row['uid'], 'username' => $res_row['username'], 'first_name' => $res_row['first_name'], 'last_name' => $res_row['last_name'], 'password' => $res_row['password'], 'email' => $res_row['email'], 'title' => $res_row['title'], 'cruser_id' => $res_row['cruser_id'], 'organism' => $res_row['tx_nG6_organism'], 'location' => $res_row['tx_nG6_location'] ); } return $res_tab; } /** * Get all groupnames starting with a string. * * @param string $starts_with the string part * @param string $col the colone name to seek in * @return array */ function get_all_starts_with_in_group($starts_with, $col) { $queryParts = Array( 'SELECT' => '*', 'FROM' => 'fe_groups', 'WHERE' => 'fe_groups.'.$col.' LIKE "'.$starts_with.'%"', 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '', ); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); $res_tab = array(); $distinct = array(); while($res_row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { if( $col == 'title') { $res_tab[] = array( 'uid' => $res_row['uid'], 'title' => $res_row['title'], 'organism' => $res_row['tx_nG6_organism'], 'location' => $res_row['tx_nG6_location'] ); } else { if( !isset($distinct[$res_row[$col]]) ) { $res_tab[] = array( 'uid' => $res_row['uid'], substr($col, 7) => $res_row[$col] ); $distinct[$res_row[$col]] = True ; } } } return $res_tab; } /** * Get user informations. * * @param int $user_id the user id */ function get_user_informations($user_id){ $queryParts = Array( 'SELECT' => 'fe_users.uid, fe_users.username, fe_users.last_name, fe_users.first_name, fe_users.password, fe_users.email, fe_users.cruser_id', 'FROM' => 'fe_users', 'WHERE' => 'fe_users.uid='.$user_id, 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '', ); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); $res_tab = null; while($res_row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $res_tab = array( 'uid' => $res_row['uid'], 'username' => $res_row['username'], 'first_name' => $res_row['first_name'], 'last_name' => $res_row['last_name'], 'password' => $res_row['password'], 'email' => $res_row['email'], 'cruser_id' => $res_row['cruser_id'] ); } return $res_tab; } function select_user_by_username($username){ $res_tab = null; $queryParts = Array( 'SELECT' => 'fe_users.uid, fe_users.username, fe_users.first_name, fe_users.last_name, fe_users.email', 'FROM' => 'fe_users', 'WHERE' => 'fe_users.username LIKE "'.$username.'" ', 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '', ); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); while($res_row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $res_tab = array( 'uid' => $res_row['uid'], 'username' => $res_row['username'], 'first_name' => $res_row['first_name'], 'last_name' => $res_row['last_name'], 'email' => $res_row['email'], ); } return $res_tab; } function user_field_exist ($field, $value){ $queryParts = Array( 'SELECT' => 'fe_users.uid', 'FROM' => 'fe_users', 'WHERE' => 'fe_users.' . $field . ' LIKE "'.$value.'" ', 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '', ); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); $uid = null; while($res_row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $uid = $res_row['uid']; } return isset($uid); } /** * Create a new user in the DB. * * @param array $user_datas the user array * @return 0: ok, 1: username exists, 2: email exists */ function add_user($user_name, $first_name, $last_name, $email, $password, $cruser_id, $group_id, $pid){ // first check if username or email are unique if (tx_nG6_db::user_field_exist("username", $user_name)) { return 1; } else if (tx_nG6_db::user_field_exist("email", $email)) { return 2; } else { // Create new user $user_datas = array( 'username' => $user_name, 'pid' => $pid, 'first_name' => $first_name, 'last_name' => $last_name, 'email' => $email, 'password' => $password, 'cruser_id' => $cruser_id, 'usergroup' => $group_id, 'tstamp' => time(), 'crdate' => time() ); $GLOBALS['TYPO3_DB']->exec_INSERTquery('fe_users', $user_datas); return 0; } } /** * Tell if the group name exists in the DB. * * @param string $group_name the group name */ function get_group_id($group_name) { $exists = null; $queryParts = Array( 'SELECT' => 'fe_groups.uid', 'FROM' => 'fe_groups', 'WHERE' => 'fe_groups.title="'.$group_name.'" ', 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '', ); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); while($res_row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { if(isset($res_row['uid'])){ $exists = $res_row['uid']; } } return $exists; } /** * Found the usergroup of a user. * * @param int $user_id user id * @return the user group, null error */ function get_user_usergroup($user_id){ $usergroup = null; $queryParts = Array( 'SELECT' => 'fe_users.usergroup', 'FROM' => 'fe_users', 'WHERE' => 'fe_users.uid='.$user_id, 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '', ); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); while($res_row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $usergroup = $res_row['usergroup']; } return $usergroup; } /** * Number of project the user can access to * * @param int $user_id the user id * @return string the count */ function count_number_of_project_access($user_id) { $queryParts = array( 'SELECT' => 'COUNT(fe_rights.project_id) AS p_number ', 'FROM' => 'fe_rights', 'WHERE' => 'fe_rights.fe_user_id='.$user_id, 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '' ); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $number = $row['p_number']; } return $number; } /** * Delete a user from database * * @param int $user_id the user id */ function delete_user($user_id){ $GLOBALS['TYPO3_DB']->exec_DELETEquery('fe_users', 'fe_users.uid='.$user_id); } /** * finalize_installation : Update fe and be user from database * * @param string user_name the user id * @return bool true if ok false else */ function finalize_installation($user_id, $user_name, $first_name, $last_name, $email, $password, $pid, $project, $descr){ $fe_user_datas = array( 'username' => $user_name, 'pid' => $pid, 'first_name' => $first_name, 'last_name' => $last_name, 'email' => $email, 'password' => $password, 'tstamp' => time() ); $be_user_datas = array( 'username' => $user_name, 'realName' => $first_name. " ".$last_name, 'email' => $email, 'password' => $password, 'tstamp' => time() ); $project_datas = array( 'name' => $project, 'description' => $descr ); $res = $GLOBALS['TYPO3_DB']->exec_UPDATEquery('fe_users', 'uid='.$user_id, $fe_user_datas ); if ($res == True){ $res2 = $GLOBALS['TYPO3_DB']->exec_UPDATEquery('be_users', 'uid='.$user_id, $be_user_datas ); } if ($res == True){ $queryParts = array( 'SELECT' => 'uid', 'FROM' => 'tx_nG6_project', 'WHERE' => 'name = "project_install"', 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '' ); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); $project_id=""; while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $project_id = $row['uid']; } if ($project_id != "") { $res = $GLOBALS['TYPO3_DB']->exec_UPDATEquery('tx_nG6_project', 'uid='.$project_id,$project_datas ); } else { $res=False; } } if ($res == True){ $res = $GLOBALS['TYPO3_DB']->exec_UPDATEquery('pages', 'uid=2', array('hidden' => '0')); $res = $GLOBALS['TYPO3_DB']->exec_UPDATEquery('pages', 'uid=3', array('hidden' => '0', 'title' => 'Projects')); $res = $GLOBALS['TYPO3_DB']->exec_UPDATEquery('pages', 'uid=4', array('hidden' => '0')); $res = $GLOBALS['TYPO3_DB']->exec_UPDATEquery('pages', 'uid=6', array('hidden' => '0')); } return $res; } /** * Count user in a group * * @param int $group_id the group id * @return string the count */ function count_users_in_group($group_id){ $queryParts = array( 'SELECT' => 'COUNT(fe_users.usergroup) AS g_count ', 'FROM' => 'fe_users', 'WHERE' => 'fe_users.usergroup='.$group_id, 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '' ); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $number = $row['g_count']; } return $number; } /** * Delete a group from database * * @param int $group_id the group id */ function delete_group($group_id){ $GLOBALS['TYPO3_DB']->exec_DELETEquery('fe_groups', 'fe_groups.uid='.$group_id); } /** * Create a new group in the DB. * * @param array $group_datas the group array */ function create_new_group($cruser_id, $group_name, $organism, $location) { // Create new user $group_datas = array( 'cruser_id' => $cruser_id, 'title' => $group_name, 'tx_nG6_organism' => $organism, 'tx_nG6_location' => $location, 'hidden' => 0, 'deleted' => 0, 'description' => '', 'subgroup' => '', 'tstamp' => time(), 'crdate' => time() ); $GLOBALS['TYPO3_DB']->exec_INSERTquery('fe_groups', $group_datas); } /** * List all groups * * @return array */ function get_group_list(){ $queryParts = Array( 'SELECT' => 'fe_groups.uid, fe_groups.title', 'FROM' => 'fe_groups', 'WHERE' => '', 'GROUPBY' => '', 'ORDERBY' => 'fe_groups.uid', 'LIMIT' => '', ); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); $res_tab = null; while($res_row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $res_tab[] = array( 'uid' => $res_row['uid'], 'title' => $res_row['title'] ); } return $res_tab; } /** * List all users in group * * @param int $group_id the grou pid * @return array */ function get_all_users_in_group($group_id){ $users_in_group = null; $queryParts = Array( 'SELECT' => 'fe_users.uid', 'FROM' => 'fe_users', 'WHERE' => 'fe_users.usergroup='.$group_id, 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '', ); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); while($res_row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $users_in_group[] = $res_row['uid']; } return $users_in_group; } /** * Get group informations. * * @param int $group_id * @return array group information or null */ function get_group_informations($group_id){ $queryParts = Array( 'SELECT' => 'fe_groups.uid, fe_groups.title, fe_groups.description, fe_groups.crdate, fe_groups.cruser_id ', 'FROM' => 'fe_groups', 'WHERE' => 'fe_groups.uid='.$group_id, 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '', ); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); $res_tab = null; while($res_row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $res_tab = array( 'uid' => $res_row['uid'], 'title' => $res_row['title'], 'description' => $res_row['description'], 'crdate' => $res_row['crdate'], 'cruser_id' => $res_row['cruser_id'] ); } return $res_tab; } /* * DB integrity functions *------------------------------------------------------------*/ /** * Check the integrity of 'fe_rights_levels' table. */ function check_db_rights_level(){ $queryParts = Array( 'SELECT' => 'fe_rights_levels.right_level_id, fe_rights_levels.right_level_label ', 'FROM' => 'fe_rights_levels ', 'WHERE' => '', 'GROUPBY' => '', 'ORDERBY' => '', 'LIMIT' => '', ); $res = $GLOBALS['TYPO3_DB']->exec_SELECT_queryArray($queryParts); $res_tab = array(); while($res_row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { $res_tab = array( 'id' => $res_row['right_level_id'], 'label' => $res_row['right_level_label'] ); } // insert if( !in_array('member', array_values($res_tab)) ){ $insert_rows = Array( 'right_level_id' => 0, 'right_level_label' => 'member' ); $GLOBALS['TYPO3_DB']->exec_INSERTquery('fe_rights_levels', $insert_rows); } if( !in_array('manager', array_values($res_tab)) ){ $insert_rows = Array( 'right_level_id' => 1, 'right_level_label' => 'manager' ); $GLOBALS['TYPO3_DB']->exec_INSERTquery('fe_rights_levels', $insert_rows); } if( !in_array('administrator', array_values($res_tab)) ){ $insert_rows = Array( 'right_level_id' => 2, 'right_level_label' => 'administrator' ); $GLOBALS['TYPO3_DB']->exec_INSERTquery('fe_rights_levels', $insert_rows); } } } if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/nG6/class.tx_nG6_db.php']) { include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/nG6/class.tx_nG6_db.php']); } ?>