Skip to content
Snippets Groups Projects
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>';