virtuemart.php
3.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<?php
/**
* @package Regular Labs Library
* @version 18.2.10140
*
* @author Peter van Westen <info@regularlabs.com>
* @link http://www.regularlabs.com
* @copyright Copyright © 2018 Regular Labs All Rights Reserved
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
*/
defined('_JEXEC') or die;
if ( ! is_file(JPATH_LIBRARIES . '/regularlabs/autoload.php'))
{
return;
}
require_once JPATH_LIBRARIES . '/regularlabs/autoload.php';
class JFormFieldRL_VirtueMart extends \RegularLabs\Library\FieldGroup
{
public $type = 'VirtueMart';
public $language = null;
protected function getInput()
{
if ($error = $this->missingFilesOrTables(['categories', 'products']))
{
return $error;
}
return $this->getSelectList();
}
function getCategories()
{
$query = $this->db->getQuery(true)
->select('COUNT(*)')
->from('#__virtuemart_categories AS c')
->where('c.published > -1');
$this->db->setQuery($query);
$total = $this->db->loadResult();
if ($total > $this->max_list_count)
{
return -1;
}
$query->clear()
->select('c.virtuemart_category_id as id, cc.category_parent_id AS parent_id, l.category_name AS title, c.published')
->from('#__virtuemart_categories_' . $this->getActiveLanguage() . ' AS l')
->join('', '#__virtuemart_categories AS c using (virtuemart_category_id)')
->join('LEFT', '#__virtuemart_category_categories AS cc ON l.virtuemart_category_id = cc.category_child_id')
->where('c.published > -1')
->group('c.virtuemart_category_id')
->order('c.ordering, l.category_name');
$this->db->setQuery($query);
$items = $this->db->loadObjectList();
return $this->getOptionsTreeByList($items);
}
function getProducts()
{
$query = $this->db->getQuery(true)
->select('COUNT(*)')
->from('#__virtuemart_products AS p')
->where('p.published > -1');
$this->db->setQuery($query);
$total = $this->db->loadResult();
if ($total > $this->max_list_count)
{
return -1;
}
$query->clear('select')
->select('p.virtuemart_product_id as id, l.product_name AS name, p.product_sku as sku, cl.category_name AS cat, p.published')
->join('LEFT', '#__virtuemart_products_' . $this->getActiveLanguage() . ' AS l ON l.virtuemart_product_id = p.virtuemart_product_id')
->join('LEFT', '#__virtuemart_product_categories AS x ON x.virtuemart_product_id = p.virtuemart_product_id')
->join('LEFT', '#__virtuemart_categories AS c ON c.virtuemart_category_id = x.virtuemart_category_id')
->join('LEFT', '#__virtuemart_categories_' . $this->getActiveLanguage() . ' AS cl ON cl.virtuemart_category_id = c.virtuemart_category_id')
->group('p.virtuemart_product_id')
->order('l.product_name, p.product_sku');
$this->db->setQuery($query);
$list = $this->db->loadObjectList();
return $this->getOptionsByList($list, ['sku', 'cat', 'id']);
}
private function getActiveLanguage()
{
if (isset($this->language))
{
return $this->language;
}
$this->language = 'en_gb';
if ( ! class_exists('VmConfig'))
{
require_once JPATH_ROOT . '/administrator/components/com_virtuemart/helpers/config.php';
}
if ( ! class_exists('VmConfig'))
{
return $this->language;
}
VmConfig::loadConfig();
if ( ! empty(VmConfig::$vmlang))
{
$this->language = str_replace('-', '_', strtolower(VmConfig::$vmlang));
return $this->language;
}
$active_languages = VmConfig::get('active_languages', []);
if ( ! isset($active_languages[0]))
{
return $this->language;
}
$this->language = str_replace('-', '_', strtolower($active_languages[0]));
return $this->language;
}
}