='$start'"; $conditions[] = "date<='$end'"; $summary['start'] = $start; $summary['end'] = $end; } else { $conditions[] = "date='$start'"; $summary['start'] = $start; } } if( !empty( $_REQUEST['u'] ) ) $conditions[] = 'user_id in (' . implode( ',', $_REQUEST['u'] ) . ')'; if( !empty( $_REQUEST['cid'] ) ) { insertElements( $tables, 'jobs' ); insertElements( $conditions, 'job_id=jid' ); insertElements( $conditions, "client_id=$_REQUEST[cid]" ); $summary['client'] = $clients[ $_REQUEST['cid'] ]; } if( !empty( $_REQUEST['jid'] ) ) { $conditions[] = "job_id=$_REQUEST[jid]"; if( $jobs[ $_REQUEST['jid'] ] == $summary['client'] ) unset( $summary['client'] ); $summary['job'] = "#$_REQUEST[jid] - " . $jobs[ $_REQUEST['jid'] ]; } // determine sort (make sure dependant table exists) if( !array_key_exists( 'sort', $_GET ) ) $_GET['sort'] = 3; if( !array_key_exists( $sort_deps[ $_GET['sort'] ], $tables ) ) $_GET['sort'] = 3; $sort = $sort_bys[ $_GET['sort'] ]; // finalize arrays $columns = implode( ', ', $columns ); $tables = implode( ', ', $tables ); $conditions = implode( ' and ', $conditions ); $groups = empty( $groups ) ? '' : 'group by ' . implode( ', ', $groups ); // build query $query = "select $columns from $tables where $conditions $groups order by $sort"; $qstart = microtime(); $results = Database::getRowArray( $query ); $qend = microtime(); $qtime = array_sum(explode(" ",$qend)) - array_sum(explode(" ",$qstart)); $total = 0; foreach( $results as $entry ) { $total += $entry['hours']; } } // prepare a nice key-lookup of selected users for smarty // also build list of names for summary if( array_key_exists( 'u', $_REQUEST ) && !array_key_exists( 'au', $_REQUEST ) ) { $selected_users = array(); $userlist = array(); foreach( $_REQUEST['u'] as $uid ) { $selected_users[ $uid ] = true; $userlist[] = $usernames[ $uid ]; } $summary[ 'users' ] = $userlist; } else $selected_users = false; // assign data to the template Template::assign( 'summary', $summary ); Template::assign( 'usernames', $usernames ); Template::assign( 'selected_users', $selected_users ); Template::assign( 'clients', $clients ); Template::assign( 'jobs', $jobs ); Template::assign( 'results', $results ); Template::assign( 'total', $total ); Template::assign( 'query_time', $qtime ); Template::assign( 'query', $query ); Template::addStyleSheet( 'hours.css' ); Template::addJavascript( 'reports.js' ); Template::addStyleSheet( 'calendar.css' ); Template::addJavascript( 'calendar.js' ); Template::display( 'hours.tpl', 'Hour Counts' ); // inserts non-empty element(s) into a uniquely indexed array // $insert may be a single value or an array function insertElements( &$arr, $insert ) { if( !empty( $insert ) ) { if( is_array( $insert ) ) foreach( $insert as $val ) $arr[ $val ] = $val; else $arr[ $insert ] = $insert; } } ?>