| Server IP : 85.158.181.41 / Your IP : 216.73.217.12 Web Server : Apache System : Linux cloud9-vm129 6.1.178+1-ph #ph SMP PREEMPT_DYNAMIC Wed Jul 29 09:00:54 UTC 2026 x86_64 User : moncbefd ( 1024) PHP Version : 7.3.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/moncbefd/www.moneta.at/system/classes/properties/ |
Upload File : |
<?php
/* --------------------------------------------------------------
PropertiesCombisAdminAjaxHandler.inc.php 2017-12-18
Gambio GmbH
http://www.gambio.de
Copyright (c) 2017 Gambio GmbH
Released under the GNU General Public License (Version 2)
[http://www.gnu.org/licenses/gpl-2.0.html]
--------------------------------------------------------------
*/
require_once(DIR_FS_CATALOG . 'gm/classes/JSON.php');
class PropertiesCombisAdminAjaxHandler extends AjaxHandler
{
protected $languageTextManager;
function get_permission_status($p_customers_id=NULL)
{
if($_SESSION['customers_status']['customers_status_id'] === '0')
{
#admins only
return $this->_checkAdminReadingPermission('PropertiesCombisAdmin', !empty($p_customers_id) ? $p_customers_id : $_SESSION['customer_id']);
}
return false;
}
function proceed()
{
$this->languageTextManager = MainFactory::create_object('LanguageTextManager', array('combis', $_SESSION['languages_id']));
$t_output_array = array();
$t_enable_json_output = true;
$t_action_request = $this->v_data_array['GET']['action'];
switch($t_action_request)
{
case 'load':
$t_enable_json_output = false;
$coo_properties_combis_admin_view = MainFactory::create_object('PropertiesCombisAdminContentView');
$this->v_output_buffer = $coo_properties_combis_admin_view->get_html($this->v_data_array['GET']);
break;
case 'save':
$coo_properties_combis_admin_control = MainFactory::create_object('PropertiesCombisAdminControl');
switch($this->v_data_array['GET']['type'])
{
case 'combis':
$t_output_array = $coo_properties_combis_admin_control->save_combis($this->v_data_array['POST'], true, PRICE_IS_BRUTTO === 'true');
if(!$t_output_array['combis_exists'])
{
$coo_data_agent = MainFactory::create_object('PropertiesDataAgent');
$coo_data_agent->rebuild_properties_index($this->v_data_array['POST']['products_id']);
}
break;
case 'combis_settings':
$t_output_array['status'] = $coo_properties_combis_admin_control->save_combis_settings($this->v_data_array['POST']);
break;
case 'combis_defaults':
$t_output_array = $coo_properties_combis_admin_control->save_combis_defaults($this->v_data_array['POST']);
break;
case 'admin_select':
$t_output_array = $coo_properties_combis_admin_control->save_admin_select($this->v_data_array['POST']['products_id'], $this->v_data_array['POST']['properties_values_ids_array']);
break;
default:
$t_enable_json_output = false;
trigger_error('unknown delete_type: '. $this->v_data_array['GET']['type'], E_USER_ERROR);
}
break;
case 'delete':
$coo_properties_combis_admin_control = MainFactory::create_object('PropertiesCombisAdminControl');
switch($this->v_data_array['GET']['type'])
{
case 'selected':
case 'combis':
$t_output_array = ['action' => 'delete no combi'];
if(is_array($this->v_data_array['POST']['properties_combis_id_array'])
&& count($this->v_data_array['POST']['properties_combis_id_array']) > 0)
{
$t_output_array = $coo_properties_combis_admin_control->delete_combis(array_filter($this->v_data_array['POST']['properties_combis_id_array'],
function ($value) {
return $value !== '';
}));
}
break;
case 'all':
$t_output_array = $coo_properties_combis_admin_control->delete_all_combis($this->v_data_array['POST']['products_id']);
break;
default:
$t_enable_json_output = false;
trigger_error('unknown delete_type: '. $this->v_data_array['GET']['type'], E_USER_ERROR);
}
break;
case 'run_autobuild':
$t_output_array = $this->run_autobuild($this->v_data_array['POST']);
break;
case 'rebuild_properties_index':
$t_output_array = $this->rebuild_properties_index($this->v_data_array['POST']);
break;
default:
$t_enable_json_output = false;
trigger_error('t_action_request not found: '. htmlentities($t_action_request), E_USER_WARNING);
return false;
}
if($t_enable_json_output)
{
$coo_json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
$t_output_json = $coo_json->encode($t_output_array);
$this->v_output_buffer = $t_output_json;
}
return true;
}
public function run_autobuild($p_data_array)
{
$t_return = array();
$t_return['action'] = 'run_autobuild';
$c_properties_values_ids_array = $p_data_array['properties_values_ids_array'];
if(!is_array($c_properties_values_ids_array)) trigger_error('run_autobuild: typeof($p_data_array["properties_values_ids_array"]) != array', E_USER_ERROR);
$coo_control = MainFactory::create_object('PropertiesCombisAdminControl');
# run combi auto_build
$t_last_index = $coo_control->autobuild_combis($p_data_array['products_id'], $_SESSION['languages_id'], $c_properties_values_ids_array, $p_data_array['actual_index']);
$t_combis_count = 1;
// get combis count
foreach($c_properties_values_ids_array AS $properties_key => $properties_values)
{
$t_combis_count = $t_combis_count * count($properties_values);
}
if($t_last_index != 0 && ($t_last_index < $t_combis_count)){
$t_return['job'] = $this->languageTextManager->get_text("generating_combis");
$t_return['progress_text'] = number_format(($t_last_index-1) / $t_combis_count * 100, 1) . '%';
$t_return['progress'] = number_format(($t_last_index-1) / $t_combis_count * 100, 1);
$t_return['combis_last_index'] = $t_last_index;
$t_return['status'] = 'progress';
}
else
{
$t_return['job'] = $this->languageTextManager->get_text("rebuild_properties_index");
$t_return['progress_text'] = '100%';
$t_return['progress'] = 100;
$t_return['status'] = 'success';
}
return $t_return;
}
public function rebuild_properties_index($p_data_array)
{
$c_products_id = $p_data_array['products_id'];
if($c_products_id != (int)$c_products_id) trigger_error('rebuild_properties_index: typeof($p_data_array["products_id"]) != array', E_USER_ERROR);
$t_return = array();
$coo_properties_data_agent = MainFactory::create_object('PropertiesDataAgent');
if($c_products_id == 0)
{
$t_return['action'] = 'rebuild_properties_index (all)';
$t_start_value = (int)$p_data_array['start_value'];
$count_products = 0;
if($t_start_value == 0)
{
$t_sql = 'TRUNCATE products_properties_index';
xtc_db_query($t_sql);
$t_sql = '
SELECT COUNT(*)
FROM products_properties_combis
GROUP BY products_id
';
$t_result = xtc_db_query($t_sql);
$count_products = (int)xtc_db_fetch_array($t_result);
}
$t_sql = '
SELECT products_id
FROM products_properties_combis
GROUP BY products_id
LIMIT '.$t_start_value.', 5
';
$t_result = xtc_db_query($t_sql);
while($t_row = xtc_db_fetch_array($t_result))
{
$coo_properties_data_agent->rebuild_properties_index($t_row['products_id']);
}
if($t_start_value+5 <= $count_products)
{
$t_return['status'] = 'progress';
$t_return['products_next_index'] = $t_start_value+5;
$t_return['count_products'] = $count_products;
}
else
{
$t_return['status'] = 'success';
}
}
else
{
$t_return['action'] = 'rebuild_properties_index (products_id: '.$c_products_id.')';
$t_sql = 'DELETE FROM products_properties_index WHERE products_id = '.$c_products_id;
xtc_db_query($t_sql);
$coo_properties_data_agent->rebuild_properties_index($c_products_id);
$t_return['job'] = $this->languageTextManager->get_text("combis_generated");
$t_return['progress_text'] = "100%";
$t_return['progress'] = 100;
$t_return['status'] = 'success';
}
return $t_return;
}
}