aboutsummaryrefslogtreecommitdiffstats
path: root/public/admin/controller/design/theme.php
diff options
context:
space:
mode:
authorJesús <heckyel@hyperbola.info>2019-08-18 21:14:58 -0500
committerJesús <heckyel@hyperbola.info>2019-08-18 21:14:58 -0500
commit2eed7b082f83630301e51f57ca8394de228a8605 (patch)
tree1d19962d22d30f99317d9276e4bae7744fc93fc2 /public/admin/controller/design/theme.php
downloadlibrecart-2eed7b082f83630301e51f57ca8394de228a8605.tar.lz
librecart-2eed7b082f83630301e51f57ca8394de228a8605.tar.xz
librecart-2eed7b082f83630301e51f57ca8394de228a8605.zip
first commit
Diffstat (limited to 'public/admin/controller/design/theme.php')
-rw-r--r--public/admin/controller/design/theme.php311
1 files changed, 311 insertions, 0 deletions
diff --git a/public/admin/controller/design/theme.php b/public/admin/controller/design/theme.php
new file mode 100644
index 0000000..839d03f
--- /dev/null
+++ b/public/admin/controller/design/theme.php
@@ -0,0 +1,311 @@
+<?php
+class ControllerDesignTheme extends Controller {
+ public function index() {
+ $this->load->language('design/theme');
+
+ $this->document->setTitle($this->language->get('heading_title'));
+
+ $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('design/theme', 'user_token=' . $this->session->data['user_token'], true)
+ );
+
+ $data['user_token'] = $this->session->data['user_token'];
+
+ $data['stores'] = array();
+
+ $this->load->model('setting/store');
+
+ $results = $this->model_setting_store->getStores();
+
+ foreach ($results as $result) {
+ $data['stores'][] = array(
+ 'store_id' => $result['store_id'],
+ 'name' => $result['name']
+ );
+ }
+
+ $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('design/theme', $data));
+ }
+
+ public function history() {
+ $this->load->language('design/theme');
+
+ if (isset($this->request->get['page'])) {
+ $page = $this->request->get['page'];
+ } else {
+ $page = 1;
+ }
+
+ $data['histories'] = array();
+
+ $this->load->model('design/theme');
+ $this->load->model('setting/store');
+
+ $history_total = $this->model_design_theme->getTotalThemes();
+
+ $results = $this->model_design_theme->getThemes(($page - 1) * 10, 10);
+
+ foreach ($results as $result) {
+ $store_info = $this->model_setting_store->getStore($result['store_id']);
+
+ if ($store_info) {
+ $store = $store_info['name'];
+ } else {
+ $store = '';
+ }
+
+ $data['histories'][] = array(
+ 'store_id' => $result['store_id'],
+ 'store' => ($result['store_id'] ? $store : $this->language->get('text_default')),
+ 'route' => $result['route'],
+ 'theme' => $result['theme'],
+ 'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added'])),
+ 'edit' => $this->url->link('design/theme/template', 'user_token=' . $this->session->data['user_token'], true),
+ 'delete' => $this->url->link('design/theme/delete', 'user_token=' . $this->session->data['user_token'] . '&theme_id=' . $result['theme_id'], true)
+ );
+ }
+
+ $pagination = new Pagination();
+ $pagination->total = $history_total;
+ $pagination->page = $page;
+ $pagination->limit = 10;
+ $pagination->url = $this->url->link('design/theme/history', 'user_token=' . $this->session->data['user_token'] . '&page={page}', true);
+
+ $data['pagination'] = $pagination->render();
+
+ $data['results'] = sprintf($this->language->get('text_pagination'), ($history_total) ? (($page - 1) * 10) + 1 : 0, ((($page - 1) * 10) > ($history_total - 10)) ? $history_total : ((($page - 1) * 10) + 10), $history_total, ceil($history_total / 10));
+
+ $this->response->setOutput($this->load->view('design/theme_history', $data));
+ }
+
+ public function path() {
+ $this->load->language('design/theme');
+
+ $json = array();
+
+ if (isset($this->request->get['store_id'])) {
+ $store_id = $this->request->get['store_id'];
+ } else {
+ $store_id = 0;
+ }
+
+ $this->load->model('setting/setting');
+
+ $theme = $this->model_setting_setting->getSettingValue('config_theme', $store_id);
+
+ // This is only here for compatibility with old themes.
+ if ($theme == 'theme_default') {
+ $theme = $this->model_setting_setting->getSettingValue('theme_default_directory', $store_id);
+ }
+
+ if (isset($this->request->get['path'])) {
+ $path = $this->request->get['path'];
+ } else {
+ $path = '';
+ }
+
+ if (substr(str_replace('\\', '/', realpath(DIR_CATALOG . 'view/theme/default/template/' . $path)), 0, strlen(DIR_CATALOG . 'view')) == DIR_CATALOG . 'view') {
+ $path_data = array();
+
+ // We grab the files from the default theme directory first as the custom themes drops back to the default theme if selected theme files can not be found.
+ $files = glob(rtrim(DIR_CATALOG . 'view/theme/{default,' . $theme . '}/template/' . $path, '/') . '/*', GLOB_BRACE);
+
+ if ($files) {
+ foreach($files as $file) {
+ if (!in_array(basename($file), $path_data)) {
+ if (is_dir($file)) {
+ $json['directory'][] = array(
+ 'name' => basename($file),
+ 'path' => trim($path . '/' . basename($file), '/')
+ );
+ }
+
+ if (is_file($file)) {
+ $json['file'][] = array(
+ 'name' => basename($file),
+ 'path' => trim($path . '/' . basename($file), '/')
+ );
+ }
+
+ $path_data[] = basename($file);
+ }
+ }
+ }
+ }
+
+ if (!empty($this->request->get['path'])) {
+ $json['back'] = array(
+ 'name' => $this->language->get('button_back'),
+ 'path' => urlencode(substr($path, 0, strrpos($path, '/'))),
+ );
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function template() {
+ $this->load->language('design/theme');
+
+ $json = array();
+
+ if (isset($this->request->get['store_id'])) {
+ $store_id = $this->request->get['store_id'];
+ } else {
+ $store_id = 0;
+ }
+
+ $this->load->model('setting/setting');
+
+ $theme = $this->model_setting_setting->getSettingValue('config_theme', $store_id);
+
+ // This is only here for compatibility with old themes.
+ if ($theme == 'theme_default') {
+ $theme = $this->model_setting_setting->getSettingValue('theme_default_directory', $store_id);
+ }
+
+ if (isset($this->request->get['path'])) {
+ $path = $this->request->get['path'];
+ } else {
+ $path = '';
+ }
+
+ $this->load->model('design/theme');
+
+ $theme_info = $this->model_design_theme->getTheme($store_id, $theme, $path);
+
+ if ($theme_info) {
+ $json['code'] = html_entity_decode($theme_info['code']);
+ } elseif (is_file(DIR_CATALOG . 'view/theme/' . $theme . '/template/' . $path) && (substr(str_replace('\\', '/', realpath(DIR_CATALOG . 'view/theme/' . $theme . '/template/' . $path)), 0, strlen(DIR_CATALOG . 'view')) == DIR_CATALOG . 'view')) {
+ $json['code'] = file_get_contents(DIR_CATALOG . 'view/theme/' . $theme . '/template/' . $path);
+ } elseif (is_file(DIR_CATALOG . 'view/theme/default/template/' . $path) && (substr(str_replace('\\', '/', realpath(DIR_CATALOG . 'view/theme/default/template/' . $path)), 0, strlen(DIR_CATALOG . 'view')) == DIR_CATALOG . 'view')) {
+ $json['code'] = file_get_contents(DIR_CATALOG . 'view/theme/default/template/' . $path);
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function save() {
+ $this->load->language('design/theme');
+
+ $json = array();
+
+ if (isset($this->request->get['store_id'])) {
+ $store_id = $this->request->get['store_id'];
+ } else {
+ $store_id = 0;
+ }
+
+ $this->load->model('setting/setting');
+
+ $theme = $this->model_setting_setting->getSettingValue('config_theme', $store_id);
+
+ // This is only here for compatibility with old themes.
+ if ($theme == 'theme_default') {
+ $theme = $this->model_setting_setting->getSettingValue('theme_default_directory', $store_id);
+ }
+
+ if (isset($this->request->get['path'])) {
+ $path = $this->request->get['path'];
+ } else {
+ $path = '';
+ }
+
+ // Check user has permission
+ if (!$this->user->hasPermission('modify', 'design/theme')) {
+ $json['error'] = $this->language->get('error_permission');
+ }
+
+ if (substr($path, -5) != '.twig') {
+ $json['error'] = $this->language->get('error_twig');
+ }
+
+ if (!$json) {
+ $this->load->model('design/theme');
+
+ $pos = strpos($path, '.');
+
+ $this->model_design_theme->editTheme($store_id, $theme, ($pos !== false) ? substr($path, 0, $pos) : $path, $this->request->post['code']);
+
+ $json['success'] = $this->language->get('text_success');
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function reset() {
+ $this->load->language('design/theme');
+
+ $json = array();
+
+ if (isset($this->request->get['store_id'])) {
+ $store_id = $this->request->get['store_id'];
+ } else {
+ $store_id = 0;
+ }
+
+ $this->load->model('setting/setting');
+
+ $theme = $this->model_setting_setting->getSettingValue('config_theme', $store_id);
+
+ // This is only here for compatibility with old themes.
+ if ($theme == 'theme_default') {
+ $theme = $this->model_setting_setting->getSettingValue('theme_default_directory', $store_id);
+ }
+
+ if (isset($this->request->get['path'])) {
+ $path = $this->request->get['path'];
+ } else {
+ $path = '';
+ }
+
+ if (is_file(DIR_CATALOG . 'view/theme/' . $theme . '/template/' . $path) && (substr(str_replace('\\', '/', realpath(DIR_CATALOG . 'view/theme/' . $theme . '/template/' . $path)), 0, strlen(DIR_CATALOG . 'view')) == DIR_CATALOG . 'view')) {
+ $json['code'] = file_get_contents(DIR_CATALOG . 'view/theme/' . $theme . '/template/' . $path);
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function delete() {
+ $this->load->language('design/theme');
+
+ $json = array();
+
+ if (isset($this->request->get['theme_id'])) {
+ $theme_id = $this->request->get['theme_id'];
+ } else {
+ $theme_id = 0;
+ }
+
+ // Check user has permission
+ if (!$this->user->hasPermission('modify', 'design/theme')) {
+ $json['error'] = $this->language->get('error_permission');
+ }
+
+ if (!$json) {
+ $this->load->model('design/theme');
+
+ $this->model_design_theme->deleteTheme($theme_id);
+
+ $json['success'] = $this->language->get('text_success');
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+}