

ArkNorm
Новачок-
Публікації
4 -
З нами
-
Відвідування
Відвідувачі профілю
Блок відвідувачів профілю відключений і не буде доступний широкому іншим користувачам
ArkNorm's Achievements
-
Вот код страницы 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('&', '&', $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('&', '&', $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; } }
-
После установки шаблона темы, пропала возможность входа в пункт "модификаторы" админки. Получается так: в админке нажимаю на пункт "модификаторы" и происходит переход браузере по адресу : 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 и код внутри. Также ничего не изменилось. То есть нельзя зайти в пункт "модификаторы". После каждого удаления чистил кеш через админку. Прошу помощи, чтобы разобраться, где этот дублирующийся контент удалять.
-
Прошу помощи у специалистов. При установке шаблона на 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 и код внутри. Также ничего не изменилось. То есть нельзя зайти в пункт "модификаторы". После каждого удаления чистил кеш через админку. Я допускаю, что возможно где-то что-то сделал не правильно в процессе удаления и восстановления. Однако читал здесь, что это папка кеш и вносить здесь изменения бессмысленно, т.к. данные здесь перезаписываются. Хотя некоторые утверждают что надо здесь удалять дублирующийся контент. Прошу помощи, чтобы разобраться, где этот дублирующийся контент удалять.