Kaynağa Gözat

many updates and fixes

Jad Meouchy 9 yıl önce
ebeveyn
işleme
cee3dfd607

+ 3 - 3
cron/filescanner.php

@@ -288,9 +288,9 @@ function processFile($full_path, $id_company)
 			
 			$params[':dispatch_reference'] = $row[35];
 			
-			$params[':ctns'] = $row[44];
-			$params[':weight'] = $row[45];
-			$params[':cube'] = $row[46];
+			$params[':ctns'] = doubleval($row[44]);
+			$params[':weight'] = doubleval($row[45]);
+			$params[':cube'] = doubleval($row[46]);
 
 				
 			try

+ 44 - 6
db.php

@@ -2,8 +2,21 @@
 
 require('config.inc.php');
 
-$dbh = new PDO('mysql:host=localhost;dbname=sdpickup', DB_USER, DB_PASS);
-$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
+$dbh = null;
+
+try
+{
+	$dbh = new PDO('mysql:host=localhost;dbname=sdpickup', DB_USER, DB_PASS);
+	$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
+}
+catch(Exception $e)
+{
+	error_log(print_r($e, true));
+	
+	http_response_code(500);
+	echo "unable to connect to DB\n";
+	die;
+}
 
 
 function getCompanies()
@@ -13,9 +26,9 @@ function getCompanies()
 	$stmt = $dbh->prepare(
 		"SELECT id_company, name, ftp_directory, description
 		FROM company");
-								
+	
 	$stmt->execute();
-
+	
 	$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
 	
 	return $rows;
@@ -32,7 +45,7 @@ function getCompanyDirectories()
 	return $rows;
 }
 
-function getCompanyData($id_company)
+function getRowsByCompany($id_company)
 {
 	global $dbh;
 	
@@ -75,7 +88,8 @@ function getCompanyData($id_company)
 
 		FROM file_row
 		INNER JOIN file USING(id_file)
-		WHERE id_company = :id_company");
+		WHERE id_company = :id_company
+		LIMIT 5000");
 								
 	$stmt->execute(array(':id_company' => $id_company));
 
@@ -84,4 +98,28 @@ function getCompanyData($id_company)
 	return $rows;
 }
 
+function getRowUpdatesByComapny($id_company)
+{
+	global $dbh;
+	
+	$stmt = $dbh->prepare(
+		"SELECT DATE_FORMAT(date_modified, '%m/%d/%Y %h:%i %p') date_modified,
+				user.id_user id_user, user.name user_name, id_file_row,
+				DATE_FORMAT(time_pickup, '%m/%d/%Y %h:%i %p') time_pickup,
+				DATE_FORMAT(time_depart, '%m/%d/%Y %h:%i %p') time_depart,
+				DATE_FORMAT(bol_delivered, '%m/%d/%Y %h:%i %p') bol_delivered
+		FROM file_row_update
+		INNER JOIN user USING(id_user)
+		WHERE id_company = :id_company
+		ORDER BY date_created DESC
+		LIMIT 200");
+	
+	$stmt->execute(array(':id_company' => $id_company));
+
+	$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+	
+	return $rows;
+}
+
+
 ?>

+ 1 - 1
www/api/auth-validate.php

@@ -2,7 +2,7 @@
 
 @session_start();
 
-if(!$_SESSION['id_user'])
+if(!isset($_SESSION['id_user']) || !$_SESSION['id_user'])
 {
 	http_response_code(401);
 	return;

+ 0 - 0
www/api/updateCell.php → www/api/createRowUpdate.php


+ 24 - 0
www/api/getRowUpdatesByCompany.php

@@ -0,0 +1,24 @@
+<?php
+
+require('auth-validate.php');
+require('../../db.php');
+
+
+header('Content-Type: application/json');
+
+
+$id_company = isset($_REQUEST['id']) ? $_REQUEST['id'] : null;
+
+if(!$id_company)
+{
+	http_response_code(400);
+	echo 'missing parameter: id';
+	return;
+}
+
+
+$rows = getUpdatesByCompany($id_company);
+
+echo json_encode($rows, JSON_PRETTY_PRINT);
+
+?>

+ 5 - 1
www/api/getAllData.php → www/api/getRows.php

@@ -10,7 +10,11 @@ header('Content-Type: application/json');
 $companies = getCompanies();
 
 for($c = 0; $c < count($companies); $c++)
-	$companies[$c]['file_rows'] = getCompanyData($companies[$c]['id_company']);
+{
+	$companies[$c]['file_rows'] = getRowsByCompany($companies[$c]['id_company']);
+	
+	$companies[$c]['row_updates'] = getRowUpdatesByComapny($companies[$c]['id_company']);
+}
 
 echo json_encode($companies, JSON_PRETTY_PRINT);
 

+ 1 - 1
www/api/getCompanyData.php → www/api/getRowsByCompany.php

@@ -17,7 +17,7 @@ if(!$id_company)
 }
 
 
-$rows = getCompanyData($id_company);
+$rows = getRowsByCompany($id_company);
 
 echo json_encode($rows, JSON_PRETTY_PRINT);
 

+ 54 - 0
www/api/updateUserPassword.php

@@ -0,0 +1,54 @@
+<?php
+
+include 'auth-validate.php';
+include '../../db.php';
+
+@session_start();
+
+
+//pull auth parameters
+$password_old = isset($_REQUEST['password_old']) ? $_REQUEST['password_old'] : null;
+$password_new = isset($_REQUEST['password_new']) ? $_REQUEST['password_new'] : null;
+
+
+//make sure parameters are present
+if(!$password_old || !$password_new)
+{
+	http_response_code(400);
+	echo 'password missing';
+	return;
+}
+
+//pull info on user from database
+$stmt_file = $dbh->prepare("SELECT password FROM user WHERE id_user=:id_user");
+$stmt_file->bindValue(':id_user', $_SESSION['id_user']);
+$stmt_file->execute();
+$rows = $stmt_file->fetchAll(PDO::FETCH_ASSOC);
+
+//check if user missing
+if(!count($rows))
+{
+	http_response_code(404);
+	echo 'user not found';
+	return;
+}
+
+//validate password entered
+if(!password_verify($password_old, $rows[0]['password']))
+{
+	http_response_code(403);
+	echo 'invalid old password';
+	return;
+}
+
+
+$stmt_file = $dbh->prepare("UPDATE user SET password = :password WHERE id_user = :id_user");
+$stmt_file->bindValue(':id_user', $_SESSION['id_user']);
+$stmt_file->bindValue(':password', password_hash($password_new));
+$stmt_file->execute();
+$rows = $stmt_file->fetchAll(PDO::FETCH_ASSOC);
+
+
+echo 'OK';
+
+?>

+ 23 - 0
www/css/sd.css

@@ -16,4 +16,27 @@
 .container
 {
 	width: 95%;
+}
+
+#login-error
+{
+	color: red;
+	font-weight: bold;
+	
+	text-align: center;
+	
+	margin-top: 1em;
+}
+
+.tab-content .dataTables_wrapper
+{
+	padding-top: 2em;
+	padding-bottom: 2em;
+	
+	border-bottom: 1px solid #f0f0f0;
+}
+
+.tab-content .dataTables_wrapper:first-child
+{
+	padding-top: 0;
 }

+ 3 - 0
www/html/screen/login.html

@@ -8,6 +8,7 @@
 			
 			<label for="email" class="sr-only">Email address</label>
 			<input type="email" id="email" class="form-control" placeholder="Email address" required autofocus>
+			
 			<label for="password" class="sr-only">Password</label>
 			<input type="password" id="password" class="form-control" placeholder="Password" required>
 			
@@ -20,6 +21,8 @@
 			</div>
 			-->
 			<button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
+			
+			<div id="login-error"></div>
 		</form>
 	</div>
 </div>

+ 7 - 2
www/js/init.js

@@ -10,15 +10,15 @@ var user;
 function loadApp()
 {
 	initializeRoutes();
+
 	
 	if(!user)
-		router('#/login');
+		router('/');
 	else
 		router.reload();
 
 	//login and logout
 	$('form.form-signin').submit(login);
-	//$('#logout').click(logout);
 	
 	//when a bootstrap tab is shown, then trigger a redraw of its table
 	$('#screen-sd').delegate('a[data-toggle="tab"]', 'shown.bs.tab', function(e)
@@ -33,6 +33,9 @@ function login(e)
 {
 	e.preventDefault();
 	
+	$('#login-error').text(null);
+	
+	
 	$.post('api/login.php',
 	{
 		'email': $('#email').val(),
@@ -48,6 +51,8 @@ function login(e)
 	.fail(function(err, xhr, text)
 	{
 		console.error(err.responseText);
+		
+		$('#login-error').text(err.responseText);
 	});
 	
 	return false;

+ 38 - 6
www/js/routes.js

@@ -1,4 +1,5 @@
 var tables = [];
+var table_updates = [];
 var editors = [];
 var rows = {};
 
@@ -9,6 +10,7 @@ function initializeRoutes()
 	router('/logout',		routes['logout']);
 	router('/sd',			routes['sd']);
 	
+	router('/',				routes['login']);
 	router('*',				routes['login']);
 }
 
@@ -26,9 +28,7 @@ var routes =
 	logout: function()
 	{
 		$.post('api/logout.php');
-		
-		showPage('login');
-		
+
 		router('/');
 	},
 	
@@ -76,7 +76,7 @@ function showPage(page)
 
 function loadAllData()
 {
-	$.post('api/getAllData.php', 'json')
+	$.post('api/getRows.php', 'json')
 	.done(function(companies)
 	{
 		//go through each company and add a tab if one isn't present
@@ -109,11 +109,13 @@ function loadAllData()
 				//add table
 				$('<div id="table-' + id_company + '-container" class="tab-pane fade in">'
 					+ '<table id="table-' + id_company + '" class="table table-striped editable" width="100%"></table>'
+					+ '<table id="table-updates-' + id_company + '" class="table table-striped editable" width="100%"></table>'
 				+ '</div>')
 				.appendTo('#screen-sd .tab-content');
 
 				//create the datatable
 				tables[id_company] = createTable(id_company, '#screen-sd #table-' + id_company);
+				table_updates[id_company] = createUpdatesTable(id_company, '#screen-sd #table-updates-' + id_company);
 			}
 			else
 			{
@@ -122,6 +124,8 @@ function loadAllData()
 			
 			//load the data into the data
 			tables[id_company].rows.add(company['file_rows']).draw();
+			
+			table_updates[id_company].rows.add(company['row_updates']).draw();
 		}
 		
 		if($('#screen-sd ul.nav-tabs > li.active').length === 0)
@@ -184,7 +188,7 @@ function createTable(id_company, table_dom)
 		'language':
 		{
 			'search': '',
-			'searchPlaceholder': "Search"
+			'searchPlaceholder': "Search Active"
 		},
 		'deferRender': true,
 		'lengthChange': false,
@@ -241,7 +245,7 @@ function createTable(id_company, table_dom)
 
 				
 				//send the update up to the server thru api
-				$.post('api/updateCell.php?id_file_row=' + id_file_row, row_partial)
+				$.post('api/CreateRowUpdate.php?id_file_row=' + id_file_row, row_partial)
 					.done(function(response)
 					{
 						console.log(response);
@@ -280,5 +284,33 @@ function createTable(id_company, table_dom)
 	});
 	*/
 	
+	return table;
+}
+
+
+function createUpdatesTable(id_company, table_dom)
+{
+	var table = $(table_dom).DataTable(
+	{
+		'data': [],
+		'order': [[0, 'date_modified']],
+		'columns':
+		[
+			{ 'title': 'Date', 'data': 'date_modified', 'defaultContent': '&nbsp;', 'className': 'date_modified' },
+			{ 'title': 'User', 'data': 'user_name', 'defaultContent': '&nbsp;', 'className': 'user_name' },
+			
+			{ 'title': 'Pickup&nbsp;Time', 'data': 'time_pickup', 'defaultContent': '&nbsp;', 'className': 'time_pickup' },
+			{ 'title': 'Depart&nbsp;Time', 'data': 'time_depart', 'defaultContent': '&nbsp;', 'className': 'time_depart' },
+			{ 'title': 'BOL&nbsp;Delivered', 'data': 'bol_delivered', 'defaultContent': '&nbsp;', 'className': 'bol_delivered' }
+		],
+		'language':
+		{
+			'search': '',
+			'searchPlaceholder': "Search Updates"
+		},
+		'deferRender': true,
+		'lengthChange': false
+	});
+	
 	return table;
 }