-
Reinhold Kainhofer authoredReinhold Kainhofer authored
mod_vmassign_groups.php 5.14 KiB
<?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>';