* @link http://www.tassos.gr * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved * @license GNU GPLv3 or later */ namespace NRFramework\Conditions; use NRFramework\Assignments; defined('_JEXEC') or die; class Migrator { /** * Migrate old Assignments data to the new Condition Builder object. * * @since 5.0.1 * * @param object $box * * @return void */ public static function run(&$params) { if ($params->get('mirror') == '1') { $params->set('display_conditions_type', 'mirror'); return; } $assignmentsClass = new Assignments(); $matching_method_map = [ 'and' => 'all', 'or' => 'any' ]; $rules = [ 0 => [ 'matching_method' => $matching_method_map[$params->get('assignmentMatchingMethod', 'and')], 'enabled' => 1, 'rules' => [] ] ]; foreach ($params as $paramKey => $paramValue) { if (strpos($paramKey, 'assign_') !== 0) { continue; } $oldName = str_replace('assign_', '', $paramKey); $newName = $assignmentsClass->aliasToClassname($oldName); // Skip unknown conditions if (!$newName) { continue; } // Skip disabled conditions if ($paramValue == '0') { continue; } // Date assignment doesn't use the value property if ($newName == 'Date\Date') { $params->set($paramKey . '_list', true); $publish_up = $params->get('assign_'. $oldName .'_param_publish_up'); $publish_down = $params->get('assign_'. $oldName .'_param_publish_down'); \NRFramework\Functions::fixDateOffset($publish_up); \NRFramework\Functions::fixDateOffset($publish_down); $params->set('assign_'. $oldName .'_param_publish_up', $publish_up); $params->set('assign_'. $oldName .'_param_publish_down', $publish_down); } // Date assignment doesn't use the value property if ($newName == 'Date\Time') { $params->set($paramKey . '_list', true); } // Skip conditions with no value if (!$value = $params->get($paramKey . '_list')) { continue; } $operator = $paramValue == '1' ? 'includes' : 'not_includes'; // These Conditions have custom operators if (in_array($newName, ['Date\Date', 'Date\Time'])) { $operator = $paramValue == '1' ? 'equal' : 'not_equal'; } if ($newName == 'Cookie') { $operatorMap = [ 'exists' => 'exists', 'not_exists' => 'not_exists', 'equal' => 'equal', 'not_equal' => 'not_equal', 'contains' => 'includes', 'not_contains' => 'not_includes', 'starts' => 'starts_with', 'not_start' => 'not_starts_with', 'ends' => 'ends_with', 'not_end' => 'not_ends_with', ]; if ($paramValue == '2') { switch ($value) { case 'exists': $value = 'not_exists'; break; case 'equal': $value = 'not_equal'; break; case 'contains': $value = 'not_contains'; break; case 'starts': $value = 'not_start'; break; case 'ends': $value = 'not_end'; break; } } $operator = $operatorMap[$value]; $params->set('assign_cookiename_param_operator', $operator); $value = $params->get('assign_cookiename_param_name'); } if ($newName == 'Pageviews') { $operatorMap = [ 'exactly' => 'equal', 'not_equal' => 'not_equal', 'fewer' => 'less_than', 'greater' => 'greater_than', ]; if ($paramValue == '2') { switch ($value) { case 'exactly': $value = 'not_equal'; break; case 'fewer': $value = 'greater'; break; case 'greater': $value = 'fewer'; break; } } $operator = $operatorMap[$value]; $value = $params->get('assign_pageviews_param_views'); } $data = [ 'name' => $newName, 'enabled' => 1, 'operator' => $operator, 'value' => $value ]; // Find params foreach ($params as $assignParamKey => $assignParamValue) { if (strpos($assignParamKey, $paramKey . '_param') !== 0) { continue; } if ($assignParamValue == '') { continue; } $realParamName = str_replace($paramKey . '_param_', '', $assignParamKey); $data['params'][$realParamName] = $assignParamValue; } $rules[0]['rules'][] = $data; } if (!empty($rules[0]['rules'])) { // Finally, set the rules $params->set('display_conditions_type', 'custom'); $params->set('rules', $rules); } } }