| Line 42... | Line 42... | 
          
            | 42 |    $results = queryDatabaseExtended( "select license_id,client_id,device_id from license where license_product_id = $license_product_id and license = '$license' and removed_date is null" );
 | 42 |    $results = queryDatabaseExtended( "select license_id,client_id,device_id from license where license_product_id = $license_product_id and license = '$license' and removed_date is null" );
 | 
          
            | 43 |    //print "<pre>"; print_r( $results ); print "</pre>"; die;
 | 43 |    //print "<pre>"; print_r( $results ); print "</pre>"; die;
 | 
          
            | 44 |    $db_license_id = $results['data'][0]['license_id'];
 | 44 |    $db_license_id = $results['data'][0]['license_id'];
 | 
          
            | 45 |    $db_client_id = $results['data'][0]['client_id'];
 | 45 |    $db_client_id = $results['data'][0]['client_id'];
 | 
          
            | 46 |    $db_device_id = $results['data'][0]['device_id'];
 | 46 |    $db_device_id = $results['data'][0]['device_id'];
 | 
          
            | - |   | 47 |    // SQL does not understand an empty string, so we replace it with the keyword null for queries
 | 
          
            | 47 |    $db_license_product_id = $results['data'][0]['license_product_id'];
 | 48 |    $queryDeviceID = $device_id ? $device_id : 'null';
 | 
          
            | 48 |    if ( ! $results ) { # this was not found, so just add it
 | 49 |    if ( ! $results ) { # this was not found, so just add it
 | 
          
            | 49 |       if ( $device_id === '' ) $device_id = 'null';
 | - |   | 
          
            | 50 |       doSQL( "insert into license (client_id,device_id,license_product_id,license, added_date) values ( $client_id, $device_id, $license_product_id, '$license', now() )" );
 | 50 |       doSQL( "insert into license (client_id,device_id,license_product_id,license, added_date) values ( $client_id, $queryDeviceID, $license_product_id, '$license', now() )" );
 | 
          
            | 51 |       return "Added";
 | 51 |       return "Added";
 | 
          
            | 52 |    }
 | 52 |    }
 | 
          
            | 53 |    if ( $client_id == $db_client_id && $device_id == $db_device_id ) { // already done, so just leave alone
 | 53 |    if ( $client_id == $db_client_id && $device_id == $db_device_id or $db_device_id  ) { // already done, so just leave alone
 | 
          
            | 54 |       return "Already Set";
 | 54 |       return "Already Set";
 | 
          
            | 55 |    }
 | 55 |    }
 | 
          
            | 56 |    if ( ! $db_device_id ) { # key was not assigned before, so just assign it
 | 56 |    if ( ! $db_device_id ) { # key was not assigned before, so just assign it
 | 
          
            | 57 |       doSQL( "update license set device_id = $db_device_id,added_date = now() where license_id = $db_license_id" );
 | 57 |       doSQL( "update license set device_id = $queryDeviceID,added_date = now() where license_id = $db_license_id" );
 | 
          
            | 58 |       return "Assigned";
 | 58 |       return "Assigned";
 | 
          
            | 59 |    }
 | 59 |    }
 | 
          
            | 60 |    // at this point, there is already an entry, but it is for a different machine, so we need to update it, ie remove the old, add the new
 | 60 |    // at this point, there is already an entry, but it is for a different machine, so we need to update it, ie remove the old, add the new
 | 
          
            | 61 |    doSQL( "update license set removed_date = now() where license_id = $db_license_id" );
 | 61 |    doSQL( "update license set removed_date = now() where license_id = $db_license_id" );
 | 
          
            | 62 |    doSQL( "insert into license (client_id,device_id,license_product_id,license, added_date) values ( $client_id, $device_id, $license_product_id, '$license', now() )" );
 | 62 |    doSQL( "insert into license (client_id,device_id,license_product_id,license, added_date) values ( $client_id, $queryDeviceID, $license_product_id, '$license', now() )" );
 | 
          
            | 63 |    return "Reassigned";
 | 63 |    return "Reassigned";
 | 
          
            | 64 | }
 | 64 | }
 | 
          
            | 65 |  
 | 65 |  
 | 
          
            | 66 | /* import CSV, processing one line at a time
 | 66 | /* import CSV, processing one line at a time
 | 
          
            | 67 |  * CSV may be delimited by anything defined in CsvImporter with auto-detect
 | 67 |  * CSV may be delimited by anything defined in CsvImporter with auto-detect
 | 
          
            | 68 |  * returns table with results, suitable for embedding in div
 | 68 |  * returns table with results, suitable for embedding in div
 | 
          
            | 69 |  */
 | 69 |  */
 | 
          
            | 70 |  
 | 70 |  
 | 
          
            | 71 |    function processFile ( $filename ) {
 | 71 |    function processFile ( $filename, $delimiter, $encapsulation = '"', $escape = '\\', $deviceNotFoundIsNull = false) {
 | 
          
            | 72 |       $return = '';
 | 72 |       $return = '';
 | 
          
            | 73 |       $fileInfo = new CsvImporter( $filename, true );
 | 73 |       $fileInfo = new CsvImporter( $filename, true, $delimiter, $enclosure, $escape );
 | 
          
            | - |   | 74 |       
 | 
          
            | - |   | 75 |       /*
 | 
          
            | - |   | 76 |        * load the information in a hash list, similar to
 | 
          
            | - |   | 77 |        * client1
 | 
          
            | - |   | 78 |        *    machine1
 | 
          
            | - |   | 79 |        *       product1
 | 
          
            | - |   | 80 |        *       product2
 | 
          
            | - |   | 81 |        *    machine2
 | 
          
            | - |   | 82 |        *       productx
 | 
          
            | - |   | 83 |        * client2
 | 
          
            | - |   | 84 |        *    ...
 | 
          
            | - |   | 85 |        */
 | 
          
            | 74 |       while ( $line = $fileInfo->get(1) ) {
 | 86 |       while ( $line = $fileInfo->get(1) ) {
 | 
          
            | 75 |          foreach ( $line as $index => $values ) {
 | 87 |          foreach ( $line as $index => $values ) {
 | 
          
            | 76 |             $import[$values['client']][$values['device']][$values['license_product']] = $values['license'];
 | 88 |             $import[$values['client']][$values['device']][$values['license_product']] = $values['license'];
 | 
          
            | 77 |          }
 | 89 |          }
 | 
          
            | 78 |       };
 | 90 |       };
 | 
          
            | 79 |  
 | 91 |  
 | 
          
            | 80 |       // process each line in turn, displaying results in table
 | 92 |       // process each client/machine/license in turn, displaying results in table
 | 
          
            | 81 |       $return = "<table border='1'><tr></tr><th>Client</th><th>ID</th><th>Machine</th><th>ID</th><th>Product</th><th>ID</th><th>License</th></tr>\n";
 | 93 |       $return .= "<table border='1'><tr></tr><th>Status</th><th>Client</th><th>ID</th><th>Machine</th><th>ID</th><th>Product</th><th>ID</th><th>License</th></tr>\n";
 | 
          
            | 82 |       foreach ( $import as $client => $data ) {
 | 94 |       foreach ( $import as $client => $data ) {
 | 
          
            | 83 |          // find client_id
 | 95 |          // find client_id
 | 
          
            | 84 |          $client_id = getValue ( 'client', 'client_id', 'name', $client );
 | 96 |          $client_id = getValue ( 'client', 'client_id', 'name', $client );
 | 
          
            | 85 |          if ( $client_id === '' ) {
 | 97 |          if ( $client_id === '' ) { // can't find client, so big error
 | 
          
            | 86 |             $return .= "<tr><td><b>Error</b></td><td colspan='7'>Could not find client ID for $client</td></tr>";
 | 98 |             $return .= "<tr><td><b>Error</b></td><td colspan='7'>Could not find client ID for $client</td></tr>";
 | 
          
            | 87 |             continue;
 | 99 |             continue;
 | 
          
            | 88 |          }
 | 100 |          }
 | 
          
            | 89 |          // find machine_id
 | 101 |          // find machine_id
 | 
          
            | 90 |          foreach ( $data as $machine => $info ) {
 | 102 |          foreach ( $data as $machine => $info ) {
 | 
          
            | 91 |             if ( $machine === '' ) {
 | 103 |             if ( $machine === '' ) { // can't find machine
 | 
          
            | 92 |                $machine_id = '';
 | 104 |                $machine_id = '';
 | 
          
            | 93 |             } else {
 | 105 |             } else {
 | 
          
            | 94 |                $machine_id = getValue( 'device', 'device_id', 'name', $machine );
 | 106 |                $machine_id = getValue( 'device', 'device_id', 'name', $machine );
 | 
          
            | - |   | 107 |                // if we can't find it and they don't want to continue
 | 
          
            | 95 |                if ( $machine_id === '' ) {
 | 108 |                if ( $machine_id === '' and ! $deviceNotFoundIsNull ) { 
 | 
          
            | 96 |                   $return .= "<td><b>Error</b></td><td>$client</td><td>$client_id</td>";
 | 109 |                   $return .= "<td><b>Error</b></td><td>$client</td><td>$client_id</td>";
 | 
          
            | 97 |                   $return .= "<td colspan='5'>Could not find machine ID for $machine</td></tr>";
 | 110 |                   $return .= "<td colspan='5'>Could not find machine ID for $machine</td></tr>";
 | 
          
            | 98 |                   continue;
 | 111 |                   continue; //ignor
 | 
          
            | 99 |                }
 | 112 |                }
 | 
          
            | 100 |             }
 | 113 |             }
 | 
          
            | 101 |             // now, locate each license_product_id and update the license information
 | 114 |             // now, locate each license_product_id and update the license information
 | 
          
            | 102 |             // if product does not exist, add it
 | 115 |             // if product does not exist, add it
 | 
          
            | 103 |             // thus, spelling counts or you'll get dup entries in license_product table
 | 116 |             // thus, spelling counts or you'll get dup entries in license_product table
 | 
          
            | Line 128... | Line 141... | 
          
            | 128 |    </head>
 | 141 |    </head>
 | 
          
            | 129 |    <body>
 | 142 |    <body>
 | 
          
            | 130 |       <?php include_once('../../menu.php'); ?>
 | 143 |       <?php include_once('../../menu.php'); ?>
 | 
          
            | 131 |       <div id="content">
 | 144 |       <div id="content">
 | 
          
            | 132 |       <?php 
 | 145 |       <?php 
 | 
          
            | 133 |          if ( $_REQUEST['fileToUpload'] ) {
 | 146 |          if ( $_POST["submit"] ) {
 | 
          
            | - |   | 147 |             $filename = tempnam( '/tmp', 'blk' );
 | 
          
            | 134 |             print processFile( $_FILES["fileToUpload"]["tmp_name"] );
 | 148 |             if ( move_uploaded_file( $_FILES["fileToUpload"]["tmp_name"], $filename ) ) {
 | 
          
            | - |   | 149 |                print "<p>Loading Data</p>\n";
 | 
          
            | - |   | 150 |                print processFile( $filename , $_REQUEST['delimiter'], $_REQUEST['encapsulation'], $_REQUEST['escape'], $_REQUEST['notfoundisnull']  );
 | 
          
            | - |   | 151 |             } else {
 | 
          
            | - |   | 152 |                print "<p>Error: move_uploaded_file failed to move to $filename</p>";
 | 
          
            | - |   | 153 |             }
 | 
          
            | - |   | 154 |             //unlink( $filename );
 | 
          
            | 135 |          } else {
 | 155 |          } else {
 | 
          
            | 136 |       ?>
 | 156 |       ?>
 | 
          
            | 137 |       <p>Upload a CSV file to be bulk imported into the license table</p>
 | 157 |       <p align\'center'>Upload a CSV file to be bulk imported into the license table</p>
 | 
          
            | 138 |       <p><b>Warning:</b> no error checking is done, ensure your file meets the proper specifications</p>
 | 158 |       <p><b>Warning:</b> no error checking is done, ensure your file meets the proper specifications. The fields may be separated by</p>
 | 
          
            | - |   | 159 |       <ul>
 | 
          
            | - |   | 160 |          <li>comma</li>
 | 
          
            | - |   | 161 |          <li>semicolon</li>
 | 
          
            | - |   | 162 |          <li>tab</li>
 | 
          
            | - |   | 163 |          <li>pipe</li>
 | 
          
            | - |   | 164 |          <li>colon</li>
 | 
          
            | - |   | 165 |       </ul>
 | 
          
            | - |   | 166 |       <p>The first line should be a header, containing the following in any order. All other fields will be ignored</p>
 | 
          
            | - |   | 167 |       <ul>
 | 
          
            | - |   | 168 |          <li>client</li>
 | 
          
            | - |   | 169 |          <li>device</li>
 | 
          
            | - |   | 170 |          <li>license_product</li>
 | 
          
            | - |   | 171 |          <li>license</li>
 | 
          
            | - |   | 172 |       </ul>
 | 
          
            | - |   | 173 |       <p><b>Warning!</b> Client, Machine and Product name must be exactly as already stored.</p>
 | 
          
            | - |   | 174 |       <p>License is case sensitive</p>
 | 
          
            | 139 |       <form action="upload.php" method="post" enctype="multipart/form-data">
 | 175 |       <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data">
 | 
          
            | - |   | 176 |          <table border='1'>
 | 
          
            | - |   | 177 |             <tr>
 | 
          
            | - |   | 178 |                <td>Set Machine to Null if not found</td>
 | 
          
            | - |   | 179 |                <td> <input type="checkbox" name="notfoundisnull" value="notfoundisnull"></td>
 | 
          
            | - |   | 180 |             </tr>
 | 
          
            | - |   | 181 |             <tr>
 | 
          
            | 140 |           Select CSV to upload:
 | 182 |                <td>Select CSV to upload</td>
 | 
          
            | 141 |           <input type="file" name="fileToUpload" id="fileToUpload">
 | 183 |                <td><input type="file" name="fileToUpload" id="fileToUpload"></td>
 | 
          
            | - |   | 184 |             </tr>
 | 
          
            | - |   | 185 |             <tr>
 | 
          
            | - |   | 186 |                <td>Field Delimiters</td>
 | 
          
            | - |   | 187 |                <td>
 | 
          
            | - |   | 188 |                   <select name='delimiter' id='delimiter'>
 | 
          
            | - |   | 189 |                      <option value='auto' selected>Auto Detect</option>
 | 
          
            | - |   | 190 |                      <option value='tab'>Tab</option>
 | 
          
            | - |   | 191 |                      <option value=','>Comma (,)</option>
 | 
          
            | - |   | 192 |                      <option value=';'>Semicolon (;)</option>
 | 
          
            | - |   | 193 |                      <option value='|'>Pipe (|)</option>
 | 
          
            | - |   | 194 |                      <option value=':'>Colon (:)</option>
 | 
          
            | - |   | 195 |                   </select>
 | 
          
            | - |   | 196 |  
 | 
          
            | - |   | 197 |                </td>
 | 
          
            | - |   | 198 |             </tr>
 | 
          
            | - |   | 199 |             <tr>
 | 
          
            | - |   | 200 |                <td>Encapsulation</td>
 | 
          
            | - |   | 201 |                <td>
 | 
          
            | - |   | 202 |                   <select name='encapsulation' id='encapsulation'>
 | 
          
            | - |   | 203 |                      <option value='auto' selected>Auto Detect</option>
 | 
          
            | - |   | 204 |                      <option value=''>None</option>
 | 
          
            | - |   | 205 |                      <option value='"'>Double Quotes (")</option>
 | 
          
            | - |   | 206 |                      <option value="'">Single Quotes (')</option>
 | 
          
            | - |   | 207 |                      <option value='~'>Tilde (~)</option>
 | 
          
            | - |   | 208 |                   </select>
 | 
          
            | - |   | 209 |                </td>
 | 
          
            | - |   | 210 |             </tr>
 | 
          
            | - |   | 211 |             <tr>
 | 
          
            | - |   | 212 |                <td>Escape Char</td>
 | 
          
            | - |   | 213 |                <td>
 | 
          
            | - |   | 214 |                   <select name='escape' id='escape'>
 | 
          
            | - |   | 215 |                      <option value='' selected>None</option>
 | 
          
            | - |   | 216 |                      <option value='\'>Backslash (\)</option>
 | 
          
            | - |   | 217 |                   </select>
 | 
          
            | - |   | 218 |                </td>
 | 
          
            | - |   | 219 |             </tr>
 | 
          
            | - |   | 220 |             <tr>
 | 
          
            | 142 |           <input type="submit" value="Upload CSV" name="submit">
 | 221 |                <td colspan='2' align='center'><input type="submit" value="Upload CSV" name="submit"></td>
 | 
          
            | - |   | 222 |             </tr>
 | 
          
            | - |   | 223 |           </table>
 | 
          
            | 143 |       </form>
 | 224 |       </form>
 | 
          
            | - |   | 225 |       <p>It is generally safe to leave Encapsulation and Escape at their defaults</p>
 | 
          
            | 144 |       <?php } ?>
 | 226 |       <?php } ?>
 | 
          
            | 145 |       </div>
 | 227 |       </div>
 | 
          
            | 146 |    </body>
 | 228 |    </body>
 | 
          
            | 147 | </html>
 | 229 | </html>
 |