-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmod_vmassign_groups.php
145 lines (119 loc) · 5.14 KB
/
mod_vmassign_groups.php
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
<?php
/**
* mod_vmassign_groups - Virtuemart Buyers to Joomla! Groups bridge
* @copyright (C) 2014 Reinhold Kainhofer, Open Tools
* Based on code @copyright (C) 2003-2012 Nordmograph
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2
* @link http://www.open-tools.net/ Official website
**/
defined( '_JEXEC' ) or die( 'Restricted access' );
$db = JFactory::getDBO();
$lang = JFactory::getLanguage();
$langtag = $lang->get('tag');
$dblangtag = strtolower(str_replace( '-' , '_' , $langtag ) );
$selectsize = $params->get('selectsize',10);
$product_ids = JRequest::getVar('vmassigngroups_productids', '');
$group_ids = JRequest::getVar('vmassigngroups_groupids', '');
$message = '';
// jimport( 'joomla.access.access' );
jimport( 'joomla.user.helper' );
function getGroupsMap() {
$db = JFactory::getDbo();
$db->setQuery(
'SELECT a.id AS value, a.title AS text, COUNT(DISTINCT b.id) AS level' .
' FROM #__usergroups AS a' .
' LEFT JOIN '.$db->quoteName('#__usergroups').' AS b ON a.lft > b.lft AND a.rgt < b.rgt' .
' GROUP BY a.id, a.title, a.lft, a.rgt' .
' ORDER BY a.lft ASC'
);
$options = $db->loadObjectList();
// Check for a database error.
if ($db->getErrorNum()) {
JError::raiseNotice(500, $db->getErrorMsg());
return null;
}
$res = array();
foreach ($options as $option) {
$res[$option->value] = $option->text;
}
return $res;
}
if($product_ids!='' && $group_ids!=''){
$q = "SELECT DISTINCT(vo.`virtuemart_user_id`) AS user_id , u.`name`
FROM `#__virtuemart_orders` vo
LEFT JOIN `#__virtuemart_order_items` voi ON voi.`virtuemart_order_id` = vo.`virtuemart_order_id`
LEFT JOIN `#__users` AS u ON u.`id` = ABS(vo.`virtuemart_user_id`)
WHERE voi.`virtuemart_product_id` IN (".join(',',$product_ids).") AND voi.`order_status` IN (\"S\", \"C\")";
$db->setQuery($q);
$cust_datas = $db->loadObjectList();
$groupnames = getGroupsMap();
foreach ($cust_datas as $cust_data){
$currentgroups = JUserHelper::getUserGroups($cust_data->user_id);
$addedgroups = array();
foreach (array_diff($group_ids, $currentgroups) as $g) {
$ret = JUserHelper::addUserToGroup($cust_data->user_id, $g);
if (is_a($ret, 'Exception')) {
JFactory::getApplication()->enqueueMessage(JText::sprintf("Unable to assign user '%s' to group '%s': %s", $cust_data->name,$groupnames[$g], $ret->getMessage() ), 'error');
} else {
$addedgroups[] = $groupnames[$g];
}
}
if (!empty($addedgroups)) {
echo "<p class='vmassign_group_result' style=\"border-bottom: dashed 1px #8080FF; background: #E0E0FF; margin: 2px 5px; padding: 1px 5px; \">Added user '".$cust_data->name."' (".$cust_data->user_id.") to groups: ".join(", ", $addedgroups)."</p>";
}
}
}
/* All Virtuemart Products */
$q = "SELECT `virtuemart_product_id` AS product_id , `product_name` FROM `#__virtuemart_products_".$dblangtag."` ORDER BY `product_name` ";
$db->setQuery($q);
$products = $db->loadObjectList();
$products_select = '<select name="vmassigngroups_productids[]" MULTIPLE size="'.$selectsize.'">';
foreach($products as $product){
$products_select .= '<option value="'.$product->product_id.'">'.$product->product_name.'</option>';
}
$products_select .= '</select>';
/* All Joomla user groups */
function getGroups() {
$db = JFactory::getDbo();
$db->setQuery(
'SELECT a.id AS value, a.title AS text, COUNT(DISTINCT b.id) AS level' .
' FROM #__usergroups AS a' .
' LEFT JOIN '.$db->quoteName('#__usergroups').' AS b ON a.lft > b.lft AND a.rgt < b.rgt' .
' GROUP BY a.id, a.title, a.lft, a.rgt' .
' ORDER BY a.lft ASC'
);
$options = $db->loadObjectList();
// Check for a database error.
if ($db->getErrorNum()) {
JError::raiseNotice(500, $db->getErrorMsg());
return null;
}
foreach ($options as &$option) {
$option->text = str_repeat('- ', $option->level).$option->text;
}
return $options;
}
$lists_select = '<select name="vmassigngroups_groupids[]" MULTIPLE size="'.$selectsize.'">';
foreach(getGroups() as $group){
$lists_select .= '<option value="'.$group->value.'">'.$group->text.'</option>';
}
$lists_select .= '</select>';
?>
<div style="text-align:center;">
<form>
<table class="category" width="100%">
<tr>
<td style="vertical-align:top;text-align:left;" width="50%"><div ><label>Add Customers for these products: <br />(multiple select)</label><br/>
<?php echo $products_select; ?>
</div></td>
<td style="vertical-align:top;text-align:left;" width="50%"><div ><label>To these Joomla! groups:<br />(multiple select)</label><br />
<?php echo $lists_select; ?>
</div></td>
</tr>
</table>
<input type="submit" name="assign" id="assign" class="button" value="Assign" /><br /><br />
</form>
<a href="index.php?option=com_users&view=group&layout=edit">Add an Joomla user group</a> | <a href="index.php?option=com_modules&view=module&layout=edit&id=<?php echo $module->id; ?>">Edit module</a> | <a href="http://www.open-tools.net/" target="_blank">Open Tools Support</a>
</div>
<?php
echo '<div style="margin:10px;">'.$message.'</div>';