PluginProbe
VikBooking Hotel Booking Engine & PMS / trunk
VikBooking Hotel Booking Engine & PMS vtrunk
1.8.15 1.8.14 1.8.13 1.8.12 1.8.11 1.8.10 1.8.9 1.8.6 1.8.7 1.8.8 trunk 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.7.3 All 36 releases
vikbooking / admin / views / shortcodes / view.html.php

view.html.php in VikBooking Hotel Booking Engine & PMS trunk, at admin/views/shortcodes/view.html.php

186 lines 4.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * @package VikBooking
4 * @subpackage com_vikbooking
5 * @author Alessio Gaggii - E4J srl
6 * @copyright Copyright (C) 2023 E4J srl. All rights reserved.
7 * @license GNU General Public License version 2 or later; see LICENSE
8 * @link https://vikwp.com
9 */
10
11 // No direct access
12 defined('ABSPATH') or die('No script kiddies please!');
13
14 jimport('joomla.application.component.view');
15 jimport('adapter.acl.access');
16
17 /**
18 * VikBooking Shortcodes view.
19 * @wponly
20 *
21 * @since 1.0
22 */
23 class VikBookingViewShortcodes extends JView
24 {
25 /**
26 * @override
27 * View display method.
28 *
29 * @return void
30 */
31 public function display($tpl = null)
32 {
33 $app = JFactory::getApplication();
34 $user = JFactory::getUser();
35
36 if (!$user->authorise('core.admin', 'com_vikbooking'))
37 {
38 wp_die(
39 '<h1>' . JText::translate('FATAL_ERROR') . '</h1>' .
40 '<p>' . JText::translate('RESOURCE_AUTH_ERROR') . '</p>',
41 403
42 );
43 }
44
45 $this->returnLink = $app->input->getBase64('return', '');
46
47 // get filters
48 $filters = array();
49 $filters['search'] = $app->getUserStateFromRequest('shortcode.filters.search', 'filter_search', '', 'string');
50 $filters['lang'] = $app->getUserStateFromRequest('shortcode.filters.lang', 'filter_lang', '*', 'string');
51 $filters['type'] = $app->getUserStateFromRequest('shortcode.filters.type', 'filter_type', '', 'string');
52
53 $this->filters = $filters;
54
55 // get shortcodes
56
57 $this->limit = $app->getUserStateFromRequest('shortcodes.limit', 'limit', $app->get('list_limit'), 'uint');
58 $this->offset = $app->input->getUint('limitstart', 0);
59 $this->navbut = '';
60
61 $this->shortcodes = $this->hierarchicalShortcodes();
62
63 JLoader::import('adapter.filesystem.folder');
64
65 $this->views = array();
66
67 // get all the views that contain a default.xml file
68 // [0] : base path
69 // [1] : query
70 // [2] : true for recursive search
71 // [3] : true to return full paths
72 $files = JFolder::files(VBO_SITE_PATH . DIRECTORY_SEPARATOR . 'views', 'default.xml', true, true);
73
74 foreach ($files as $f)
75 {
76 // retrieve the view ID from the path: /views/[ID]/tmpl/default.xml
77 if (preg_match("/[\/\\\\]views[\/\\\\](.*?)[\/\\\\]tmpl[\/\\\\]default\.xml$/i", $f, $matches))
78 {
79 $id = $matches[1];
80 // load the XML form
81 $form = JForm::getInstance($id, $f);
82 // get the view title
83 $this->views[$id] = (string) $form->getXml()->layout->attributes()->title;
84 }
85 }
86
87 $this->addToolbar();
88
89 // display parent
90 parent::display($tpl);
91 }
92
93 /**
94 * Helper method to setup the toolbar.
95 *
96 * @return void
97 */
98 public function addToolbar()
99 {
100 JToolbarHelper::title(JText::translate('VBOSHORTCDSMENUTITLE'));
101
102 JToolbarHelper::addNew('shortcodes.create');
103 JToolbarHelper::editList('shortcodes.edit');
104 JToolbarHelper::deleteList(JText::translate('VBDELCONFIRM'), 'shortcodes.delete');
105 JToolbarHelper::cancel('shortcodes.back');
106 }
107
108 /**
109 * Retrieves the shortcodes by using a hierarchical ordering.
110 *
111 * @return array An array of shortcodes.
112 *
113 * @since 1.5
114 */
115 protected function hierarchicalShortcodes()
116 {
117 $dbo = JFactory::getDbo();
118
119 // loads all the existing shortcodes
120 $q = $dbo->getQuery(true)
121 ->select('SQL_CALC_FOUND_ROWS *')
122 ->from($dbo->qn('#__vikbooking_wpshortcodes'));
123
124 /**
125 * Filters the shortcodes by using the requested values.
126 *
127 * @since 1.1.5
128 */
129
130 if ($this->filters['search'])
131 {
132 $q->where($dbo->qn('name') . ' LIKE ' . $dbo->q("%{$this->filters['search']}%"));
133 }
134
135 if ($this->filters['lang'] != '*')
136 {
137 $q->where($dbo->qn('lang') . ' = ' . $dbo->q($this->filters['lang']));
138 }
139
140 if ($this->filters['type'])
141 {
142 $q->where($dbo->qn('type') . ' = ' . $dbo->q($this->filters['type']));
143 }
144
145 $dbo->setQuery($q);
146 $dbo->execute();
147
148 if (!$dbo->getNumRows())
149 {
150 return [];
151 }
152
153 $model = JModel::getInstance('vikbooking', 'shortcode', 'admin');
154
155 $shortcodes = [];
156
157 foreach ($dbo->loadObjectList() as $shortcode)
158 {
159 // load shortcode ancestors
160 $shortcode->ancestors = $model->getAncestors($shortcode);
161
162 // create ordering leverage, based on version comparison
163 $tmp = array_merge([$shortcode->id], $shortcode->ancestors);
164 $shortcode->leverage = implode('.', array_reverse($tmp));
165
166 $shortcodes[] = $shortcode;
167 }
168
169 // sort shortcodes by comparing the evaluated leverage
170 usort($shortcodes, function($a, $b)
171 {
172 return version_compare($a->leverage, $b->leverage);
173 });
174
175 // create pagination
176 jimport('joomla.html.pagination');
177 $pageNav = new JPagination(count($shortcodes), $this->offset, $this->limit);
178 $this->navbut = '<table align="center"><tr><td>' . $pageNav->getListFooter() . '</td></tr></table>';
179
180 // take only the records that metch the pagination query
181 $shortcodes = array_splice($shortcodes, $this->offset, $this->limit);
182
183 return $shortcodes;
184 }
185 }
186