when not in array $found_cust = 0; if (is_array($row_customers)) { foreach ($row_customers as $row_customer) { if ($row_customer['id'] == $_PAGE_INFO['login']['customer']['id']) { $found_cust = 1; } } } if (!$found_cust) { $current_customer = db_fetch_customer($_PAGE_INFO['login']['customer']['id'], 1); array_push($row_customers, $current_customer); } // build array with customer ids $customer_ids = array(); foreach ($row_customers as $row_customer) $customer_ids[] = $row_customer['id']; // All underlying templates we have, now add global templates array_push($customer_ids, "NULL"); } else if (!is_array($customer_ids)) { // convert single customer id into an array $customer_ids = array($customer_ids); } } else { // don't use customer ids when questionaire ids are provided $customer_ids = null; } // get questionaire(s) $query = "SELECT enquete2.id,enquete2.level,enquete2.datum,enquete_i18n2.data as titel "; $query .= "FROM enquete2,enquete_i18n2 "; $query .= "WHERE "; $query .= "enquete2.id = enquete_i18n2.enquete AND "; // Use type if (!is_null($type)) { $query .= "enquete2.type ='" . $type . "' AND "; } $query .= "enquete_i18n2.i18n='" . $i18n . "' AND "; $query .= "enquete_i18n2.vraag IS NULL AND "; if ($customer_ids) // Check for global templates if (in_array("NULL", $customer_ids)) { $query .= "("; } $query .= "enquete2.klant IN (" . implode(",", $customer_ids) . ") "; // Check for global templates if (in_array("NULL", $customer_ids)) { $query .= "OR enquete2.klant is NULL) "; } elseif (is_array($questionaire_ids)) $query .= "enquete2.id IN (" . implode(",", $questionaire_ids) . ")"; else $query .= "enquete2.id=" . $questionaire_ids; $questionaires = db_fetch_data($query); if (!$questionaires) return FALSE; // build the result array $result = array(); foreach ($questionaires as $questionaire) { $questionaire['vragen'] = db_fetch_questionaire($questionaire['id'], $i18n); array_push($result, $questionaire); } return $result; } /** * Read a questionaire * Private function, always use 'db_fetch_questionaires()' * * Inputs: * - dbid Database id for the questionaire * - i18n Language * * Returns: Array with questions */ function db_fetch_questionaire($dbid, $i18n) { // fetch the questions $query = "SELECT enquete_vraag2.actie,enquete_vraag2.actie,enquete_vraag2.id,enquete_vraag2.volgorde,enquete_vraag2.type,enquete_vraag2.antwoorden,enquete_i18n2.data as vraag "; $query .= "FROM enquete_vraag2,enquete_i18n2 "; $query .= "WHERE "; $query .= "enquete_i18n2.vraag=enquete_vraag2.id AND "; $query .= "enquete_vraag2.enquete=" . $dbid . " AND "; $query .= "enquete_i18n2.i18n='" . $i18n . "' AND "; $query .= "enquete_i18n2.key IS NULL "; $query .= "ORDER BY enquete_vraag2.volgorde"; $questionaire = db_fetch_data($query); if (!$questionaire) return FALSE; // re-arrange the questions and get additional info $result = array(); foreach ($questionaire as $question) { $query = "SELECT `key`,`data` "; $query .= "FROM enquete_i18n2 "; $query .= "WHERE "; $query .= "i18n='" . $i18n . "' AND "; $query .= "enquete=" . $dbid . " AND "; $query .= "vraag=" . $question['id']; $question_info = db_fetch_data($query); // re-arrange question_inofo foreach ($question_info as $question_data) $question_info[$question_data['key']] = $question_data['data']; // prepare the meta-info arrays 'match' or 'antwoorden' switch ($question['type']) { case 'text': case 'simpletext': $question['match'] = $question['antwoorden']; unset($question['antwoorden']); break; case 'set': case 'enum': $answers = array(); foreach (explode(",", $question['antwoorden']) as $answer) { // preserve order $answers[] = array('key' => $answer, 'antwoord' => $question_info[$answer]); } $question['antwoorden'] = $answers; break; } $result[$question['id']] = $question; } return $result; } /** * Read a single questionaire * * Inputs: * - id Question id * * Returns: Array with question info */ function db_fetch_single_questionaire($id, $i18n, $dbid) { // Initial values // $query = "SELECT * FROM enquete_vraag2 where id='" . $id . "'"; $query = "SELECT enquete_vraag2.actie,enquete_vraag2.actie,enquete_vraag2.id,enquete_vraag2.volgorde,enquete_vraag2.type,enquete_vraag2.antwoorden,enquete_i18n2.data as vraag "; $query .= "FROM enquete_vraag2,enquete_i18n2 "; $query .= "WHERE "; $query .= "enquete_i18n2.vraag=enquete_vraag2.id AND "; $query .= "enquete_vraag2.id=" . $id . " AND "; $query .= "enquete_i18n2.i18n='" . $i18n . "' AND "; $query .= "enquete_i18n2.key IS NULL "; $query .= "ORDER BY enquete_vraag2.volgorde"; $questionaire = db_fetch_data($query); if (!$questionaire) return FALSE; if (is_array($questionaire)) { // re-arrange the questions and get additional info $result = array(); foreach ($questionaire as $question) { $query = "SELECT `key`,`data` "; $query .= "FROM enquete_i18n2 "; $query .= "WHERE "; $query .= "i18n='" . $i18n . "' AND "; $query .= "enquete=" . $dbid . " AND "; $query .= "vraag=" . $question['id']; $question_info = db_fetch_data($query); if (is_array($question_info)) { // re-arrange question_inofo foreach ($question_info as $question_data) { $question_info[$question_data['key']] = $question_data['data']; } // prepare the meta-info arrays 'match' or 'antwoorden' switch ($question['type']) { case 'text': case 'simpletext': $question['match'] = $question['antwoorden']; unset($question['antwoorden']); break; case 'set': case 'enum': $answers = array(); foreach (explode(",", $question['antwoorden']) as $answer) { // preserve order $answers[] = array('key' => $answer, 'antwoord' => $question_info[$answer]); } $question['antwoorden'] = $answers; break; } } $result[$question['id']] = $question; } } else { $result = $questionaire; } return $result; } /** * Get enqeute_vraag information by enquete * * Inputs: * - enquete: enquete number * * Return: result */ function db_fetch_questionaires_enquete($enquete) { $result = null; $result = db_fetch_data("SELECT * FROM enquete_vraag2 WHERE enquete='" . $enquete . "'"); return $result; } /** * Store a questionaire * * TO DO */ function db_store_questionaire($user_id, $project_id, $dbid, $answers, $latitude, $longitude, $referencenr, $userTable) { global $_PAGE_INFO; // Check coordinates if (is_null($latitude)) { if (isset($_SESSION[$_PAGE_INFO['id']]['app']['gps']['lat']) && !empty($_SESSION[$_PAGE_INFO['id']]['app']['gps']['lat'])) { $latitude = $_SESSION[$_PAGE_INFO['id']]['app']['gps']['lat']; } } if (is_null($longitude)) { if (isset($_SESSION[$_PAGE_INFO['id']]['app']['gps']['lon']) && !empty($_SESSION[$_PAGE_INFO['id']]['app']['gps']['lon'])) { $longitude = $_SESSION[$_PAGE_INFO['id']]['app']['gps']['lon']; } } $check_entry = db_get_enquete_entry_id($dbid, $user_id, $project_id, 0, $userTable); // Check if there is not already an entry for this user in combination with the enquete en project if (empty($check_entry)) { // Create enquete entry // store user info etc $query = "INSERT INTO enquete_entry (enquete,gebruiker,project,datum,latitude,longitude,gebruiker_tabel) VALUES ("; $query .= $dbid . ","; $query .= $user_id . ","; $query .= ($project_id ? $project_id : "NULL") . ","; $query .= "NOW() ,"; $query .= (!is_numeric($latitude)) ? "NULL," : "'" . ($latitude) . "',"; $query .= (!is_numeric($longitude)) ? "NULL," : "'" . ($longitude) . "',"; $query .= "'$userTable'"; $query .= ")"; if (!db_store_data($query)) return FALSE; $id = db_fetch_last_id(); DBG('create entry'); } else { $id = $check_entry[0]['id']; } // Anser is array (always size of one) foreach ($answers as $question => $answer) { $query = "SELECT * FROM enquete_data WHERE enquete_entry=" . $id . " AND vraag=" . $question . " AND volgnummer=" . $referencenr . ""; } $questionaire = db_fetch_data($query); $update = false; // Check if there is already an question if (!empty($questionaire)) { $update = true; } // Check if question already is stored in db if ($update) { foreach ($answers as $question => $answer) { // update question $query = "UPDATE enquete_data SET antwoord="; if (is_array($answer)) $query .= "'" . specialchars(implode(",", $answer)) . "'"; else $query .= "'" . specialchars($answer) . "'"; $query .= " WHERE enquete_entry='" . $id . "' AND vraag='" . $question . "' AND volgnummer=" . $referencenr . ""; } db_store_data($query); } else { // Store question $query = "INSERT INTO enquete_data (enquete_entry,vraag,antwoord,volgnummer) VALUES "; $sep = ""; foreach ($answers as $question => $answer) { $query .= $sep . "("; $query .= $id . ","; $query .= $question . ","; if (is_array($answer)) $query .= "'" . specialchars(implode(",", $answer)) . "',"; else $query .= "'" . specialchars($answer) . "',"; $query .= "'" . $referencenr . "'"; $query .= ")"; //$sep = ","; } db_store_data($query); } //return FALSE; } /** * Get enquete_entry number * * Inputs: * - enquete: enquete number * - user: user id * - project: project id * - choice: choice number * * Return: result */ function db_get_enquete_entry_id($enquete, $user, $project, $choice = 0, $userTable = 'gebruiker') { $result = null; if ($choice == 0) { $query = "SELECT * FROM enquete_entry WHERE enquete='$enquete' AND gebruiker='$user' AND project='$project' AND gebruiker_tabel='$userTable'"; } elseif ($choice == 1) { $query = "SELECT * FROM enquete_entry WHERE enquete='" . $enquete . "' AND project='" . $project . "'"; } elseif ($choice == 2) { $query = "SELECT * FROM enquete_entry WHERE gebruiker='" . $user . "' AND project='" . $project . "' AND gebruiker_tabel = '$userTable'"; } elseif ($choice == 3) { $query = "SELECT * FROM enquete_entry WHERE id='" . $enquete . "'"; } $result = db_fetch_data($query); return $result; } /** * Store enquete_entry number * * Inputs: * - enquete: enquete number * - user: user id * - project: project id * - choice: choice number * * Return: result */ function db_store_enquete_entry_id($dbid, $user, $userTable, $project, $lat, $lon) { // Create enquete entry // store user info etc $query = "INSERT INTO enquete_entry (enquete,gebruiker,project,datum,latitude,longitude,gebruiker_tabel) VALUES ("; $query .= $dbid . ","; $query .= $user . ","; $query .= $project . ","; $query .= "NOW() ,"; $query .= "'" . $lat . "',"; $query .= "'" . $lon . "',"; $query .= "'$userTable'"; $query .= ")"; if (!db_store_data($query)) { return false; } return true; } /** * * return $result; * } * Get question information * * Inputs: * - entry: enquete_entry number * - choice: choice number * - question: question number * - answer: answer * * Return: result */ function db_get_question($entry, $choice = 0, $question = "", $answer = "") { $result = null; if ($choice == 0) { $query = "SELECT * FROM enquete_data WHERE enquete_entry='" . $entry . "' ORDER BY vraag DESC LIMIT 1"; } elseif ($choice == 1) { $query = "SELECT * FROM enquete_data WHERE enquete_entry='" . $entry . "' ORDER BY volgnummer,vraag"; } elseif ($choice == 2) { $query = "SELECT * FROM enquete_data WHERE enquete_entry='" . $entry . "' AND vraag='" . $question . "' AND antwoord='" . $answer . "'"; } elseif ($choice == 3) { $query = "SELECT * FROM enquete_data WHERE (enquete_entry='" . $entry . "' AND vraag='" . $question[0] . "' AND antwoord='" . $answer[0] . "') OR (enquete_entry='" . $entry . "' AND vraag='" . $question[1] . "' AND antwoord='" . $answer[1] . "')"; } elseif ($choice == 4) { $query = "SELECT * FROM enquete_data WHERE enquete_entry='" . $entry . "' AND vraag='" . $question . "'"; } elseif ($choice == 5) { $query = "SELECT * FROM enquete_data WHERE enquete_entry='" . $entry . "' AND volgnummer='" . $question . "'"; } elseif ($choice == 6) { $query = "SELECT * FROM enquete_data WHERE vraag='" . $entry . "'"; } elseif ($choice == 7) { $query = "SELECT * FROM enquete_data WHERE enquete_entry='" . $entry . "' ORDER BY volgnummer DESC LIMIT 1"; } elseif ($choice == 8) { $query = "SELECT * FROM enquete_data WHERE enquete_entry='" . $entry . "' AND vraag='" . $question . "' AND antwoord='" . $answer . "'"; } $result = db_fetch_data($query); return $result; } /** * Delete question information from enquete_data * * Inputs: * - entry: enquete_entry number * - refnr: ref number * * Return: 1/0(ERROR) */ function db_delete_question($entry, $refnr, $choice = 0, $question = "") { $result = 0; if (!$choice) { $query = "DELETE FROM enquete_data WHERE enquete_entry='" . $entry . "' AND volgnummer='" . $refnr . "'"; } if ($choice == 1) { $query = "UPDATE enquete_data SET antwoord='' WHERE enquete_entry='" . $entry . "' AND volgnummer='" . $refnr . "' AND vraag='" . $question . "'"; } // if(db_store_data("DELETE from enquete_data where enquete_entry='" . $entry . "' and volgnummer='" . $refnr . "';")){ // $result = 1; // } if (db_store_data($query)) { $result = 1; } return $result; } /** * Delete enquete entry from enquete_entry * * Inputs: * - entry: enquete_entry number * - project: project id * - user: user id * * Return: 1/0(ERROR) */ function db_delete_enquete_entry($entry, $project, $user, $userTable) { $result = 0; if (db_store_data("DELETE FROM enquete_entry WHERE id='$entry' AND project='$project' AND gebruiker='$user' AND gebruiker_tabel='$userTable';")) { $result = 1; } return $result; } /** * Store Save flag in database * * Inputs: * - enquete_entry: enquete_entry number * * Return: 1/0(Error) */ function db_store_flag($enquete_entry) { $result = 1; $query = "UPDATE enquete_data SET opgeslagen='yes' WHERE enquete_entry='" . $enquete_entry . "'"; if (!db_store_data($query)) { $result = 0; } return $result; } /** * Update a questionaire * * TO DO */ function db_update_questionaire() { return FALSE; } /** * Read the answers for a questionaire by id * * Inputs: * - dbid Database ID, for * - what The questionaire (what == 0), project ID (what == 1) * or a single entry (what = 2); see QUESTIONAIRE_xxx * defines below * * Returns: Array with questionaire answers ('datum', 'gebruiker', 'project' * and array with "vraag"/"antwoord" pairs) */ define('QUESTIONAIRE_ALL', 0); define('QUESTIONAIRE_PROJECT', 1); define('QUESTIONAIRE_SINGLE', 2); function db_fetch_questionaire_answers($dbid, $what, $type = NULL) { $query = "SELECT enquete_entry.id,enquete_entry.gebruiker,enquete_entry.enquete,enquete_entry.project,enquete_entry.datum,enquete_entry.longitude,enquete_entry.latitude,enquete_entry.gebruiker_tabel "; $query .= "FROM enquete_entry "; // Use type if (!is_null($type)) { $query .= ",enquete2 "; } if ($what == QUESTIONAIRE_ALL) $query .= "WHERE enquete=" . $dbid; else if ($what == QUESTIONAIRE_PROJECT) { $query .= "WHERE project=" . $dbid . " "; // Use type if (!is_null($type)) { $query .= "AND enquete2.id=enquete_entry.enquete AND enquete2.type='" . $type . "' "; } $query .= "ORDER BY enquete_entry.id DESC"; } else if ($what == QUESTIONAIRE_SINGLE) $query .= "WHERE id=" . $dbid; // else: everything by default; this is not the intended interface :-) if (!($result = db_fetch_data($query))) return FALSE; for ($i = 0; $i < count($result); $i++) { $query = "SELECT enquete_entry, vraag,antwoord,opgeslagen,volgnummer "; $query .= "FROM enquete_data "; $query .= "WHERE enquete_entry=" . $result[$i]['id'] . " "; $query .= "ORDER by vraag "; $result[$i]['antwoorden'] = db_fetch_data($query); } return $result; } /** * Get answer from question by vraag and enquete_entry and volgnummer * * Inputs: * - enquete_entry: enquete_entry number * - question: question number * - refnr: reference number * * Return: result */ function db_fetch_questionaire_answer($enquete_entry, $question, $refnr) { $result = null; $query = "SELECT * FROM enquete_data WHERE vraag='" . $question . "' AND enquete_entry='" . $enquete_entry . "' AND volgnummer='" . $refnr . "';"; $result = db_fetch_data($query); return $result; } /** * Store the answers for a questionaire * * Inputs: * - user_id User id * - project_id Project id * - dbid Database id for the questionaire * - answers Array with an array of answers for each question * * Returns: Success (database id) or failure (boolean FALSE) */ function db_store_questionaire_answers($user_id, $project_id, $userTable, $dbid, $answers, $latitude, $longitude) { global $_PAGE_INFO; // store user info etc $query = "INSERT INTO enquete_entry (enquete,gebruiker,project,datum,latitude,longitude,gebruiker_tabel) VALUES ("; $query .= $dbid . ","; $query .= $user_id . ","; $query .= ($project_id ? $project_id : "NULL") . ","; $query .= "NOW() ,"; $query .= (!is_numeric($latitude)) ? "NULL," : "'" . ($latitude) . "',"; $query .= (!is_numeric($longitude)) ? "NULL," : "'" . ($longitude) . "',"; $query .= "'$userTable'"; $query .= ")"; if (!db_store_data($query)) return FALSE; $id = db_fetch_last_id(); $query = "INSERT INTO enquete_data (enquete_entry,vraag,antwoord) VALUES "; $sep = ""; // Are there answers ? if (is_array($answers) & !empty($answers)) { foreach ($answers as $question => $answer) { $query .= $sep . "("; $query .= $id . ","; $query .= $question . ","; if (is_array($answer)) $query .= "'" . specialchars(implode(",", $answer)) . "'"; else $query .= "'" . specialchars($answer) . "'"; $query .= ")"; $sep = ","; } } db_store_data($query); if ($project_id) { require_once("include/report_evaluation.php"); $file['filename'] = _("MTinfo") . " " . strtolower(_("Project")) . " " . strtolower(_("evaluation")) . "_" . str_replace("-", "", $date) . ".pdf"; $file['mimetype'] = "application/pdf"; $file['document'] = report_evaluation($id, "S", $user_id, $userTable); // Need to change the skin based on the rights holding user's company $rightsHoldingUserId = $user_id; // Get rights holding user id so we can get their company if ($userTable === 'gebruiker_profiel') { $checkInOutInfo = user_check_inout_info($project_id, $user_id, 8, $userTable); if (is_array($checkInOutInfo)) { $rightsHoldingUserId = getRightsHoldingUserId($project_id, $checkInOutInfo['lwb'], $checkInOutInfo['lwb_tabel']); } } // Store the original skin $originalSkinName = $_SESSION[$_PAGE_INFO['id']]['skin_name']; $originalSkin = $_SESSION[$_PAGE_INFO['id']]['skin']; // Get user $user = db_fetch_user($rightsHoldingUserId, null, 1); if (is_array($user)) { // Get company $customer = db_fetch_customer($user['klant'], 1); if (is_array($customer) && empty($customer['skin']) === false) { // Define skin name $_SESSION[$_PAGE_INFO['id']]['skin_name'] = _(strtolower($customer['skin'])); $_SESSION[$_PAGE_INFO['id']]['skin'] = ($_PAGE_INFO['tablet']) ? strtolower($customer['skin']) . "_tablet" : strtolower($customer['skin']); } } db_project_send_mail_for_file_upload($project_id, 'evaluatie', $file); // Restore the original skin $_SESSION[$_PAGE_INFO['id']]['skin_name'] = $originalSkinName; $_SESSION[$_PAGE_INFO['id']]['skin'] = $originalSkin; } return $id; } /** * Fetch project questionaire (feedback templates) * * Inputs: * - project: Project id * * Return: array containing selected questionaires */ function db_fetch_project_questionaire($project, $level = "") { if (!isset($level)) { // Fetch questionaires $questionaires = db_fetch_data("SELECT * FROM enquete_project WHERE project='" . $project . "'"); } else if (isset($level)) { // Fetch questionaires $questionaires = db_fetch_data("SELECT * FROM enquete_project WHERE project='" . $project . "' AND level >= '" . $level . "'"); } return $questionaires; } /** * Fetch enquete (enquete info) * * Inputs: * - id: enquete id * * Return: array containing selected enquete info */ function db_fetch_enqeute($id, $type = NULL) { // Initial values $query = "SELECT * FROM enquete2 WHERE id='" . $id . "'"; // Use type if (!is_null($type)) { $query .= " AND `type`='" . $type . "'"; } // Fetch questionaires $enquete = db_fetch_data($query); return $enquete; } /** * Fetch dependencies from questionaire * * Inputs: * - question: Question id * - $choice: Choice (0/1) * * Return: array containing selected dependencies */ function db_fetch_dependency_questionaire($question, $choice = 0) { // Fetch dependencies if ($choice == 0) { // Get question with dependeny $dependencies = db_fetch_data("SELECT * FROM enquete_dependency2 WHERE vraag='" . $question . "'"); } else if ($choice == 1) { // Get question where other question depends on $dependencies = db_fetch_data("SELECT * FROM enquete_dependency2 WHERE dependency='" . $question . "'"); } return $dependencies; } /** * db_fetch_enquete_translations * * Inputs: * - question: Question id * - lang: language * * Return: array containing selected translation */ function db_fetch_enquete_translations($question, $lang = 'nl', $enquete, $choice = 0) { $result = 0; if ($question == NULL) { $result = db_fetch_data("SELECT * FROM enquete_i18n2 WHERE vraag IS NULL AND i18n='" . $lang . "' AND enquete='" . $enquete . "' "); } else { $query = "SELECT * FROM enquete_i18n2 WHERE vraag = '" . $question . "' AND i18n='" . $lang . "'"; if ($choice == 1) { $query .= " AND `key` is NULL"; } $result = db_fetch_data($query); } return $result; } /** * Store project questionaire (feedback templates) * * Inputs: * - project: Project id * - questionaire: Array containing selected questionaires * * Return: 1 (OK)/ 0(Error) */ function db_store_project_questionaire($project, $questionaires) { // Initial return value $result = 0; // Start transaction db_start_transaction(); // Delete older feedback templates db_store_data("DELETE FROM enquete_project WHERE project='" . $project . "'"); if (is_array($questionaires)) { foreach ($questionaires as $questionaire) { db_store_data("INSERT INTO enquete_project(project, enquete,level) VALUES('" . $project . "','" . $questionaire['id'] . "','" . $questionaire['level'] . "')"); } } // Commit transaction if (db_commit_transaction()) { $result = 1; } return $result; } /** * Get question type * * Inputs: * - enquete: enquete number * - type: type question * * Return: result */ function db_get_questions_by_type($enquete, $type) { $result = null; $result = db_fetch_data("SELECT * FROM enquete_vraag2 WHERE enquete='" . $enquete . "' AND type='" . $type . "'"); return $result; } /** * Get question with button type * * Inputs: * - enquete: enquete number * * Return: result */ function check_buttons($enquete) { $result = null; $result = db_fetch_data("SELECT * FROM enquete_vraag2 WHERE enquete='" . $enquete . "' AND type LIKE 'button%'"); return $result; } /** * Store check in/out or request to check in/out * * Inputs: * - info: array with information to check /in/out the user * * Return: 1 (OK)/ -1(Error) */ function db_store_check_in_out_2($info) { // Store check in data if (is_array($info)) { $query = "INSERT INTO project_incheck_uitcheck (project, gebruiker_tabel, gebruiker,gebruiker_actie, naam, mobielnr, dvp , t, latitude, longitude, actie,lwb, lwb_tabel) VALUES ("; $query .= ($info['project_id'] ? $info['project_id'] : "NULL") . ","; $query .= ($info['user_table'] ? "'" . $info['user_table'] . "'" : "NULL") . ","; $query .= ($info['user_id'] ? $info['user_id'] : "NULL") . ","; $query .= ($info['user_action'] ? $info['user_action'] : "NULL") . ","; $query .= ($info['name'] ? "'" . $info['name'] . "'" : "NULL") . ","; $query .= ($info['mobile_nr'] ? "'" . $info['mobile_nr'] . "'" : "NULL") . ","; $query .= ($info['dvp'] ? "'" . $info['dvp'] . "'" : "NULL") . ","; $query .= ($info['t'] ? $info['t'] : "NULL") . ","; $query .= ($info['lat'] ? $info['lat'] : "NULL") . ","; $query .= ($info['long'] ? $info['long'] : "NULL") . ","; $query .= ($info['actie'] ? "'" . $info['actie'] . "'" : "NULL") . ","; $query .= ($info['lwb'] ? "'" . $info['lwb'] . "'" : "NULL") . ","; $query .= ($info['lwb_table'] ? "'" . $info['lwb_table'] . "'" : "NULL"); $query .= ")"; if (!db_store_data($query)) { return -1; } } return 1; } /** * Get check in/out information * * Inputs: * - project_id: project id * - name: name * - choice: choice number * - mobile: mboile number * * Return: result */ function user_check_inout_info($project_id, $name, $choice = 0, $mobile = "", $lwbTable = null, $accessLevel = null) { $result = null; if (!$choice) { $result = db_fetch_data("SELECT * FROM project_incheck_uitcheck WHERE project='" . $project_id . "' AND naam='" . $name . "' ORDER BY t DESC;"); } else if ($choice == 1) { $result = db_fetch_data("SELECT * FROM project_incheck_uitcheck WHERE project='" . $project_id . "' AND gebruiker='" . $name . "' ORDER BY t DESC LIMIT 1;"); return ($result[0]); } else if ($choice == 2) { $result = db_fetch_data("SELECT * FROM project_incheck_uitcheck WHERE project='" . $project_id . "' AND naam='" . $name . "' AND mobielnr='" . $mobile . "' ORDER BY t DESC LIMIT 1;"); return ($result[0]); } elseif ($choice == 3) { $result = db_fetch_data("SELECT * FROM project_incheck_uitcheck WHERE project='" . $project_id . "' AND naam='" . $name . "' ORDER BY t DESC;"); return ($result); } elseif ($choice == 4) { $result = db_fetch_data("SELECT * FROM project_incheck_uitcheck WHERE project='" . $project_id . "' AND mobielnr='" . $mobile . "' ORDER BY t DESC LIMIT 1;"); return ($result[0]); } elseif ($choice == 5) { $result = db_fetch_data("SELECT * FROM project_incheck_uitcheck WHERE mobielnr='" . $mobile . "' ORDER BY t DESC LIMIT 1;"); return ($result[0]); } elseif ($choice == 6) { $result = db_fetch_data("SELECT * FROM project_incheck_uitcheck WHERE mobielnr LIKE '%" . $mobile . "' ORDER BY t DESC LIMIT 1;"); return ($result[0]); } else if ($choice == 7) { $result = db_fetch_data("SELECT * FROM project_incheck_uitcheck WHERE project='" . $project_id . "' AND naam='" . $name . "' AND mobielnr LIKE '%" . $mobile . "' ORDER BY t DESC LIMIT 1;"); return ($result[0]); } else if ($choice == 8) { $result = db_fetch_data("SELECT * FROM project_incheck_uitcheck WHERE project='" . $project_id . "' AND gebruiker_tabel='" . $mobile . "' AND gebruiker='" . $name . "' ORDER BY t DESC LIMIT 1;"); return ($result[0]); } else if ($choice == 9) { $result = db_fetch_data("SELECT * FROM project_incheck_uitcheck WHERE gebruiker_tabel='" . $project_id . "' AND gebruiker='" . $name . "' ORDER BY t DESC LIMIT 1;"); return ($result[0]); } else if ($choice == 10) { $result = db_fetch_data("SELECT * FROM project_incheck_uitcheck WHERE project='" . $project_id . "' AND dvp='" . $name . "' ORDER BY t DESC LIMIT 1;"); return ($result[0]); } else if ($choice == 11) { $result = db_fetch_data("SELECT * FROM project_incheck_uitcheck WHERE project='" . $project_id . "' ORDER BY dvp,t DESC;"); return ($result); } else if ($choice == 12) { $subQuery = "(SELECT b.id FROM project_incheck_uitcheck AS b WHERE a.gebruiker = b.gebruiker AND b.project='" . $project_id . "'"; if ($lwbTable) { $subQuery .= " AND lwb_tabel='$lwbTable'"; } $subQuery .= " ORDER BY b.t DESC LIMIT 1)"; $query = "SELECT * FROM project_incheck_uitcheck AS a WHERE a.id = $subQuery"; $result = db_fetch_data($query); return $result; } else if ($choice == 13) { $result = db_fetch_data("SELECT * FROM project_incheck_uitcheck WHERE project='$project_id' AND level=$accessLevel ORDER BY dvp,t DESC;"); return ($result); } else { $result = db_fetch_data("SELECT * FROM project_incheck_uitcheck WHERE project='" . $project_id . "' AND naam='" . $name . "' ORDER BY t DESC LIMIT 2;"); return ($result); } return ($result[0]); } /** * Returns the current access level for the provided profile and project id * * @param int $profileId The id of the profile to get the access level for * @param int $projectId The id of the project to get the access level for * @return int|bool The access level if there is one or false if the query failed */ function getCheckInOutAccessLevel($profileId, $projectId, $action = null) { $query = "SELECT level FROM project_incheck_uitcheck WHERE gebruiker = " . $profileId . " AND project='" . $projectId . "'"; if ($action) { $query .= " AND actie='$action'"; } $query .= " ORDER BY t DESC LIMIT 1"; $result = db_fetch_data($query); // Check if the result actually contains the access level if (is_array($result) && count($result) > 0 && array_key_exists('level', $result[0])) { return $result[0]['level']; } else { return false; } } /** * Updates the access level and work location for the provided profile and project id * * @param int $accessLevel The new access level * @param int $workLocation The new work location * @param int $profileId The id of the profile to update the access level for * @param int $projectId The id of the project to update the access level for * @return int 1 if the update succeeded or 0 if it did not */ function updateCheckInOutAccessLevelAndWorkLocation($accessLevel, $workLocation, $profileId, $projectId) { // Start transaction db_start_transaction(); // Update the access level of the signed in profile $query = "UPDATE project_incheck_uitcheck SET level = $accessLevel, work_location='$workLocation' WHERE gebruiker = $profileId AND project = $projectId ORDER BY t DESC LIMIT 1"; $success = db_store_data($query); if ($success) { // Only need to generate a sign-in code for profiles with LEVEL 2 access if ($accessLevel == 9) { // Generate sign-in code $success = generateAndStoreSignInCode($profileId, $projectId, 'gebruiker_profiel_inlogcode', 'gebruiker_profiel'); } // Finish transaction $transactionFinished = db_commit_transaction(); if ($success) { // Only set the commit transaction result as the return value when the queries have succeeded $success = $transactionFinished; } } return $success; } /** * Get check in/out information * * Inputs: * - user_level: user level * - user_project: current user project * - current_user_level: current user level * * Return: result */ function get_higher_project_users($user_level, $user_project, $current_user_level) { if ($current_user_level == 8) { $result = db_fetch_data("SELECT * FROM project_gebruiker WHERE project='" . $user_project . "' AND level < '" . $user_level . "' AND rol='normaal';"); } if ($current_user_level == 9) { $result = db_fetch_data("SELECT * FROM project_gebruiker WHERE project='" . $user_project . "' AND level <= '" . $user_level . "' AND rol='normaal';"); } return ($result); } /** * Delete entry from project_incheck_uitcheck * * Inputs: * - project: project id * - user: user id * - t: time * * Return: result */ function delete_user_check_inout($project, $user, $t) { $result = db_store_data("DELETE FROM project_incheck_uitcheck WHERE project='" . $project . "' AND gebruiker='" . $user . "' AND t='" . $t . "';"); return $result; } /** * Store signin/out signature on file system * * Inputs: * - signature: signature * * Return: (FALSE/TRUE) */ function db_store_signin_signature($info) { global $_RELEASE; // save off the identifier for the new document $id = $info['project_id'] . "_" . $info['user_id'] . "_" . $info['actie'] . "_" . $info['t']; $table = "project_incheck_uitcheck/handtekening"; $upload_dir = realpath($_RELEASE[((is_ReleaseCandidate()) ? 'rc' : 'release')]['upload'] . strtolower($table)); // upload directory should exist, so the error is never triggered in a release environment if (!$upload_dir) { trigger_error("Cannot save document: path \"" . $upload_dir . "\" is invalid, expanded from \"" . $_RELEASE[((is_ReleaseCandidate()) ? 'rc' : 'release')]['upload'] . strtolower($table) . "\"", E_USER_ERROR); return FALSE; } // Open/create handle $handle = fopen($upload_dir . "/" . $id, "w"); // Write document data to file fwrite($handle, specialchars($info['signature'])); // Close handle fclose($handle); return TRUE; } /** * Removes the sign-in codes linked to the provided project id and profile id combination * @param int $projectId The project id for which to remove the sign-in code * @param int $profileId The profile id for which to remove the sign-in code * @return int 1 (OK)/ 0(Error) */ function db_delete_user_profile_login_code($projectId, $profileId) { return db_store_data("DELETE FROM gebruiker_profiel_inlogcode WHERE project='$projectId' AND gebruiker_profiel='$profileId'"); }