'zkl', 'device_documenten' => 'device', 'project_documenten' => array( '' => 'project', 'RO' => 'user upload', 'RO-WO' => 'work order' ), 'klant_documenten' => 'customer', 'algemene_documenten' => 'general', 'syscomp_documenten' => 'syscomp', 'changelog_versie_documenten' => 'changelog_versie', 'changelog_versie_change_documenten' => 'changelog_versie_change', 'werkopdracht_documenten' => 'werkopdracht', 'zkl_werkorder_documenten' => 'zkl_werkorder' ); foreach( $row_docs as $document ) { switch( $doc_table ) { case "project_documenten": case "klant_documenten": case "syscomp_documenten": case "changelog_versie_documenten": case "changelog_versie_change_documenten": case "werkopdracht_documenten": case "zkl_werkorder_documenten": $document['localsrc'] = $upload_dir . "/" . $document['id']; break; default: $document['localsrc'] = FALSE; break; } // check for file on filesystem (but only read it when the document data is requested) if( $read_doc ) { if( $document['localsrc'] && file_exists($document['localsrc']) ) { // Open the file $handle = fopen($document['localsrc'] ,"r"); // read document data from file $file_data = fread($handle, filesize($document['localsrc'])); // close handle fclose($handle); // save file data in the 'document' $document['document'] = $file_data; } } // else: document['document'] contains the document data from the database (or not, if 'read_doc' is FALSE) // set document type if( !$document['doc_type'] ) { if( is_array($doc_types[$doc_table]) ) { // the 'omschrijving' in 'project_documenten' is abused to set the document type; // this should become a separate database field in the future $document['doc_type'] = $doc_types[$doc_table][$document['omschrijving']]; } else $document['doc_type'] = $doc_types[$doc_table]; } // else: part of the database data (future addition to the 'project_documenten' table) // save result $result[] = $document; } } return $result; } /** * Fetch file database id * * Inputs: * - file: File id * - doc_table: Document table * * Return: Array containing user information */ function db_fetch_file($file_id, $doc_table, $read_doc = FALSE) { // fetch document info switch($doc_table) { case "algemene_documenten": $filter = ($read_doc) ? "*" : "filename,titel,omschrijving,categorie,id,mimetype"; $query = "SELECT " . $filter . " FROM " . $doc_table . " WHERE id='" . $file_id . "'"; break; case "zkl_documenten": $filter = ($read_doc) ? "*" : "zkl,doc_type,filename,omschrijving,id,public,mimetype"; $query = "SELECT " . $filter . " FROM " . $doc_table . " WHERE id='" . $file_id . "'"; break; case "device_documenten": $filter = ($read_doc) ? "*" : "device,filename,omschrijving,id,mimetype"; $query = "SELECT " . $filter . " FROM " . $doc_table . " WHERE id='" . $file_id . "'"; break; case "project_documenten": $filter = ($read_doc) ? "*" : "doc_type,filename,omschrijving,id,mimetype,latitude,longitude,heading"; $query = "SELECT " . $filter . " FROM " . $doc_table . " WHERE id='" . $file_id . "'"; break; case "klant_documenten": $filter = ($read_doc) ? "*" : "klant,filename,titel,omschrijving,categorie,id,mimetype"; $query = "SELECT " . $filter . " FROM " . $doc_table . " WHERE id='" . $file_id . "'"; break; case "syscomp_documenten": case "changelog_versie_documenten": case "changelog_versie_change_documenten": case "werkopdracht_documenten": case "zkl_werkorder_documenten": $query = "SELECT * FROM " . $doc_table . " WHERE id=" . $file_id; break; default: trigger_error("Bad function call: " . $doc_table . " is not valid", E_USER_ERROR); return FALSE; } // get document and info from the database and build the resulting array // NB: only one document expected, so only the first element in the resulting array // is returned $result = db_fetch_files_by_query($query, $doc_table, $read_doc); if( $result ) return $result[0]; else return FALSE; } /** * Fetch file data which match lance id * * Inputs: * - id: Lance/project/zkl/etc db id * - doc_table: Document table * - read_doc: Read the document data (if FALSE, only the info about the document is returned) * - options / sort: Possibility to parse some extra options / old: Sort the documents by date, descending if "DESC" (the default), ascending ("ASC") * or not at all (empty string, FALSE, etc) * * Return: Multidimensional array containing all file information */ function db_fetch_files($id, $doc_table, $read_doc = FALSE, $options = NULL) { // pre-set link field to the data table $id_field = substr($doc_table, 0, -strlen("_documenten")); // Default value $order = "DESC"; $order_by = "datum"; // Stay backwards compatible if (!is_null($options)) { // Not an array with options but old sort parameter if (!is_array($options)) { $order = $options; } else { // Order if (isset($options['order'])) { $order = $options['order']; } // Order by if (isset($options['order_by'])) { $order_by = $options['order_by']; } } } // fetch document info switch($doc_table) { case "algemene_documenten": $filter = ($read_doc) ? "*" : "gebruiker,filename,titel,omschrijving,categorie,id,mimetype"; $query = "SELECT " . $filter . " FROM " . $doc_table; break; case "zkl_documenten": $filter = ($read_doc) ? "*" : "doc_type,filename,omschrijving,id,public,mimetype"; $query = "SELECT " . $filter . " FROM " . $doc_table . " WHERE zkl='" . $id . "'"; break; case "device_documenten": $filter = ($read_doc) ? "*" : "filename,omschrijving,id,mimetype"; $query = "SELECT " . $filter . " FROM " . $doc_table . " WHERE device='" . $id . "'"; break; case "project_documenten": $filter = ($read_doc) ? "*" : "level,doc_type,filename,omschrijving,id,mimetype,gebruiker,datum,latitude,longitude,heading"; $query = "SELECT " . $filter . " FROM " . $doc_table . " WHERE project='" . $id . "'"; if (!is_null($options)) { foreach($options as $key => $option) { switch($key) { // Select specific doctype case 'doctype': $query .= " AND doc_type = '" . $option . "'"; break; // Do nothing default: break; } } } break; case "klant_documenten": $filter = ($read_doc) ? "*" : "klant,gebruiker,filename,titel,omschrijving,categorie,id,mimetype"; $query = "SELECT " . $filter . " FROM " . $doc_table . " WHERE klant=" . $id; break; case "changelog_versie_documenten": case "changelog_versie_change_documenten": // link field is without the prefix "changelog_" $id_field = substr($id_field, 10); case "syscomp_documenten": case "werkopdracht_documenten": case "zkl_werkorder_documenten": $query = "SELECT * FROM " . $doc_table . " WHERE " . $id_field . "=" . $id; break; default: trigger_error("Bad function call: " . $doc_table . " is not valid", E_USER_ERROR); return FALSE; } // sort if( $order ) $query .= " ORDER BY " . $order_by . " " . $order; // get documents and info from the database and build the resulting array return db_fetch_files_by_query($query, $doc_table, $read_doc); } /** * Search files which match some parameters (only used for general docs!) * * Inputs: * - doc_table "algemene_documenten" or "klant_documenten" * - cust_id database id for the customer (for "klant_doucmenten" only) * - category document category * - title document title * - description document description * - date_begin begin of period * - time_begin begin of period * - date_end end of period * - time_end end of period * * Return: Multidimensional array containing all document information */ function db_search_files($doc_table, $cust_id, $cat, $title, $descr, $date_begin, $time_begin, $date_end, $time_end, $read_doc = FALSE) { // fetch document info switch($doc_table) { case "algemene_documenten": $filter = ($read_doc) ? "*" : "gebruiker,filename,titel,omschrijving,categorie,id,mimetype"; break; case "klant_documenten": $filter = ($read_doc) ? "*" : "klant,gebruiker,filename,titel,omschrijving,categorie,id,mimetype"; break; default: trigger_error("Bad function call: " . $doc_table . " is not valid or not supported", E_USER_ERROR); return FALSE; } // build query to search for the requested documents $query = "SELECT " . $filter . " FROM " . $doc_table . " WHERE "; if( $doc_table == "klant_documenten" && is_numeric($cust_id) ) { $query .= "klant=" . $cust_id . " AND "; } $query .= "categorie like '%" . $cat . "%' AND "; $query .= "titel like '%" . $title . "%' AND "; $query .= "omschrijving like '%" . $descr . "%'"; if ((strlen($date_begin)) && (strlen($date_end))) { $query .= "AND datum BETWEEN '" . $date_begin . " " . $time_begin . "' AND '" . $date_end . " " . $time_end . "'"; } else if (strlen($date_begin)) { $query .= " AND datum >= '" . $date_begin . " " . $time_begin . "'"; } else if (strlen($date_end)) { $query .= " AND datum <= '" . $date_end . " " . $time_end . "'"; } // Order by titel $query .= " ORDER BY titel"; // get documents and info from the database and build the resulting array $documents = db_fetch_files_by_query($query, $doc_table, $read_doc); // No customers selected? if( $doc_table == "klant_documenten" && !is_numeric($cust_id) ) { if (is_array($documents)) { // Initial array $found_documents = array(); // Get all customers down the pyramid $customers = db_search_customers(); for($i=0; $i