Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

ArkNorm

Новичок
  
  • Публикаций

    4
  • Зарегистрирован

  • Посеещёние

Посетители профиля

Блок последних посетителей выключен и не отображается другим пользователям.

Достижения ArkNorm

Apprentice

Apprentice (3/14)

  • Dedicated Редкая
  • Conversation Starter
  • One Month Later
  • First Post
  • Week One Done

Последние медали

0

Репуиция

  1. Вот код страницы modification.php: <?php /** * Modifcation XML Documentation can be found here: * * https://github.com/opencart/opencart/wiki/Modification-System */ class ControllerMarketplaceModification extends Controller { private $error = array(); public function index() { $this->load->model('extension/module/modification_manager'); $this->model_extension_module_modification_manager->install(); $this->load->language('marketplace/modification'); $this->document->setTitle($this->language->get('heading_title')); $this->load->model('setting/modification'); $this->getList(); } public function edit() { $this->load->language('marketplace/modification'); $this->document->setTitle($this->language->get('heading_title')); $this->load->model('setting/modification'); if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validateForm()) { $this->load->model('extension/module/modification_manager'); $modification = $this->model_extension_module_modification_manager->getModification($this->request->get['modification_id']); if ($modification) { $this->load->model('extension/module/modification_manager'); $this->model_extension_module_modification_manager->addModificationBackup($this->request->get['modification_id'], $modification); } $this->load->model('extension/module/modification_manager'); $this->model_extension_module_modification_manager->editModification($this->request->get['modification_id'], $this->request->post); $this->session->data['success'] = $this->language->get('text_success'); $url = ''; if (isset($this->request->get['sort'])) { $url .= '&sort=' . $this->request->get['sort']; } if (isset($this->request->get['order'])) { $url .= '&order=' . $this->request->get['order']; } if (isset($this->request->get['page'])) { $url .= '&page=' . $this->request->get['page']; } if (!isset($this->request->get['update'])) { $this->response->redirect($this->url->link('marketplace/modification', 'user_token=' . $this->session->data['user_token'] . $url, true)); } else { $this->refresh(); $this->response->redirect($this->url->link('marketplace/modification/edit', 'user_token=' . $this->session->data['user_token'] . '&modification_id=' . $this->request->get['modification_id'] . $url, true)); } } $this->getForm(); } public function restore() { $this->load->language('marketplace/extension'); $this->document->setTitle($this->language->get('heading_title')); $this->load->model('setting/modification'); if (isset($this->request->get['modification_id']) AND isset($this->request->get['backup_id'])) { $this->load->model('extension/module/modification_manager'); $backup = $this->model_extension_module_modification_manager->getModificationBackup($this->request->get['modification_id'],$this->request->get['backup_id']); $url = ''; if ($backup) { $this->load->model('extension/module/modification_manager'); $this->model_extension_module_modification_manager->setModificationRestore($this->request->get['modification_id'], $backup['xml']); $this->refresh(); $this->response->redirect($this->url->link('marketplace/modification/edit', 'user_token=' . $this->session->data['user_token'] . '&modification_id=' . $this->request->get['modification_id'] . $url, true)); } else { $this->response->redirect($this->url->link('marketplace/modification/edit', 'user_token=' . $this->session->data['user_token'] . '&modification_id=' . $this->request->get['modification_id'] . $url, true)); } } $this->getForm(); } public function clearHistory() { // Check user has permission if (!$this->user->hasPermission('modify', 'marketplace/modification')) { $json['error'] = $this->language->get('error_permission'); } $this->load->model('setting/modification'); $this->load->model('extension/module/modification_manager'); $this->model_extension_module_modification_manager->deleteModificationBackups($this->request->get['modification_id']); $this->response->redirect($this->url->link('marketplace/modification/edit', 'user_token=' . $this->session->data['user_token'] . '&modification_id=' . $this->request->get['modification_id'], true)); } public function download() { $this->load->model('setting/modification'); $this->load->model('extension/module/modification_manager'); $modification = $this->model_extension_module_modification_manager->getModification($this->request->get['modification_id']); if ($modification) { $xml = $modification['xml']; } else { $xml = ''; } $this->response->addHeader('Content-Type: application/xml'); $this->response->setOutput($xml); } public function upload() { $this->load->language('marketplace/installer'); $json = array(); // Check user has permission if (!$this->user->hasPermission('modify', 'marketplace/modification')) { $json['error'] = $this->language->get('error_permission'); } $this->load->model('setting/modification'); $this->load->model('extension/module/modification_manager'); $modification = $this->model_extension_module_modification_manager->getModification($this->request->get['modification_id']); if (!$json) { if (!empty($this->request->files['file']['name'])) { if (!$this->request->files['file']['name'] == $modification['code'].".ocmod.xml") { $json['error'] = $this->language->get('error_filetype'); } if ($this->request->files['file']['error'] != UPLOAD_ERR_OK) { $json['error'] = $this->language->get('error_upload_' . $this->request->files['file']['error']); } } else { $json['error'] = $this->language->get('error_upload'); } } if (!$json) { // If no temp directory exists create it $path = 'temp-' . token(32); if (!is_dir(DIR_UPLOAD . $path)) { mkdir(DIR_UPLOAD . $path, 0777); } // Set the steps required for installation $json['step'] = array(); $json['overwrite'] = array(); if (strrchr($this->request->files['file']['name'], '.') == '.xml') { $file = DIR_UPLOAD . $path . '/install.xml'; // If xml file copy it to the temporary directory move_uploaded_file($this->request->files['file']['tmp_name'], $file); if (file_exists($file)) { $json['step'][] = array( 'text' => $this->language->get('text_xml'), 'url' => str_replace('&amp;', '&', $this->url->link('marketplace/modification/xml', 'user_token=' . $this->session->data['user_token']."&modification_id=".$modification['modification_id'], true)), 'path' => $path ); // Clear temporary files $json['step'][] = array( 'text' => $this->language->get('text_remove'), 'url' => str_replace('&amp;', '&', $this->url->link('marketplace/modification/remove', 'user_token=' . $this->session->data['user_token']."&modification_id=".$modification['modification_id'], true)), 'path' => $path ); } else { $json['error'] = $this->language->get('error_file'); } } } $this->response->addHeader('Content-Type: application/json'); $this->response->setOutput(json_encode($json)); } public function xml() { $this->load->language('marketplace/installer'); $this->load->model('setting/modification'); $this->load->model('extension/module/modification_manager'); $modification = $this->model_extension_module_modification_manager->getModification($this->request->get['modification_id']); $json = array(); if (!$this->user->hasPermission('modify', 'marketplace/modification')) { $json['error'] = $this->language->get('error_permission'); } $file = DIR_UPLOAD . $this->request->post['path'] . '/install.xml'; if (!is_file($file) || substr(str_replace('\\', '/', realpath($file)), 0, strlen(DIR_UPLOAD)) != DIR_UPLOAD) { $json['error'] = $this->language->get('error_file'); } if (!$json) { $this->load->model('setting/modification'); // If xml file just put it straight into the DB $xml = file_get_contents($file); if ($xml) { try { $dom = new DOMDocument('1.0', 'UTF-8'); $dom->loadXml($xml); $name = $dom->getElementsByTagName('name')->item(0); if ($name) { $name = $name->nodeValue; } else { $name = ''; } $code = $dom->getElementsByTagName('code')->item(0); if (!$code) { $json['error'] = $this->language->get('error_code'); } $author = $dom->getElementsByTagName('author')->item(0); if ($author) { $author = $author->nodeValue; } else { $author = ''; } $version = $dom->getElementsByTagName('version')->item(0); if ($version) { $version = $version->nodeValue; } else { $version = ''; } $link = $dom->getElementsByTagName('link')->item(0); if ($link) { $link = $link->nodeValue; } else { $link = ''; } $modification_data = array( 'name' => $name, 'code' => $code, 'author' => $author, 'version' => $version, 'link' => $link, 'xml' => $xml, 'status' => 1 ); if (!$json) { $this->load->model('extension/module/modification_manager'); $this->model_extension_module_modification_manager->editModification($modification['modification_id'], $modification_data); } } catch(Exception $exception) { $json['error'] = sprintf($this->language->get('error_exception'), $exception->getCode(), $exception->getMessage(), $exception->getFile(), $exception->getLine()); } } } $this->response->addHeader('Content-Type: application/json'); $this->response->setOutput(json_encode($json)); } public function remove() { $this->load->language('marketplace/modification'); $json = array(); if (!$this->user->hasPermission('modify', 'marketplace/modification')) { $json['error'] = $this->language->get('error_permission'); } $directory = DIR_UPLOAD . $this->request->post['path']; if (!is_dir($directory) || substr(str_replace('\\', '/', realpath($directory)), 0, strlen(DIR_UPLOAD)) != DIR_UPLOAD) { $json['error'] = $this->language->get('error_directory'); } if (!$json) { // Get a list of files ready to upload $files = array(); $path = array($directory); while (count($path) != 0) { $next = array_shift($path); // We have to use scandir function because glob will not pick up dot files. foreach (array_diff(scandir($next), array('.', '..')) as $file) { $file = $next . '/' . $file; if (is_dir($file)) { $path[] = $file; } $files[] = $file; } } rsort($files); foreach ($files as $file) { if (is_file($file)) { unlink($file); } elseif (is_dir($file)) { rmdir($file); } } if (file_exists($directory)) { rmdir($directory); } $json['success'] = $this->language->get('text_success'); } $this->response->addHeader('Content-Type: application/json'); $this->response->setOutput(json_encode($json)); } public function delete() { $this->load->language('marketplace/modification'); $this->document->setTitle($this->language->get('heading_title')); $this->load->model('setting/modification'); if (isset($this->request->post['selected']) && $this->validate()) { foreach ($this->request->post['selected'] as $modification_id) { $this->load->model('extension/module/modification_manager'); $this->model_extension_module_modification_manager->deleteModification($modification_id); $this->load->model('extension/module/modification_manager'); $this->model_extension_module_modification_manager->deleteModificationBackups($modification_id); } $this->session->data['success'] = $this->language->get('text_success'); $url = ''; if (isset($this->request->get['sort'])) { $url .= '&sort=' . $this->request->get['sort']; } if (isset($this->request->get['order'])) { $url .= '&order=' . $this->request->get['order']; } if (isset($this->request->get['page'])) { $url .= '&page=' . $this->request->get['page']; } $this->response->redirect($this->url->link('marketplace/modification', 'user_token=' . $this->session->data['user_token'] . $url, true)); } $this->getList(); } public function refresh($data = array()) { $this->load->language('marketplace/modification'); $this->document->setTitle($this->language->get('heading_title')); $this->load->model('setting/modification'); $this->load->model('design/theme'); if ($this->validate()) { $error_log = array(); // Clear vqmod cache $vqmod_path = substr(DIR_SYSTEM, 0, -7) . 'vqmod/'; if (file_exists($vqmod_path)) { $vqmod_cache = glob($vqmod_path.'vqcache/vq*'); if ($vqmod_cache) { foreach ($vqmod_cache as $file) { if (file_exists($file)) { @unlink($file); } } } if (file_exists($vqmod_path.'mods.cache')) { @unlink($vqmod_path.'mods.cache'); } if (file_exists($vqmod_path.'checked.cache')) { @unlink($vqmod_path.'checked.cache'); } } // Clear log before refresh modifications fclose($handle); $handle = fopen(DIR_LOGS . 'ocmod_error.log', 'w+'); $handle = fopen(DIR_LOGS . 'ocmod.log', 'w+'); fclose($handle); // Just before files are deleted, if config settings say maintenance mode is off then turn it on $maintenance = $this->config->get('config_maintenance'); // Clear logs on refresh $handle = fopen(DIR_LOGS . 'ocmod.log', 'w+'); fclose($handle); $handle = fopen(DIR_LOGS . 'ocmod_error.log', 'w+'); fclose($handle); $this->load->model('setting/setting'); $this->model_setting_setting->editSettingValue('config', 'config_maintenance', true); //Log $log = array(); // Clear all modification files $files = array(); // Make path into an array $path = array(DIR_MODIFICATION . '*'); // While the path array is still populated keep looping through while (count($path) != 0) { $next = array_shift($path); foreach (glob($next) as $file) { // If directory add to path array if (is_dir($file)) { $path[] = $file . '/*'; } // Add the file to the files to be deleted array $files[] = $file; } } // Reverse sort the file array rsort($files); // Clear all modification files foreach ($files as $file) { if ($file != DIR_MODIFICATION . 'index.html') { // If file just delete if (is_file($file)) { unlink($file); // If directory use the remove directory function } elseif (is_dir($file)) { rmdir($file); } } } // Begin $xml = array(); // Load the default modification XML $xml[] = file_get_contents(DIR_SYSTEM . 'modification.xml'); // This is purly for developers so they can run mods directly and have them run without upload after each change. $files = glob(DIR_SYSTEM . '*.ocmod.xml'); if ($files) { foreach ($files as $file) { $xml[] = file_get_contents($file); } } // Get the default modification file $this->load->model('extension/module/modification_manager'); $results = $this->model_extension_module_modification_manager->getModifications(); foreach ($results as $result) { if ($result['status']) { $xml[] = $result['xml']; } } $modification = array(); foreach ($xml as $xml) { if (empty($xml)){ continue; } $dom = new DOMDocument('1.0', 'UTF-8'); $dom->preserveWhiteSpace = false; $dom->loadXml($xml); // Log $log[] = 'MOD: ' . $dom->getElementsByTagName('name')->item(0)->textContent; $error_log_mod = 'MOD: ' . $dom->getElementsByTagName('name')->item(0)->textContent; // Wipe the past modification store in the backup array $recovery = array(); // Set the a recovery of the modification code in case we need to use it if an abort attribute is used. if (isset($modification)) { $recovery = $modification; } if ($this->config->get('config_theme') == 'default') { $theme = $this->config->get('theme_default_directory'); } else { $theme = $this->config->get('config_theme'); } $store_id = (int)$this->config->get('config_store_id'); $files = $dom->getElementsByTagName('modification')->item(0)->getElementsByTagName('file'); foreach ($files as $file) { $operations = $file->getElementsByTagName('operation'); $file_error = $file->getAttribute('error'); $files = explode('|', str_replace("\\", '/', $file->getAttribute('path'))); foreach ($files as $file) { $path = ''; // Get the full path of the files that are going to be used for modification if ((substr($file, 0, 7) == 'catalog')) { $path = DIR_CATALOG . substr($file, 8); } if ((substr($file, 0, 5) == 'admin')) { $path = DIR_APPLICATION . substr($file, 6); } if ((substr($file, 0, 6) == 'system')) { $path = DIR_SYSTEM . substr($file, 7); } if ($path) { $files = glob($path, GLOB_BRACE); if (!$files) { if ($file_error != 'skip') { $error_log[] = '----------------------------------------------------------------'; $error_log[] = $error_log_mod; $error_log[] = 'MISSING FILE!'; $error_log[] = $path; } } if ($files) { foreach ($files as $file) { // Get the key to be used for the modification cache filename. if (substr($file, 0, strlen(DIR_CATALOG)) == DIR_CATALOG) { $key = 'catalog/' . substr($file, strlen(DIR_CATALOG)); } if (substr($file, 0, strlen(DIR_APPLICATION)) == DIR_APPLICATION) { $key = 'admin/' . substr($file, strlen(DIR_APPLICATION)); } if (substr($file, 0, strlen(DIR_SYSTEM)) == DIR_SYSTEM) { $key = 'system/' . substr($file, strlen(DIR_SYSTEM)); } // If file contents is not already in the modification array we need to load it. if (!isset($modification[$key])) { $route = substr(mb_strstr($key, 'template'), 9, -5); $theme_info = $this->model_design_theme->getTheme($store_id, $theme, $route); if ($theme_info) { $content = html_entity_decode($theme_info['code'], ENT_QUOTES, 'UTF-8'); } else { $content = file_get_contents($file); } $modification[$key] = preg_replace('~\r?\n~', "\n", $content); $original[$key] = preg_replace('~\r?\n~', "\n", $content); // Log $log[] = PHP_EOL . 'FILE: ' . $key; } foreach ($operations as $operation) { $error = $operation->getAttribute('error'); // Ignoreif $ignoreif = $operation->getElementsByTagName('ignoreif')->item(0); if ($ignoreif) { if ($ignoreif->getAttribute('regex') != 'true') { if (strpos($modification[$key], $ignoreif->textContent) !== false) { continue; } } else { if (preg_match($ignoreif->textContent, $modification[$key])) { continue; } } } $status = false; // Search and replace if ($operation->getElementsByTagName('search')->item(0)->getAttribute('regex') != 'true') { // Search $search = $operation->getElementsByTagName('search')->item(0)->textContent; $trim = $operation->getElementsByTagName('search')->item(0)->getAttribute('trim'); $index = $operation->getElementsByTagName('search')->item(0)->getAttribute('index'); // Trim line if no trim attribute is set or is set to true. if (!$trim || $trim == 'true') { $search = trim($search); } // Add $add = $operation->getElementsByTagName('add')->item(0)->textContent; $trim = $operation->getElementsByTagName('add')->item(0)->getAttribute('trim'); $position = $operation->getElementsByTagName('add')->item(0)->getAttribute('position'); $offset = $operation->getElementsByTagName('add')->item(0)->getAttribute('offset'); if ($offset == '') { $offset = 0; } // Trim line if is set to true. if ($trim == 'true') { $add = trim($add); } // Log $log[] = 'CODE: ' . $search; // Check if using indexes if ($index !== '') { $indexes = explode(',', $index); } else { $indexes = array(); } // Get all the matches $i = 0; $lines = explode("\n", $modification[$key]); for ($line_id = 0; $line_id < count($lines); $line_id++) { $line = $lines[$line_id]; // Status $match = false; // Check to see if the line matches the search code. if (stripos($line, $search) !== false) { // If indexes are not used then just set the found status to true. if (!$indexes) { $match = true; } elseif (in_array($i, $indexes)) { $match = true; } $i++; } // Now for replacing or adding to the matched elements if ($match) { switch ($position) { default: case 'replace': $new_lines = explode("\n", $add); if ($offset < 0) { array_splice($lines, $line_id + $offset, abs($offset) + 1, array(str_replace($search, $add, $line))); $line_id -= $offset; } else { array_splice($lines, $line_id, $offset + 1, array(str_replace($search, $add, $line))); } break; case 'before': $new_lines = explode("\n", $add); array_splice($lines, $line_id - $offset, 0, $new_lines); $line_id += count($new_lines); break; case 'after': $new_lines = explode("\n", $add); array_splice($lines, ($line_id + 1) + $offset, 0, $new_lines); $line_id += count($new_lines); break; } // Log $log[] = 'LINE: ' . $line_id; $status = true; } } $modification[$key] = implode("\n", $lines); } else { $search = trim($operation->getElementsByTagName('search')->item(0)->textContent); $limit = $operation->getElementsByTagName('search')->item(0)->getAttribute('limit'); $replace = trim($operation->getElementsByTagName('add')->item(0)->textContent); // Limit if (!$limit) { $limit = -1; } // Log $match = array(); preg_match_all($search, $modification[$key], $match, PREG_OFFSET_CAPTURE); // Remove part of the the result if a limit is set. if ($limit > 0) { $match[0] = array_slice($match[0], 0, $limit); } if ($match[0]) { $log[] = 'REGEX: ' . $search; for ($i = 0; $i < count($match[0]); $i++) { $log[] = 'LINE: ' . (substr_count(substr($modification[$key], 0, $match[0][$i][1]), "\n") + 1); } $status = true; } // Make the modification $modification[$key] = preg_replace($search, $replace, $modification[$key], $limit); } if (!$status) { if ($error != 'skip') { $error_log[] = "\n"; $error_log[] = $error_log_mod; $error_log[] = 'NOT FOUND!'; $error_log[] = 'CODE: ' . $search; $error_log[] = 'FILE: ' . $key; } // Abort applying this modification completely. if ($error == 'abort') { $modification = $recovery; // Log $log[] = 'NOT FOUND - ABORTING!'; break 5; } // Skip current operation or break elseif ($error == 'skip') { // Log $log[] = 'NOT FOUND - OPERATION SKIPPED!'; continue; } // Break current operations else { // Log $log[] = 'NOT FOUND - OPERATIONS ABORTED!'; break; } } } } } } } } // Log $log[] = '----------------------------------------------------------------'; } // Log $ocmod = new Log('ocmod.log'); $ocmod->write(implode("\n", $log)); if ($error_log) { $ocmod = new Log('ocmod_error.log'); $ocmod->write(implode("\n", $error_log)); } // Write all modification files foreach ($modification as $key => $value) { // Only create a file if there are changes if ($original[$key] != $value) { $path = ''; $directories = explode('/', dirname($key)); foreach ($directories as $directory) { $path = $path . '/' . $directory; if (!is_dir(DIR_MODIFICATION . $path)) { @mkdir(DIR_MODIFICATION . $path, 0777); } } $handle = fopen(DIR_MODIFICATION . $key, 'w'); fwrite($handle, $value); fclose($handle); } } // Maintance mode back to original settings $this->model_setting_setting->editSettingValue('config', 'config_maintenance', $maintenance); // Do not return success message if refresh() was called with $data $this->session->data['success'] = $this->language->get('text_success'); $url = ''; if (isset($this->request->get['sort'])) { $url .= '&sort=' . $this->request->get['sort']; } if (isset($this->request->get['order'])) { $url .= '&order=' . $this->request->get['order']; } if (isset($this->request->get['page'])) { $url .= '&page=' . $this->request->get['page']; } //$url = $this->getListUrlParams(); if (!empty($data['redirect'])) { $redirect = $data['redirect']; } elseif (!empty($this->request->get['redirect'])) { $redirect = $this->request->get['redirect']; } else { $redirect = 'marketplace/modification'; } $this->response->redirect($this->url->link($redirect, 'user_token=' . $this->session->data['user_token'] . $url, true)); } $this->getList(); } public function clear() { $this->load->language('marketplace/modification'); $this->document->setTitle($this->language->get('heading_title')); $this->load->model('setting/modification'); if ($this->validate()) { $files = array(); // Make path into an array $path = array(DIR_MODIFICATION . '*'); // While the path array is still populated keep looping through while (count($path) != 0) { $next = array_shift($path); foreach (glob($next) as $file) { // If directory add to path array if (is_dir($file)) { $path[] = $file . '/*'; } // Add the file to the files to be deleted array $files[] = $file; } } // Reverse sort the file array rsort($files); // Clear all modification files foreach ($files as $file) { if ($file != DIR_MODIFICATION . 'index.html') { // If file just delete if (is_file($file)) { unlink($file); // If directory use the remove directory function } elseif (is_dir($file)) { rmdir($file); } } } $this->session->data['success'] = $this->language->get('text_success'); $url = ''; if (isset($this->request->get['sort'])) { $url .= '&sort=' . $this->request->get['sort']; } if (isset($this->request->get['order'])) { $url .= '&order=' . $this->request->get['order']; } if (isset($this->request->get['page'])) { $url .= '&page=' . $this->request->get['page']; } $this->response->redirect($this->url->link('marketplace/modification', 'user_token=' . $this->session->data['user_token'] . $url, true)); } $this->getList(); } public function enable() { $this->load->language('marketplace/modification'); $this->document->setTitle($this->language->get('heading_title')); $this->load->model('setting/modification'); if (isset($this->request->get['modification_id']) && $this->validate()) { $this->load->model('extension/module/modification_manager'); $this->model_extension_module_modification_manager->enableModification($this->request->get['modification_id']); $this->session->data['success'] = $this->language->get('text_success'); $url = ''; if (isset($this->request->get['sort'])) { $url .= '&sort=' . $this->request->get['sort']; } if (isset($this->request->get['order'])) { $url .= '&order=' . $this->request->get['order']; } if (isset($this->request->get['page'])) { $url .= '&page=' . $this->request->get['page']; } $this->response->redirect($this->url->link('marketplace/modification', 'user_token=' . $this->session->data['user_token'] . $url, true)); } $this->getList(); } public function disable() { $this->load->language('marketplace/modification'); $this->document->setTitle($this->language->get('heading_title')); $this->load->model('setting/modification'); if (isset($this->request->get['modification_id']) && $this->validate()) { $this->load->model('extension/module/modification_manager'); $this->model_extension_module_modification_manager->disableModification($this->request->get['modification_id']); $this->session->data['success'] = $this->language->get('text_success'); $url = ''; if (isset($this->request->get['sort'])) { $url .= '&sort=' . $this->request->get['sort']; } if (isset($this->request->get['order'])) { $url .= '&order=' . $this->request->get['order']; } if (isset($this->request->get['page'])) { $url .= '&page=' . $this->request->get['page']; } $this->response->redirect($this->url->link('marketplace/modification', 'user_token=' . $this->session->data['user_token'] . $url, true)); } $this->getList(); } public function clearlog() { $this->load->language('marketplace/modification'); $this->document->setTitle($this->language->get('heading_title')); $this->load->model('setting/modification'); if ($this->validate()) { $handle = fopen(DIR_LOGS . 'ocmod.log', 'w+'); fclose($handle); $this->session->data['success'] = $this->language->get('text_success'); $url = ''; if (isset($this->request->get['sort'])) { $url .= '&sort=' . $this->request->get['sort']; } if (isset($this->request->get['order'])) { $url .= '&order=' . $this->request->get['order']; } if (isset($this->request->get['page'])) { $url .= '&page=' . $this->request->get['page']; } $this->response->redirect($this->url->link('marketplace/modification', 'user_token=' . $this->session->data['user_token'] . $url, true)); } $this->getList(); } protected function getList() { if (isset($this->request->get['sort'])) { $sort = $this->request->get['sort']; } else { $sort = 'date_modified'; } if (isset($this->request->get['order'])) { $order = $this->request->get['order']; } else { $order = 'DESC'; } if (isset($this->request->get['page'])) { $page = (int)$this->request->get['page']; } else { $page = 1; } $url = ''; if (isset($this->request->get['sort'])) { $url .= '&sort=' . $this->request->get['sort']; } if (isset($this->request->get['order'])) { $url .= '&order=' . $this->request->get['order']; } if (isset($this->request->get['page'])) { $url .= '&page=' . $this->request->get['page']; } $this->load->model('extension/module/modification_manager'); if (isset($this->request->get['filter_name'])) { $filter_name = $this->request->get['filter_name']; } else { $filter_name = null; } if (isset($this->request->get['filter_xml'])) { $filter_xml = $this->request->get['filter_xml']; } else { $filter_xml = null; } if (isset($this->request->get['filter_author'])) { $filter_author = $this->request->get['filter_author']; } else { $filter_author = null; } $url = $this->getListUrlParams(); $data['add'] = $this->url->link('marketplace/modification/add', 'user_token=' . $this->session->data['user_token'] . $url, true); $data['filter_name'] = $filter_name; $data['filter_author'] = $filter_author; $data['filter_xml'] = $filter_xml; $data['modified_files'] = array(); $modified_files = self::modifiedFiles(DIR_MODIFICATION); $modification_files = $this->getModificationXmlFiles(); foreach($modified_files as $modified_file) { if(isset($modification_files[$modified_file])){ $modifications = $modification_files[$modified_file]; } else { $modifications = array(); } $data['modified_files'][] = array( 'file' => $modified_file, 'modifications' => $modifications ); } // Error log $error_file = DIR_LOGS . 'ocmod_error.log'; if (file_exists($error_file)) { $data['error_log'] = htmlentities(file_get_contents($error_file, FILE_USE_INCLUDE_PATH, null)); } else { $data['error_log'] = ''; } $data['clear_log'] = $this->url->link('marketplace/modification/clearlog', 'user_token=' . $this->session->data['user_token'] . $url, true); $data['filter_action'] = $this->url->link('marketplace/modification', 'user_token=' . $this->session->data['user_token'], true); $data['reset_url'] = $this->url->link('marketplace/modification', 'user_token=' . $this->session->data['user_token'], true); $data['tab_files'] = $this->language->get('tab_files'); $data['tab_error'] = $this->language->get('tab_error'); $data['breadcrumbs'] = array(); $data['breadcrumbs'][] = array( 'text' => $this->language->get('text_home'), 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true) ); $data['breadcrumbs'][] = array( 'text' => $this->language->get('heading_title'), 'href' => $this->url->link('marketplace/modification', 'user_token=' . $this->session->data['user_token'], true) ); $data['refresh'] = $this->url->link('marketplace/modification/refresh', 'user_token=' . $this->session->data['user_token'] . $url, true); $data['clear'] = $this->url->link('marketplace/modification/clear', 'user_token=' . $this->session->data['user_token'] . $url, true); $data['delete'] = $this->url->link('marketplace/modification/delete', 'user_token=' . $this->session->data['user_token'] . $url, true); $data['modifications'] = array(); $filter_data = array( 'filter_name' => $filter_name, 'filter_author' => $filter_author, 'filter_xml' => $filter_xml, 'sort' => $sort, 'order' => $order, 'start' => ($page - 1) * $this->config->get('config_limit_admin'), 'limit' => $this->config->get('config_limit_admin') ); $this->load->model('extension/module/modification_manager'); $modification_total = $this->model_extension_module_modification_manager->getTotalModifications(); $this->load->model('extension/module/modification_manager'); $results = $this->model_extension_module_modification_manager->getModifications($filter_data); foreach ($results as $result) { $data['modifications'][] = array( 'date_modified' => $result['date_modified'] && $result['date_modified'] != '0000-00-00 00:00:00' ? date(date('Ymd') == date('Ymd', strtotime($result['date_modified'])) ? 'G:i' : $this->language->get('date_format_short'), strtotime($result['date_modified'])) : null, 'edit' => $this->url->link('marketplace/modification/edit', 'user_token=' . $this->session->data['user_token'] . '&modification_id=' . $result['modification_id'] . $url, true), 'download' => $this->url->link('marketplace/modification/download', 'user_token=' . $this->session->data['user_token'] . '&modification_id=' . $result['modification_id'] , true), 'modification_id' => $result['modification_id'], 'name' => $result['name'], 'author' => $result['author'], 'filename' => $result['code'].".ocmod.xml", 'version' => $result['version'], 'status' => $result['status'] ? $this->language->get('text_enabled') : $this->language->get('text_disabled'), 'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added'])), 'link' => $result['link'], 'edit' => $this->url->link('marketplace/modification/edit', 'user_token=' . $this->session->data['user_token'] . '&modification_id=' . $result['modification_id'], true), 'download' => $this->url->link('marketplace/modification/download', 'user_token=' . $this->session->data['user_token'] . '&modification_id=' . $result['modification_id'], true), 'enable' => $this->url->link('marketplace/modification/enable', 'user_token=' . $this->session->data['user_token'] . '&modification_id=' . $result['modification_id'], true), 'disable' => $this->url->link('marketplace/modification/disable', 'user_token=' . $this->session->data['user_token'] . '&modification_id=' . $result['modification_id'], true), 'enabled' => $result['status'] ); } $data['user_token'] = $this->session->data['user_token']; if (isset($this->error['warning'])) { $data['error_warning'] = $this->error['warning']; } else { $data['error_warning'] = ''; } if (isset($this->session->data['success'])) { $data['success'] = $this->session->data['success']; unset($this->session->data['success']); } else { $data['success'] = ''; } if (isset($this->request->post['selected'])) { $data['selected'] = (array)$this->request->post['selected']; } else { $data['selected'] = array(); } $url = ''; if ($order == 'ASC') { $url .= '&order=DESC'; } else { $url .= '&order=ASC'; } if (isset($this->request->get['page'])) { $url .= '&page=' . $this->request->get['page']; } if (isset($this->request->get['filter_name'])) { $url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8')); } if (isset($this->request->get['filter_author'])) { $url .= '&filter_author=' . urlencode(html_entity_decode($this->request->get['filter_author'], ENT_QUOTES, 'UTF-8')); } if (isset($this->request->get['filter_xml'])) { $url .= '&filter_xml=' . urlencode(html_entity_decode($this->request->get['filter_xml'], ENT_QUOTES, 'UTF-8')); } $data['sort_date_modified'] = $this->url->link('marketplace/modification', 'user_token=' . $this->session->data['user_token'] . '&sort=date_modified' . $url, true); $data['sort_name'] = $this->url->link('marketplace/modification', 'user_token=' . $this->session->data['user_token'] . '&sort=name' . $url, true); $data['sort_author'] = $this->url->link('marketplace/modification', 'user_token=' . $this->session->data['user_token'] . '&sort=author' . $url, true); $data['sort_version'] = $this->url->link('marketplace/modification', 'user_token=' . $this->session->data['user_token'] . '&sort=version' . $url, true); $data['sort_status'] = $this->url->link('marketplace/modification', 'user_token=' . $this->session->data['user_token'] . '&sort=status' . $url, true); $data['sort_date_added'] = $this->url->link('marketplace/modification', 'user_token=' . $this->session->data['user_token'] . '&sort=date_added' . $url, true); $url = ''; if (isset($this->request->get['sort'])) { $url .= '&sort=' . $this->request->get['sort']; } if (isset($this->request->get['order'])) { $url .= '&order=' . $this->request->get['order']; } if (isset($this->request->get['filter_name'])) { $url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8')); } if (isset($this->request->get['filter_author'])) { $url .= '&filter_author=' . urlencode(html_entity_decode($this->request->get['filter_author'], ENT_QUOTES, 'UTF-8')); } if (isset($this->request->get['filter_xml'])) { $url .= '&filter_xml=' . urlencode(html_entity_decode($this->request->get['filter_xml'], ENT_QUOTES, 'UTF-8')); } $pagination = new Pagination(); $pagination->total = $modification_total; $pagination->page = $page; $pagination->limit = $this->config->get('config_limit_admin'); $pagination->url = $this->url->link('marketplace/modification', 'user_token=' . $this->session->data['user_token'] . $url . '&page={page}', true); $data['pagination'] = $pagination->render(); $data['results'] = sprintf($this->language->get('text_pagination'), ($modification_total) ? (($page - 1) * $this->config->get('config_limit_admin')) + 1 : 0, ((($page - 1) * $this->config->get('config_limit_admin')) > ($modification_total - $this->config->get('config_limit_admin'))) ? $modification_total : ((($page - 1) * $this->config->get('config_limit_admin')) + $this->config->get('config_limit_admin')), $modification_total, ceil($modification_total / $this->config->get('config_limit_admin'))); $data['sort'] = $sort; $data['order'] = $order; // Log $file = DIR_LOGS . 'ocmod.log'; if (file_exists($file)) { $data['log'] = htmlentities(file_get_contents($file, FILE_USE_INCLUDE_PATH, null)); } else { $data['log'] = ''; } $data['clear_log'] = $this->url->link('marketplace/modification/clearlog', 'user_token=' . $this->session->data['user_token'], true); $data['header'] = $this->load->controller('common/header'); $data['column_left'] = $this->load->controller('common/column_left'); $data['footer'] = $this->load->controller('common/footer'); $this->response->setOutput($this->load->view('extension/module/modification_manager/list', $data)); } protected function getForm() { $this->load->language('marketplace/modification'); $this->document->addStyle('view/javascript/codemirror/lib/codemirror.css'); $this->document->addStyle('view/javascript/codemirror/theme/xq-dark.css'); $this->document->addScript('view/javascript/codemirror/lib/codemirror.js'); $this->document->addScript('view/javascript/codemirror/lib/xml.js'); $this->document->addScript('view/javascript/codemirror/lib/formatting.js'); $data['breadcrumbs'] = array(); $data['breadcrumbs'][] = array( 'text' => $this->language->get('text_home'), 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true) ); $data['breadcrumbs'][] = array( 'text' => $this->language->get('heading_title'), 'href' => $this->url->link('marketplace/modification', 'user_token=' . $this->session->data['user_token'], true) ); $data['heading_title'] = $this->language->get('heading_title'); $data['text_form'] = $this->language->get('text_form'); $data['text_no_results'] = $this->language->get('text_no_results'); $data['entry_name'] = $this->language->get('entry_name'); $data['entry_xml'] = $this->language->get('entry_xml'); $data['column_id'] = $this->language->get('column_id'); $data['column_code'] = $this->language->get('column_code'); $data['column_date_added'] = $this->language->get('column_date_added'); $data['column_restore'] = $this->language->get('column_restore'); $data['button_update'] = $this->language->get('button_update'); $data['button_save'] = $this->language->get('button_save'); $data['button_cancel'] = $this->language->get('button_cancel'); $data['button_restore'] = $this->language->get('button_restore'); $data['button_history'] = $this->language->get('button_history'); $data['tab_general'] = $this->language->get('tab_general'); $data['tab_backup'] = $this->language->get('tab_backup'); $data['user_token'] = $this->session->data['user_token']; if (isset($this->error['warning'])) { $data['error_warning'] = $this->error['warning']; } else { $data['error_warning'] = ''; } if (isset($this->session->data['success'])) { $data['success'] = $this->session->data['success']; unset($this->session->data['success']); } else { $data['success'] = ''; } $url = ''; if (!isset($this->request->get['modification_id'])) { $data['action'] = $this->url->link('marketplace/modification/add', 'user_token=' . $this->session->data['user_token'] . $url, true); } else { $data['action'] = $this->url->link('marketplace/modification/edit', 'user_token=' . $this->session->data['user_token'] . '&modification_id=' . $this->request->get['modification_id'] . $url, true); } $data['restore'] = $this->url->link('marketplace/modification/restore', 'user_token=' . $this->session->data['user_token'] . '&modification_id=' . $this->request->get['modification_id'] . $url, true); $data['history'] = $this->url->link('marketplace/modification/clearhistory', 'user_token=' . $this->session->data['user_token'] . '&modification_id=' . $this->request->get['modification_id'] . $url, true); $data['cancel'] = $this->url->link('marketplace/modification', 'user_token=' . $this->session->data['user_token'] . $url, true); $this->load->model('setting/modification'); $this->load->model('extension/module/modification_manager'); $backups = $this->model_extension_module_modification_manager->getModificationBackups($this->request->get['modification_id']); $data['backups'] = array(); if ($backups) { foreach ($backups as $backup) { $data['backups'][] = array( 'backup_id' => $backup['backup_id'], 'code' => $backup['code'], 'date_added' => $backup['date_added'], 'restore' => $this->url->link('marketplace/modification/restore', 'user_token=' . $this->session->data['user_token'] . '&modification_id=' . $this->request->get['modification_id'] . '&backup_id=' . $backup['backup_id'] . $url, true) ); } } $this->load->model('extension/module/modification_manager'); $modification = $this->model_extension_module_modification_manager->getModification($this->request->get['modification_id']); if (isset($this->request->post['name'])) { $data['name'] = htmlentities(ltrim($this->request->post['name'])); } elseif (isset($modification)) { $data['name'] = htmlentities(ltrim($modification['name'])); } if (isset($this->request->post['xml'])) { $data['xml'] = htmlentities(ltrim($this->request->post['xml'], "")); } elseif (isset($modification)) { $data['xml'] = htmlentities(ltrim($modification['xml'], "")); } $data['header'] = $this->load->controller('common/header'); $data['column_left'] = $this->load->controller('common/column_left'); $data['footer'] = $this->load->controller('common/footer'); $this->response->setOutput($this->load->view('marketplace/modification_form', $data)); } protected function validateForm() { if (!$this->user->hasPermission('modify', 'marketplace/modification')) { $this->error['warning'] = $this->language->get('error_permission'); } if ((utf8_strlen($this->request->post['name']) < 2)) { $this->error['name'] = $this->language->get('error_name'); } if ($this->error && !isset($this->error['warning'])) { $this->error['warning'] = $this->language->get('error_warning'); } return !$this->error; } public function add() { $this->load->language('marketplace/modification'); $this->load->model('extension/module/modification_manager'); if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validateForm()) { $xml = html_entity_decode($this->request->post['xml'], ENT_QUOTES, 'UTF-8'); $dom = new DOMDocument('1.0', 'UTF-8'); $dom->preserveWhiteSpace = false; $dom->loadXml($xml); $data = array( 'version' => '', 'author' => '', 'link' => '', 'status' => 1 ); $data['xml'] = $xml; $data['name'] = $dom->getElementsByTagName('name')->item(0)->textContent; $data['code'] = $dom->getElementsByTagName('code')->item(0)->textContent; if ($dom->getElementsByTagName('version')->length) { $data['version'] = $dom->getElementsByTagName('version')->item(0)->textContent; } if ($dom->getElementsByTagName('author')->length) { $data['author'] = $dom->getElementsByTagName('author')->item(0)->textContent; } $this->model_extension_module_modification_manager->addModification($data); $modification_id = $this->db->getLastId(); $this->session->data['success'] = $this->language->get('text_success'); $this->response->redirect($this->url->link('marketplace/modification/edit', 'user_token=' . $this->session->data['user_token'] . $this->getListUrlParams(array('modification_id' => $modification_id)), true)); } $this->getForm(); } public function edit() { $this->load->language('marketplace/modification'); $this->load->model('extension/module/modification_manager'); if (($this->request->server['REQUEST_METHOD'] == 'POST') && !empty($this->request->get['modification_id']) && $this->validateForm()) { $modification_id = $this->request->get['modification_id']; $xml = html_entity_decode($this->request->post['xml'], ENT_QUOTES, 'UTF-8'); $dom = new DOMDocument('1.0', 'UTF-8'); $dom->preserveWhiteSpace = false; $dom->loadXml($xml); $data = array(); $data['xml'] = $xml; $data['name'] = $dom->getElementsByTagName('name')->item(0)->textContent; $data['code'] = $dom->getElementsByTagName('code')->item(0)->textContent; if ($dom->getElementsByTagName('version')->length) { $data['version'] = $dom->getElementsByTagName('version')->item(0)->textContent; } else { $data['version'] = ''; } if ($dom->getElementsByTagName('author')->length) { $data['author'] = $dom->getElementsByTagName('author')->item(0)->textContent; } else { $data['author'] = ''; } if ($dom->getElementsByTagName('link')->length) { $data['link'] = $dom->getElementsByTagName('link')->item(0)->textContent; } else { $data['link'] = ''; } $this->model_extension_module_modification_manager->editModification($modification_id, $data); $url = $this->getListUrlParams(array('modification_id' => $modification_id)); if (isset($this->request->get['refresh'])) { $this->response->redirect($this->url->link('marketplace/modification/refresh', 'user_token=' . $this->session->data['user_token'] . $url, true)); } if ($this->db->countAffected()) { $this->session->data['success'] = $this->language->get('text_success'); $this->response->redirect($this->url->link('marketplace/modification/edit', 'user_token=' . $this->session->data['user_token'] . $url, true)); } } $this->getForm(); } public function download() { if (!$this->user->hasPermission('modify', 'marketplace/modification')) { $this->response->redirect($this->url->link('marketplace/modification', 'user_token=' . $this->session->data['user_token'], true)); } if (isset($this->request->get['modification_id'])) { $modification_id = $this->request->get['modification_id']; } else { $modification_id = 0; } $this->load->model('extension/module/modification_manager'); $modification = $this->model_extension_module_modification_manager->getModification($modification_id); if ($modification) { $filename = $modification['code'] . '.ocmod.xml'; $file = $modification['xml']; ob_start(); echo $file; $download = ob_get_contents(); $size = ob_get_length(); ob_end_clean(); if (!headers_sent()) { if (!empty($modification['xml'])) { header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="' . $filename . '"'); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Content-Length: ' . $size); if (ob_get_level()) { ob_end_clean(); } echo $download; exit(); } else { exit($this->language->get('error_file')); } } else { exit($this->language->get('error_headers')); } } else { $this->response->redirect($this->url->link('marketplace/modification', 'user_token=' . $this->session->data['user_token'] . $url, true)); } } public function getForm() { $data['heading_title'] = $this->language->get('heading_title'); $data['text_enabled'] = $this->language->get('text_enabled'); $data['text_disabled'] = $this->language->get('text_disabled'); $data['button_save'] = $this->language->get('button_save'); $data['button_download'] = $this->language->get('button_download'); $data['button_refresh'] = $this->language->get('button_refresh'); $data['button_cancel'] = $this->language->get('button_cancel'); if (isset($this->error['warning'])) { $data['error_warning'] = $this->error['warning']; } elseif (!empty($this->error)) { $data['error_warning'] = $this->language->get('error_warning'); } else { $data['error_warning'] = ''; } if (isset($this->session->data['success'])) { $data['success'] = $this->session->data['success']; unset($this->session->data['success']); } else { $data['success'] = false; } if (isset($this->error['xml'])) { $data['error_xml'] = $this->error['xml']; } $data['breadcrumbs'] = array(); $data['breadcrumbs'][] = array( 'text' => $this->language->get('text_home'), 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true) ); $data['breadcrumbs'][] = array( 'text' => $this->language->get('heading_title'), 'href' => $this->url->link('marketplace/modification', 'user_token=' . $this->session->data['user_token'] . $this->getListUrlParams(), true) ); if (isset($this->request->get['modification_id'])) { $this->load->model('extension/module/modification_manager'); $modification_info = $this->model_extension_module_modification_manager->getModification($this->request->get['modification_id']); if (!$modification_info) exit; $data['text_form'] = sprintf($this->language->get('text_edit'), $modification_info['name']); $data['action'] = $this->url->link('marketplace/modification/edit', '&modification_id=' . $modification_info['modification_id'] . '&user_token=' . $this->session->data['user_token'], true); $data['refresh'] = $this->url->link('marketplace/modification/edit', '&modification_id=' . $modification_info['modification_id'] . '&refresh=1&user_token=' . $this->session->data['user_token'], true); $this->document->setTitle($modification_info['name'] . ' » ' . $data['heading_title']); } else { $data['text_form'] = $this->language->get('text_add'); $data['refresh'] = false; $data['action'] = $this->url->link('marketplace/modification/add', 'user_token=' . $this->session->data['user_token'], true); $this->document->setTitle($data['heading_title']); } $data['cancel'] = $this->url->link('marketplace/modification', 'user_token=' . $this->session->data['user_token'] . $this->getListUrlParams(), true); $data['modification'] = array(); if (!empty($modification_info)) { $data['modification']['status'] = $modification_info['status']; } else { $data['modification']['status'] = 0; } if (isset($this->request->post['xml'])) { $data['modification']['xml'] = html_entity_decode($this->request->post['xml'], ENT_QUOTES, 'UTF-8'); } elseif (!empty($modification_info)) { $data['modification']['xml'] = $modification_info['xml']; } else { $data['modification']['xml'] = ''; } $this->document->addStyle('view/javascript/codemirror/lib/codemirror.css'); $this->document->addScript('view/javascript/codemirror/lib/codemirror.js'); $this->document->addScript('view/javascript/codemirror/mode/xml/xml.js'); $data['header'] = $this->load->controller('common/header'); $data['column_left'] = $this->load->controller('common/column_left'); $data['footer'] = $this->load->controller('common/footer'); $this->response->setOutput($this->load->view('extension/module/modification_manager/form', $data)); } private function validateForm() { if (!$this->user->hasPermission('modify', 'marketplace/modification')) { $this->error['warning'] = $this->language->get('error_permission'); } $error = false; // Required if (empty($this->request->post['xml'])) { $error = $this->language->get('error_required'); } // 2. Validate XML if (!$error) { libxml_use_internal_errors(true); $dom = new DOMDocument('1.0', 'UTF-8'); if(!$dom->loadXml(html_entity_decode($this->request->post['xml'], ENT_QUOTES, 'UTF-8'))){ foreach (libxml_get_errors() as $error) { $msg = ''; switch ($error->level) { case LIBXML_ERR_WARNING : $msg .= "Warning $error->code: "; break; case LIBXML_ERR_ERROR : $msg .= "Error $error->code: "; break; case LIBXML_ERR_FATAL : $msg .= "Fatal Error $error->code: "; break; } $msg .= trim ( $error->message ) . "\nLine: $error->line"; $error = $msg; } libxml_clear_errors(); } libxml_use_internal_errors(false); } // 3. Required tags if (!$error && (!$dom->getElementsByTagName('name') || $dom->getElementsByTagName('name')->length == 0 || $dom->getElementsByTagName('name')->item(0)->textContent == '')) { $error = $this->language->get('error_name'); } if (!$error && (!$dom->getElementsByTagName('code') || $dom->getElementsByTagName('code')->length == 0 || $dom->getElementsByTagName('code')->item(0)->textContent == '')) { $error = $this->language->get('error_code'); } // 4. Check code isn't duplicate if (!$error) { $code = $dom->getElementsByTagName('code')->item(0)->textContent; $this->load->model('extension/module/modification_manager'); $modification_info = $this->model_extension_module_modification_manager->getModificationByCode($code); if ($modification_info && (!isset($this->request->get['modification_id']) || $modification_info['modification_id'] != $this->request->get['modification_id'])) { $error = sprintf($this->language->get('error_exists'), $modification_info['name'], $modification_info['code']); } } if ($error) { $this->error['xml'] = $error; } return !$this->error; } static function modifiedFiles($dir, $dirLen = 0) { $tree = glob(rtrim($dir, '/') . '/*'); if (!$dirLen) { $dirLen = strlen($dir); } $files = array(); if (is_array($tree)) { foreach($tree as $file) { if ($file == $dir . 'index.html') { continue; } elseif (is_file($file)) { $files[] = substr($file, $dirLen); } elseif (is_dir($file)) { $files = array_merge($files, self::modifiedFiles($file, $dirLen)); } } } return $files; } protected function getListUrlParams(array $params = array()) { if (isset($params['sort'])) { $params['sort'] = $params['sort']; } elseif (isset($this->request->get['sort'])) { $params['sort'] = $this->request->get['sort']; } if (isset($params['order'])) { $params['order'] = $params['order']; } elseif (isset($this->request->get['order'])) { $params['order'] = $this->request->get['order']; } if (isset($params['filter_name'])) { $params['filter_name'] = urlencode(html_entity_decode($params['filter_name'], ENT_QUOTES, 'UTF-8')); } elseif (isset($this->request->get['filter_name'])) { $params['filter_name'] = urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8')); } if (isset($params['filter_author'])) { $params['filter_author'] = urlencode(html_entity_decode($params['filter_author'], ENT_QUOTES, 'UTF-8')); } elseif (isset($this->request->get['filter_author'])) { $params['filter_author'] = urlencode(html_entity_decode($this->request->get['filter_author'], ENT_QUOTES, 'UTF-8')); } if (isset($params['filter_xml'])) { $params['filter_xml'] = urlencode(html_entity_decode($params['filter_xml'], ENT_QUOTES, 'UTF-8')); } elseif (isset($this->request->get['filter_xml'])) { $params['filter_xml'] = urlencode(html_entity_decode($this->request->get['filter_xml'], ENT_QUOTES, 'UTF-8')); } if (isset($params['page'])) { $params['page'] = $params['page']; } elseif (isset($this->request->get['page'])) { $params['page'] = $this->request->get['page']; } $paramsJoined = array(); foreach($params as $param => $value) { $paramsJoined[] = "$param=$value"; } return '&' . implode('&', $paramsJoined); } protected function getModificationXmlFiles() { $return = array(); $baseLen = strlen(substr(DIR_SYSTEM, 0, -7)); $xml = array(); $xml[] = file_get_contents(DIR_SYSTEM . 'modification.xml'); $files = glob(DIR_SYSTEM . '*.ocmod.xml'); if ($files) { foreach ($files as $file) { $xml[] = file_get_contents($file); } } $results = $this->model_extension_module_modification_manager->getModifications(); foreach ($results as $result) { if ($result['status']) { $xml[] = $result['xml']; } } foreach ($xml as $xml) { if (empty($xml)){ continue; } $dom = new DOMDocument('1.0', 'UTF-8'); $dom->preserveWhiteSpace = false; $dom->loadXml($xml); $files = $dom->getElementsByTagName('modification')->item(0)->getElementsByTagName('file'); foreach ($files as $file) { $operations = $file->getElementsByTagName('operation'); $files = explode(',', $file->getAttribute('path')); foreach ($files as $file) { $path = ''; // Get the full path of the files that are going to be used for modification if (substr($file, 0, 7) == 'catalog') { $path = DIR_CATALOG . str_replace('../', '', substr($file, 8)); } if (substr($file, 0, 5) == 'admin') { $path = DIR_APPLICATION . str_replace('../', '', substr($file, 6)); } if (substr($file, 0, 6) == 'system') { $path = DIR_SYSTEM . str_replace('../', '', substr($file, 7)); } if ($path) { $files = glob($path, GLOB_BRACE); if ($files) { foreach ($files as $file) { $file = substr($file, $baseLen); if (!isset($return[$file])) { $return[$file] = array(); } if ($dom->getElementsByTagName('code')->length) { $code = $dom->getElementsByTagName('code')->item(0)->textContent; } else { continue; } if (!empty($return[$file])) { foreach ($return[$file] as $return_file) { if ($return_file['code'] == $code) { continue 2; } } } if ($dom->getElementsByTagName('name')->length) { $name = $dom->getElementsByTagName('name')->item(0)->textContent; } else { continue; } if ($dom->getElementsByTagName('author')->length) { $author = $dom->getElementsByTagName('author')->item(0)->textContent; } else { $author = ''; } $return[$file][] = array( 'code' => $code, 'name' => $name, 'author' => $author ); } } } } } } return $return; } protected function validate() { if (!$this->user->hasPermission('modify', 'marketplace/modification')) { $this->error['warning'] = $this->language->get('error_permission'); } return !$this->error; } }
  2. После усиновки шаблона темы, пропала возможность входа в пункт "модификаторы" админки. Получается ик: в админке нажимаю на пункт "модификаторы" и происходит переход браузере по адресу : http://1.japan-moto.com/admin/index.php?route=marketplace/modification&user_token=SgruObVrYOjftK19X9iSvXs4VBaH*** с ошибкой HTTP ERROR 500На синдартной теме ошибки нет. Прилина в новом шаблоне темы, которая написана под OpenCart (ошибки нет), а на ocStore (у меня) ошибка есть. Техподгдержка темы обеспеливает подгдержку усиновленную на движок с листым кодом. Техподгдержка хостинга даёт икую ошибку: PHP Fatal error: Cannot redeclare ControllerMarketplaceModification::edit() in /home/japanmot/1.japan-moto.com/system/storage/modification/admin/controller/marketplace/modification.php on line 1488 Я нашел строку 1488, и сверху ей подобную. Согдержание кода в них разное. Удалил строку и согдержание сверху. Ничего не изменилось. Потом воссиновил и удалил строку и согдержание внизу, которое было в ошибке, строку 1488 и код внутри. Даже ничего не изменилось. То есть нельзя зайти в пункт "модификаторы". После каждого уднония листил кеш через админку. Прошу помощи, чтобы разобраться, ггде этот дублирующийся контент удалять.
  3. Прошу помощи у специалистов. При усиновке шаблона на ocStore 3.0.3.7 возникла ошибка PHP Fatal error: Cannot redeclare ControllerMarketplaceModification::edit() in /home/***/site.ua/system/storage/modification/admin/controller/marketplace/modification.php on line 1488 при вхогде в пункт админки "модификаторы" (пунки меню не открывается). Притом, если усинавливать этот шаблон на Опенкарт 3.0.3.8 пункт "модификаторы" открывается. Я понимаю, что это дублируется контент при усиновке ocStore 3.0.3.7. Я нашел строку 1488, и сверху ей подобную. Согдержание кода в них разное. Удалил строку и согдержание сверху. Ничего не изменилось. Потом воссиновил и удалил строку и согдержание внизу, которое было в ошибке, строку 1488 и код внутри. Даже ничего не изменилось. То есть нельзя зайти в пункт "модификаторы". После каждого уднония листил кеш через админку. Я допускаю, что возможно ггде-то что-то сгделал не правильно в проэтоссе уднония и воссиновления. Однако лиил згдесь, что это папка кеш и вносит згдесь изменения бессмысленно, т.к. данные згдесь перезаписываются. Хотя некоторые утверждают что надо згдесь удалять дублирующийся контент. Прошу помощи, чтобы разобраться, ггде этот дублирующийся контент удалять.
  4. ArkNorm

    Ошибка

    Как решили? Та же проблема!!!
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обрилитка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфигденциальности.