MichaelEZ Posted July 22, 2021 Posted July 22, 2021 Simple and fast - Create file order_status.php: <?php $allow = array("192.168.0.1", "192.168.0.2", "192.168.0.3"); //allowed IPs if(!in_array($_SERVER['REMOTE_ADDR'], $allow) && !in_array($_SERVER["HTTP_X_FORWARDED_FOR"], $allow)) { header("Location: http://youraddress.com"); //redirect exit(); } require(dirname(__FILE__).'/config/config.inc.php'); if(isset($_GET['data'])){ $name = $_GET['data']; $new_order_state = 34; $get_orders = array(); array_push($get_orders,$name); foreach ($get_orders as $orders) { $order = new Order($orders); $_state = (int) $order->current_state; if ($_state == $new_order_state) {Continue;} elseif ($_state == 33 ) { $history = new OrderHistory(); $history->id_order = (int)$order->id; $history->changeIdOrderState((int) $new_order_state, $order->id); if ($history->save()) {echo '<div class="ok-status"> OK - '.$orders.' </div><br />';} else {echo '<div class="nok-status"> Error - '.$orders.' </div><br />';} } } } else { $name = "Empty"; } ?> <style> .ok-status { font-weight: 600; font-size: 50px; line-height: 60px; color: green; } .nok-status { font-weight: 600; font-size: 50px; line-height: 60px; color: red; } .send-input { height: 65px; width: 300px; font-weight: 600; font-size: 50px; line-height: 60px; } .send-button { height: 65px; width: 150px; font-weight: 600; font-size: 50px; line-height: 60px; background-color: #0093d4;} </style> <?php echo "<form method='get' name='form' action='order_status.php'> <input type='text' placeholder='ID ...' id='focus' class='send-input' maxlength='6' minlength='6' name='data'> <input type='submit' class='send-button' value='OK'> </form>"; ?> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script> <script> $(document).ready(function(){ $('#focus').focus(); }); $("body").click(function(){ $('#focus').focus(); }); </script> <? On top u can allow access only to your IP. So $new_order_state = 34; ( here u set up new state with id, u can look it up in backend - orders - statuses ), next u can edit this part: elseif ($_state == 33 ) ( so for me it means it wont update state to 34 if original state wasnt 33 u can change it by yourself - for example: elseif ($_state != 33 ) means it update every order but with state 33 and so on.. ) Style - customize as u wish Form part, u can also carefully edit it by yourself, we have orders with id 160000+ so i set up max a min length to 6 characters. (action calls to itself so same as we named our file - order_status.php ) Next we call jquery and few simple lines to autofocus input after realod and by clicking on body. Save file and upload it to root of yr TB - to access script just type /order_status.php after yr domain. (we use iframe in prestato display it on dashboard and etc ) We use barcode scanner to scan id from invoice, then u dont have to type, u just scan, scan, scan,... Thats it 😉 I do recomment testing it on your demo / test first.. 1 2
wakabayashi Posted July 22, 2021 Posted July 22, 2021 Thanks a lot for your contribution! 😎 I always love to see, when other merchants are improving things with custom code 👍 We have very similair functions as we also work with barcode scanners. I have not tested your code, but I would strongly recommend you, to add it as ModuleAdminController and not with such an external file. By that you gain already security as it will be only available if the user is logged in. Codewise this looks a bit unsecure on overcomplicate to me. $name = $_GET['data']; $new_order_state = 34; $get_orders = array(); array_push($get_orders,$name); foreach ($get_orders as $orders) { } As far as I understand, you scan one code after another. If this is true, you wouldn't need any foreach loop. You could then very simply to this: $id_order = (int)$_GET['data']; // Note the (int) does improve security $order = new \Order($id_order) // Continue with your stuff Maybe this helps you a little bit 😊 2 1
MichaelEZ Posted July 23, 2021 Author Posted July 23, 2021 Hi, ty and those are just minor tweaks that make our live here easier. Well before it was used to change lots of them at once hence that code, but thank you, gona update it and add ModuleAdminController as u recommended 😉 1
datakick Posted July 23, 2021 Posted July 23, 2021 3 hours ago, MichaelEZ said: add ModuleAdminController as u recommended that's indeed a very good idea, as it offers much better protection than the IP address check. It also ensures that the employee context is properly initialized -- that's important for logging, error handling, etc. And since you extract the logic to the admin controller, you can also wrap it all into a small useful module and offer it to the community 🙂 2 1
30knees Posted July 23, 2021 Posted July 23, 2021 Yes, wrapping it in a module would be awesome. 🙂 Happy to help test the module.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now