CSV import optimizations and code cleanup (#3150)

Optimizations and CSV Import Rework
- Replaced " with ' where possible to prevent the parser from being called when not needed.
- Replaced == and != with === and !== where possible for bug prevention and speed.
- Replaced -1 with NEW_ITEM global constant for code clarity.
- Added NEW_ITEM global constant to constants.php.
- Refactored CSV import function names for clarity.
- Added capability to import a CSV file containing updates.
- Replaced array() with [] for speed and consistency.
- Removed hungarian notation from two private functions.
- Refactored QueryBuilder functions to place table name in the get() function call.
- Replaced (int) cast with call to intval() for speed.
- Replaced == and != with === and !== where possible to prevent bugs and for speed.
- Replaced array() with [] for speed and consistency.
- Fixed search_custom call

Optimizations and bugfixes for attributes used in csv_import
- Reordered where statements in queries to match composite index on attribute_links table.
- fixed value_exists() to account for different attribute types.
- Removed hungarian notation on private function.
- Replaced array() with [] for speed and consistency.
- Replaced != with <> in SQL for consistency.
- Removed from() calls in querybuilder where possible to reduce function calls.
- Add get_items_by_value()
- Reworked check_data_validity()
- Remove unneeded comments
- Refactor functions for code clarity.
- Use $this->db->dbprefix() where possible instead of hand-writing ospos_...
- Removed unneeded column from query.
- Replaced (int) cast with intval() call for speed.
- Added get_attribute_values()
- Fixed issue with date format locale not being used
- Refactored save_value to respect different attribute_types
- Added delete_orphaned_links() to remove attribute_links that are no longer linked to any items
- Added get_attributes_by_definition()
- Added attribute_cleanup()

Optimizations used in csv_import
- replaced array() with [] for consistency and speed.
- Removed hungarian notation in private functions.
- Replaced " with ' where possible to prevent the parser from being called.
- Minor formatting
- Refactored if statement to tertiary notation for cleaner implementation.
- Replaced " for ' where possible to prevent the parser from being called.
- Added the Id column in the generate_import_items_csv() template so that users can submit an update to an existing item.
- Removed unused key=>value pairs in foreach loops for speed.
- Removed unneeded comments where the function name was self-explanatory.
- Rework get_csv_file() for speed.
- Rework bom_exists() for speed.
- Replaced array() with [] for speed and consistency.
- Replaced == with === where possible to prevent bugs and for speed.
- Reworked valid_date() and valid_decimal helper functions for speed and accuracy according to the locale_format instead of a fixed format.
- Minor Reformatting for clarity.
- Replaced " for ' to prevent the parser from being called.
- Refactored function call names to reflect new names.
- Added missing ; in &nbsp;
- Used String interpolation where useful.

- Spelling fix in comment

Requested Review Changes
- Fixed indentation in Items.php
- Fixed indentation in Attribute.php
- Refactored variable out of long line of code to make it more readable.
This commit is contained in:
objecttothis
2021-06-05 21:46:16 +04:00
committed by jekkos
parent 517635181c
commit 3d65c3fffa
9 changed files with 761 additions and 607 deletions

View File

@@ -1,6 +1,6 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
require_once("Secure_Controller.php");
require_once('Secure_Controller.php');
class Attributes extends Secure_Controller
{
@@ -30,10 +30,10 @@ class Attributes extends Secure_Controller
$attributes = $this->Attribute->search($search, $limit, $offset, $sort, $order);
$total_rows = $this->Attribute->get_found_rows($search);
$data_rows = array();
$data_rows = [];
foreach($attributes->result() as $attribute)
{
$attribute->definition_flags = $this->_get_attributes($attribute->definition_flags);
$attribute->definition_flags = $this->get_attributes($attribute->definition_flags);
$data_rows[] = get_attribute_definition_data_row($attribute, $this);
}
@@ -68,7 +68,7 @@ class Attributes extends Secure_Controller
{
$definition_flags = 0;
$flags = (empty($this->input->post('definition_flags'))) ? array() : $this->input->post('definition_flags');
$flags = (empty($this->input->post('definition_flags'))) ? [] : $this->input->post('definition_flags');
foreach($flags as $flag)
{
@@ -129,15 +129,15 @@ class Attributes extends Secure_Controller
public function get_row($row_id)
{
$attribute_definition_info = $this->Attribute->get_info($row_id);
$attribute_definition_info->definition_flags = $this->_get_attributes($attribute_definition_info->definition_flags);
$attribute_definition_info->definition_flags = $this->get_attributes($attribute_definition_info->definition_flags);
$data_row = $this->xss_clean(get_attribute_definition_data_row($attribute_definition_info));
echo json_encode($data_row);
}
private function _get_attributes($definition_flags = 0)
private function get_attributes($definition_flags = 0)
{
$definition_flag_names = array();
$definition_flag_names = [];
foreach (Attribute::get_definition_flags() as $id => $term)
{
if ($id & $definition_flags)
@@ -163,11 +163,11 @@ class Attributes extends Secure_Controller
$data['definition_info'] = $info;
$show_all = Attribute::SHOW_IN_ITEMS | Attribute::SHOW_IN_RECEIVINGS | Attribute::SHOW_IN_SALES;
$data['definition_flags'] = $this->_get_attributes($show_all);
$data['definition_flags'] = $this->get_attributes($show_all);
$selected_flags = $info->definition_flags === '' ? $show_all : $info->definition_flags;
$data['selected_definition_flags'] = $this->_get_attributes($selected_flags);
$data['selected_definition_flags'] = $this->get_attributes($selected_flags);
$this->load->view("attributes/form", $data);
$this->load->view('attributes/form', $data);
}
public function delete_value($attribute_id)