| 1 | rodolico | 1 | <?php
 | 
        
           |  |  | 2 |   | 
        
           | 67 | rodolico | 3 |    define(VERSION,'1.6.2');
 | 
        
           |  |  | 4 |    define(BUILD_DATE,'$Date: 2019-05-11 19:10:30 -0500 (Sat, 11 May 2019) $');
 | 
        
           |  |  | 5 |    define(SVN_REV,'$Rev: 86 $' );
 | 
        
           | 1 | rodolico | 6 |   | 
        
           |  |  | 7 |    include_once("database.php");
 | 
        
           |  |  | 8 |   | 
        
           |  |  | 9 |    include_once("library.php");
 | 
        
           |  |  | 10 |    include_once('reports.php');
 | 
        
           |  |  | 11 |   | 
        
           |  |  | 12 |    global $MODULE_REPORTS;
 | 
        
           |  |  | 13 |    $MODULE_REPORTS = array('main device screen' => 1);
 | 
        
           |  |  | 14 |   | 
        
           | 63 | rodolico | 15 |    define ('SQL_GET_MODULES',
 | 
        
           | 48 | rodolico | 16 |      "select a.key_name 'module',
 | 
        
           |  |  | 17 |              a.theValue 'script', 
 | 
        
           |  |  | 18 |              b.theValue 'path' 
 | 
        
           |  |  | 19 |       from _system a join _system b using ( key_name )
 | 
        
           |  |  | 20 |       where
 | 
        
           |  |  | 21 |          a.group_name = '<screen>' 
 | 
        
           |  |  | 22 |          and b.group_name = 'Modules' 
 | 
        
           |  |  | 23 |          and a.removed_date is null
 | 
        
           |  |  | 24 |          and b.removed_date is null"
 | 
        
           |  |  | 25 |    );
 | 
        
           |  |  | 26 |   | 
        
           | 63 | rodolico | 27 |    define ('SQL_SHOW_SITES',
 | 
        
           | 83 | rodolico | 28 |       "select concat('<a href=\"index.html?site_id=',site_id,'\">', Site,'</a>') 'Site',
 | 
        
           | 1 | rodolico | 29 |               count(*) 'Devices',
 | 
        
           | 83 | rodolico | 30 |               concat('<a href=\"edit.html?site_id=',site_id,'\">Edit</a>') Action
 | 
        
           |  |  | 31 |        from view_client_site_device
 | 
        
           | 1 | rodolico | 32 |        where <whereClause>
 | 
        
           | 83 | rodolico | 33 |        group by site_id
 | 
        
           |  |  | 34 |        order by view_client_site_device.Site"
 | 
        
           | 1 | rodolico | 35 |    );
 | 
        
           |  |  | 36 |   | 
        
           | 63 | rodolico | 37 |    define ('SQL_SHOW_DEVICES',
 | 
        
           | 83 | rodolico | 38 |       "select concat('<a href=\"show_device.html?device_id=',device_id,'\">',Device,'</a>') 'Device',
 | 
        
           |  |  | 39 |        Device_Type 'Type',
 | 
        
           |  |  | 40 |        concat('<a href=\"edit.html?device_id=',device_id,'\">Edit</a>') Action
 | 
        
           |  |  | 41 |        from view_client_site_device
 | 
        
           |  |  | 42 |        where <whereClause>
 | 
        
           |  |  | 43 |        order by view_client_site_device.Device_Type,view_client_site_device.Device"
 | 
        
           | 1 | rodolico | 44 |    );
 | 
        
           |  |  | 45 |   | 
        
           | 63 | rodolico | 46 |    define ('SQL_SHOW_CLIENTS',
 | 
        
           | 83 | rodolico | 47 |       "select max(concat('<a href=\"index.html?client_id=',client_id,'\">',Client,'</a>')) 'Client', 
 | 
        
           | 1 | rodolico | 48 |               count(*) 'Sites',
 | 
        
           | 83 | rodolico | 49 |               concat('<a href=\"edit.html?client_id=',client_id,'\">Edit</a>') Action
 | 
        
           |  |  | 50 |        from view_client_site_device
 | 
        
           |  |  | 51 |        where <whereClause>
 | 
        
           |  |  | 52 |        group by client_id
 | 
        
           |  |  | 53 |        order by view_client_site_device.Client"
 | 
        
           | 1 | rodolico | 54 |    );
 | 
        
           |  |  | 55 |   | 
        
           | 63 | rodolico | 56 |    define ('SQL_SHOW_DEVICE', '
 | 
        
           | 1 | rodolico | 57 |       select device.device_id "ID",
 | 
        
           |  |  | 58 |              concat(client.name, \' - \', site.name) "Site",
 | 
        
           |  |  | 59 |              device_type.name "Type",
 | 
        
           |  |  | 60 |              device.name "Name",
 | 
        
           | 48 | rodolico | 61 |              device.serial "Serial",
 | 
        
           | 1 | rodolico | 62 |              device.notes "Notes",
 | 
        
           | 37 | rodolico | 63 |              device.restrictions "Restrictions",
 | 
        
           | 1 | rodolico | 64 |              partof.name "Part Of",
 | 
        
           |  |  | 65 |              date(device.added_date) "Added",
 | 
        
           |  |  | 66 |              date(device.removed_date) "Removed"
 | 
        
           |  |  | 67 |       from device join site on device.site_id = site.site_id 
 | 
        
           |  |  | 68 |            join client on site.client_id = client.client_id 
 | 
        
           |  |  | 69 |            join device_type on device.device_type_id = device_type.device_type_id 
 | 
        
           |  |  | 70 |            left outer join device as partof on partof.device_id = device.part_of
 | 
        
           |  |  | 71 |       where device.device_id = <device_id>
 | 
        
           |  |  | 72 |    ');
 | 
        
           |  |  | 73 |   | 
        
           |  |  | 74 |    $LOGIN_PAGE = $_SESSION['html root'] . '/login.html';
 | 
        
           |  |  | 75 |   | 
        
           |  |  | 76 |    function verifyLogin( $username, $password ) {
 | 
        
           |  |  | 77 |       $sql = "select login_id login_id, email, where_clause
 | 
        
           |  |  | 78 |               from login 
 | 
        
           |  |  | 79 |               where email = " . makeSafeSQLValue($username) . ' 
 | 
        
           |  |  | 80 |                     and pass = md5(' . makeSafeSQLValue($password) . ") 
 | 
        
           |  |  | 81 |                     and removed_date is null";
 | 
        
           |  |  | 82 |       $info = queryDatabaseExtended( $sql );
 | 
        
           |  |  | 83 |       if ( $info['count'] == 1 ) {
 | 
        
           |  |  | 84 |          $info = $info['data'][0];
 | 
        
           |  |  | 85 |          $_SESSION['login_id'] = ($info['login_id'] ? $info['login_id'] : -1);
 | 
        
           |  |  | 86 |          $_SESSION['email'] = $info['email'];
 | 
        
           |  |  | 87 |          $_SESSION['where_clause'] = $info['where_clause'];
 | 
        
           | 84 | rodolico | 88 |          $_SESSION['menu items'] = array_keys( sqlValuesToKeys( 'select menu_id from login_menu where login_id = ' . $_SESSION['login_id'] ) );
 | 
        
           | 1 | rodolico | 89 |          redirectPage('index.html');
 | 
        
           |  |  | 90 |       } else {
 | 
        
           |  |  | 91 |          return false;
 | 
        
           |  |  | 92 |       }
 | 
        
           |  |  | 93 |    }
 | 
        
           |  |  | 94 |   | 
        
           |  |  | 95 |    function setAuth ( $whereClause = 'true' ) {
 | 
        
           | 83 | rodolico | 96 |       return " ($whereClause) and " . ( $_SESSION['where_clause'] ? $_SESSION['where_clause'] : '1=0' );
 | 
        
           | 1 | rodolico | 97 |    }
 | 
        
           |  |  | 98 |   | 
        
           |  |  | 99 |    function iAmAdministrator () {
 | 
        
           | 83 | rodolico | 100 |       return ($_SESSION['where_clause'] == '1=1');
 | 
        
           | 1 | rodolico | 101 |    }
 | 
        
           |  |  | 102 |   | 
        
           |  |  | 103 |    /*
 | 
        
           |  |  | 104 |       function takes a screen name and looks it up in $MODULE_REPORTS to translate to a bit position.
 | 
        
           |  |  | 105 |       It will then search the report table in the database to determine which reports need to be run, passing the values in the 
 | 
        
           |  |  | 106 |       $parameters array to the run command, can capturing the output.
 | 
        
           |  |  | 107 |       function then returns the html output of the report(s) back to the calling program, which can then paste it into the current
 | 
        
           |  |  | 108 |       screen.
 | 
        
           |  |  | 109 |       The concept is that a particular screen may need some sub reports. For example, the display device screen in the Main module
 | 
        
           |  |  | 110 |       will want to display the information about the device taken from the device_attrib table. To do this, a report is defined
 | 
        
           |  |  | 111 |       using the query 
 | 
        
           |  |  | 112 |          select attrib.name,device_attrib.value 
 | 
        
           |  |  | 113 |          from device_attrib join attrib using (attrib_id) 
 | 
        
           |  |  | 114 |          where device_id = <device_id> and device_attrib.removed_date is null
 | 
        
           |  |  | 115 |       where <device_id> is replaced by the report class.
 | 
        
           |  |  | 116 |       The calling routine would pass 'device_id' => '1' in the parameters array (if the current device had a device_id of 1) and this
 | 
        
           |  |  | 117 |       routine would run the report and return the results.
 | 
        
           |  |  | 118 |       This allows newer modules to add reports to existing screens simply by creating a report and setting up parameters correctly.
 | 
        
           |  |  | 119 |       BY CONVENTION, the following parameters are passed, if applicable:
 | 
        
           |  |  | 120 |          device_id      - numeric ID of the device in question
 | 
        
           |  |  | 121 |          device_name    - ascii name of the device in question
 | 
        
           |  |  | 122 |          site_id        - numeric ID of the site in question
 | 
        
           |  |  | 123 |          client_id      - numeric ID of the client in question
 | 
        
           |  |  | 124 |          added_date     - value for added_date
 | 
        
           |  |  | 125 |          removed_date   - value for removed_date
 | 
        
           |  |  | 126 |      Not all reports will use the above values, but if they are passed in to the parameters array, they will not cause problems with
 | 
        
           |  |  | 127 |      the report
 | 
        
           |  |  | 128 |   | 
        
           |  |  | 129 |      NOTE: the reports will still run in interactive mode. In the above query, it will ask for the device.
 | 
        
           |  |  | 130 |    */
 | 
        
           |  |  | 131 |    function screenReports ( $screenName, $parameters = array(), $showTitle = false ) {
 | 
        
           |  |  | 132 |       global $MODULE_REPORTS;
 | 
        
           |  |  | 133 |       $result = '';
 | 
        
           |  |  | 134 |       if ($MODULE_REPORTS[$screenName]) {
 | 
        
           |  |  | 135 |          $sql = 'select report_id from report where screen_report = ' . $MODULE_REPORTS[$screenName];
 | 
        
           |  |  | 136 |          $reportIDs = sqlValuesToKeys ($sql);
 | 
        
           |  |  | 137 |          // print "<pre>"; print_r( $parameters ); print "</pre>";
 | 
        
           |  |  | 138 |          foreach ( $reportIDs as $thisReport => $data ) {
 | 
        
           |  |  | 139 |             $report = new Report;
 | 
        
           |  |  | 140 |             $report->loadFromDatabase ( $thisReport );
 | 
        
           |  |  | 141 |             $result .= $report->run($parameters, '', $showTitle );
 | 
        
           |  |  | 142 |          }
 | 
        
           |  |  | 143 |       }
 | 
        
           |  |  | 144 |       return $result;
 | 
        
           |  |  | 145 |    }
 | 
        
           |  |  | 146 |   | 
        
           |  |  | 147 |    if ($_SESSION['file system root']) { // this is only set if we have logged in
 | 
        
           |  |  | 148 |       $InstalledModules = array();
 | 
        
           |  |  | 149 |       // get module information
 | 
        
           |  |  | 150 |       $data = queryDatabaseExtended( "select theValue from _system where removed_date is null and group_name = 'Modules'");
 | 
        
           |  |  | 151 |       if ($data) {
 | 
        
           |  |  | 152 |          foreach ($data['data'] as $row) {
 | 
        
           |  |  | 153 |             $InstalledModules[] = $row['theValue'];
 | 
        
           |  |  | 154 |          }
 | 
        
           |  |  | 155 |          // note, we are only going to include the datagase.php. All other stuff is left to the individual modules
 | 
        
           |  |  | 156 |          // $_SESSION['file system root'] is set in login.php, and is the path to the root of this application, so all else is relative
 | 
        
           |  |  | 157 |          foreach ($InstalledModules as $directory) {
 | 
        
           |  |  | 158 |             include_once( $_SESSION['file system root'] . "/$directory/database.php" );
 | 
        
           |  |  | 159 |          }
 | 
        
           |  |  | 160 |       }
 | 
        
           |  |  | 161 |    }
 | 
        
           |  |  | 162 |   | 
        
           | 62 | rodolico | 163 |    /* 
 | 
        
           |  |  | 164 |     * finds out if there is a callable script for this screen in the various modules.
 | 
        
           |  |  | 165 |     * if so, will call the script and return the output
 | 
        
           |  |  | 166 |     * index is an array of the form 'device_id' => $device_id
 | 
        
           |  |  | 167 |     * call this as
 | 
        
           |  |  | 168 |     * print callableOutput( 'device view', array( 'device_id' => $device_id );
 | 
        
           |  |  | 169 |     */
 | 
        
           |  |  | 170 |    function callableOutput( $screen, $index ) {
 | 
        
           | 63 | rodolico | 171 |       $result = '';
 | 
        
           | 62 | rodolico | 172 |       $sql = insertValuesIntoQuery(SQL_GET_MODULES,array( 'screen' => $screen ));
 | 
        
           |  |  | 173 |       $modules = queryDatabaseExtended( $sql );
 | 
        
           |  |  | 174 |       if ( $modules ) {
 | 
        
           |  |  | 175 |          $modules = $modules['data'];
 | 
        
           |  |  | 176 |          $parameters = $index;
 | 
        
           | 63 | rodolico | 177 | /*         $output = array();
 | 
        
           |  |  | 178 |          $output = "$screen\n" . print_r( $index, true) . print_r( $modules, true ) . "\n$sql\n"
 | 
        
           |  |  | 179 |          file_put_contents( '/home/rodolico/www/web/computer_asset_manager_v1/modules/file/queryout.sql', implode( "\n", $output)  );
 | 
        
           |  |  | 180 | */
 | 
        
           | 62 | rodolico | 181 |          foreach ( $modules as $report ) {
 | 
        
           |  |  | 182 |             $module = $report['module'];
 | 
        
           |  |  | 183 |             list($library, $function ) = explode (':', $report['path'] . $report['script']);
 | 
        
           |  |  | 184 |             //print "$library - $function<br />\n";
 | 
        
           | 63 | rodolico | 185 |             if ( file_exists( $library ) ) {
 | 
        
           |  |  | 186 |                require_once "$library";
 | 
        
           |  |  | 187 |                if ( is_callable( $function ) ) {
 | 
        
           |  |  | 188 |                   $content = call_user_func( $function, $parameters );
 | 
        
           |  |  | 189 |                   if ( $content )
 | 
        
           |  |  | 190 |                      $result .= "<div><h4>$module</h4>$content</div>\n";
 | 
        
           |  |  | 191 |                }
 | 
        
           | 62 | rodolico | 192 |             }
 | 
        
           |  |  | 193 |          }
 | 
        
           |  |  | 194 |       }
 | 
        
           | 63 | rodolico | 195 |       return $result;
 | 
        
           | 62 | rodolico | 196 |    } // callableOutput
 | 
        
           | 86 | rodolico | 197 |   | 
        
           |  |  | 198 |    /*
 | 
        
           |  |  | 199 |     * returns an SQL query to get all available devices
 | 
        
           |  |  | 200 |     */
 | 
        
           |  |  | 201 |    function getAllDevices () {
 | 
        
           |  |  | 202 |       $sql = "select distinct device_id,concat(Device, ' - ', Client, '(', Site, ')' )
 | 
        
           |  |  | 203 |               from view_client_site_device";
 | 
        
           |  |  | 204 |       $sql .= ' where ' . $_SESSION['where_clause'];
 | 
        
           |  |  | 205 |       $sql .= ' order by view_client_site_device.Device';
 | 
        
           |  |  | 206 |       return $sql;
 | 
        
           |  |  | 207 |    }
 | 
        
           |  |  | 208 |   | 
        
           |  |  | 209 |    /*
 | 
        
           |  |  | 210 |     * Simply returns an SQL with the client_id and the client
 | 
        
           |  |  | 211 |     */
 | 
        
           |  |  | 212 |    function getClients () {
 | 
        
           |  |  | 213 |       return 'select distinct client_id,Client
 | 
        
           |  |  | 214 |                from
 | 
        
           |  |  | 215 |                   view_client_site_device
 | 
        
           |  |  | 216 |                   join maintenance_schedule using ( device_id )
 | 
        
           |  |  | 217 |                where maintenance_schedule.removed_date is null 
 | 
        
           |  |  | 218 |                      and ' . $_SESSION['where_clause'] .
 | 
        
           |  |  | 219 |                ' order by Client';
 | 
        
           |  |  | 220 |    }
 | 
        
           |  |  | 221 |   | 
        
           |  |  | 222 |    /*
 | 
        
           |  |  | 223 |     * Return query selecting available sites
 | 
        
           |  |  | 224 |     */
 | 
        
           |  |  | 225 |    function getSites () {
 | 
        
           |  |  | 226 |       return 'select distinct site_id,Site from view_client_site_device where ' . $_SESSION['where_clause'] . ' order by Client,Site';
 | 
        
           |  |  | 227 |    }
 | 
        
           | 62 | rodolico | 228 |   | 
        
           |  |  | 229 |   | 
        
           | 86 | rodolico | 230 |    function getTechs () {
 | 
        
           |  |  | 231 |       return 'select login_id,email from login where removed_date is null order by email';
 | 
        
           |  |  | 232 |    }
 | 
        
           |  |  | 233 |   | 
        
           |  |  | 234 |   | 
        
           |  |  | 235 |   | 
        
           |  |  | 236 |   | 
        
           | 37 | rodolico | 237 | ?>
 |