diff --git a/buyer_assign_group.php b/buyer_assign_group.php index 2c093223ecf53b86be44bcb4bb878663b12dbe82..6bdf051c93d9ca46f0dad05e66ff5a3688abf7bc 100644 --- a/buyer_assign_group.php +++ b/buyer_assign_group.php @@ -13,7 +13,7 @@ defined('_JEXEC') or die( 'Direct Access to ' . basename( __FILE__ ) . ' is not if (!class_exists('vmCustomPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmcustomplugin.php'); class plgVmCustomBuyer_Assign_Group extends vmCustomPlugin { - + var $counter=0; function __construct(& $subject, $config) { parent::__construct($subject, $config); $this->_tablepkey = 'id'; @@ -38,8 +38,6 @@ class plgVmCustomBuyer_Assign_Group extends vmCustomPlugin { $html = ''; $this->parseCustomParams($field); -// $html .= "<pre>States: ".join(", ", $this->purchased_status)."</pre>"; - $html .= "<pre>Field: ".print_r($this, 1)."</pre>"; $html .= '<table class="admintable">'; $html .= VmHTML::row (array('JHTML', '_'),'VMCUSTOM_BUYER_GROUP_JOOMLA', 'access.usergroup', 'custom_param['.$row.'][joomla_groups][]', $field->joomla_groups, ' multiple data-placeholder=" "', false); $html .= VmHTML::row (array('JHTML', '_'),'VMCUSTOM_BUYER_GROUP_JOOMLA_REMOVE', 'access.usergroup', 'custom_param['.$row.'][joomla_groups_remove][]', $field->joomla_groups_remove, ' multiple data-placeholder=" "', true); @@ -97,22 +95,53 @@ class plgVmCustomBuyer_Assign_Group extends vmCustomPlugin { return $SQLfields; } + function setShopperGroups($uid, $groups) { + $noError = true; + $userModel = VmModel::getModel('user'); + $userModel->setId($uid); + $shoppergroupmodel = VmModel::getModel('ShopperGroup'); + $defaultgroup = $shoppergroupmodel->getDefault(0); + + if(empty($groups) or ($groups == array($defaultgroup->virtuemart_shoppergroup_id))) { + $groups = array(); + } + + // Bind the form fields to the table + $shoppergroupData = array('virtuemart_user_id'=>$uid, + 'virtuemart_shoppergroup_id'=>$groups); + $user_shoppergroups_table = $userModel->getTable('vmuser_shoppergroups'); + $shoppergroupData = $user_shoppergroups_table -> bindChecknStore($shoppergroupData); + $errors = $user_shoppergroups_table->getErrors(); + foreach($errors as $error){ + $this->setError($error); + vmError('Set shoppergroup '.$error); + $noError = false; + } + return $noError; + } + function addShopperGroup($user, $group) { - # TODO + $groups = $user->shopper_groups; + if (!in_array($group, $groups)) { + $groups[] = $group; + return $this->setShopperGroups($user->virtuemart_user_id, $groups); + } + return false; } function removeShopperGroup($user, $group) { - # TODO + $groups = $user->shopper_groups; + if (in_array($group, $groups)) { + $groups=array_diff($groups, array($group)); + return $this->setShopperGroups($user->virtuemart_user_id, $groups); + } + return false; } function setModifiedFlag ($entry, $value) { -JFactory::getApplication()->enqueueMessage("setModifiedFlag: entry=<pre>".print_r($entry,1)."</pre>", 'error'); - $db = JFactory::getDbo(); - $db->setQuery("UPDATE `".$this->_tablename."` SET `modified`=".(int)$value." WHERE `id`=".$entry['id']); - if (!$db->query()) { - JFactory::getApplication()->enqueueMessage("SQL query FAILED: Message: ".$db->getErrorMsg().", SQL: <pre>".$db->getQuery()."</pre>", 'error'); - } - $this->updateOrderStatus($order_id, $order['details']['BT']->order_status, ''); - - # TODO + $db = JFactory::getDbo(); + $db->setQuery("UPDATE `".$this->_tablename."` SET `modified`=".(int)$value." WHERE `id`=".$entry['id']); + if (!$db->query()) { + JFactory::getApplication()->enqueueMessage("SQL query FAILED: Message: ".$db->getErrorMsg().", SQL: <pre>".$db->getQuery()."</pre>", 'error'); + } } function updateOrderStatus ($order_id, $order_status, $old_order_status) { @@ -148,78 +177,58 @@ JFactory::getApplication()->enqueueMessage("setModifiedFlag: entry=<pre>".print_ $pstates[$cid] = $c->purchased_status; } } -foreach ($users as $u) { -JFactory::getApplication()->enqueueMessage("User: Joomla groups <pre>".print_r($u->JUser->groups,1)."</pre>, Shopper Groups: <pre>".print_r($u->shopper_groups,1)."</pre>", 'info'); -} -// JFactory::getApplication()->enqueueMessage("User: <pre>".print_r($users,1)."</pre>", 'info'); -// JFactory::getApplication()->enqueueMessage("User: <pre>".print_r($users,1)."</pre>", 'info'); // 3) Check which custom field entries need some change foreach ($orderEntries as $e) { -try { - $uid = $e['virtuemart_user_id']; - $cid = $e['virtuemart_custom_id']; - $purchased = in_array($order_status, $pstates[$cid]) && !in_array($old_order_status, $pstates[$cid]); - $unpurchased = !in_array($order_status, $pstates[$cid]) && in_array($old_order_status, $pstates[$cid]); + try { + $uid = $e['virtuemart_user_id']; + $cid = $e['virtuemart_custom_id']; + $purchased = in_array($order_status, $pstates[$cid]) && !in_array($old_order_status, $pstates[$cid]); + $unpurchased = !in_array($order_status, $pstates[$cid]) && in_array($old_order_status, $pstates[$cid]); -JFactory::getApplication()->enqueueMessage("Order status: $order_status, old order status: $old_order_status, pstates: ".print_r($pstates[$cid],1), 'info'); -JFactory::getApplication()->enqueueMessage("Purchased: $purchased, Unpurchased: $unpurchased", 'info'); - if ($purchased) { - $modified = false; - if ($e['group_type']==0) { // Joomla User Group -// $modified = ($e['group_add'] != ); - if ($e['group_add']==1 && !in_array($e['group_id'], $users[$uid]->JUser->groups)) { // Add to Joomla user group -JFactory::getApplication()->enqueueMessage("Trying to add user $uid to group ".$e['group_id'], 'info'); - $res = JUserHelper::addUserToGroup ($uid, $e['group_id']); - } elseif ($e['group_add']==0 && in_array($e['group_id'], $users[$uid]->JUser->groups)) { // Remove from Joomla user group -JFactory::getApplication()->enqueueMessage("Trying to remove user $uid from group ".$e['group_id'], 'info'); - $res = JUserHelper::removeUserFromGroup ($uid, $e['group_id']); - } - $modified = $res; -JFactory::getApplication()->enqueueMessage("Result: ".print_r($res,1), 'info'); - } elseif ($e['group_type']=1) { // Virtuemart Shopper Group - if ($e['group_add']==1) { // Add to Virtuemart Shopper group - $res = $this->addShopperGroup($users[$uid], $e['group_id']); - } elseif ($e['group_add']==0) { // Remove from Virtuemart Shopper group - $res = $this->removeShopperGroup ($users[$uid], $e['group_id']); + if ($purchased) { + $modified = false; + if ($e['group_type']==0) { // Joomla User Group + if ($e['group_add']==1 && !in_array($e['group_id'], $users[$uid]->JUser->groups)) { // Add to Joomla user group + $modified = JUserHelper::addUserToGroup ($uid, $e['group_id']); + } elseif ($e['group_add']==0 && in_array($e['group_id'], $users[$uid]->JUser->groups)) { // Remove from Joomla user group + $modified = JUserHelper::removeUserFromGroup ($uid, $e['group_id']); + } + } elseif ($e['group_type']=1) { // Virtuemart Shopper Group + if ($e['group_add']==1) { // Add to Virtuemart Shopper group + $modified = $this->addShopperGroup($users[$uid], $e['group_id']); + } elseif ($e['group_add']==0) { // Remove from Virtuemart Shopper group + $modified = $this->removeShopperGroup ($users[$uid], $e['group_id']); + } } - } - if ($modified) { - $this->setModifiedFlag ($e, $modified); - } - } elseif ($unpurchased && $e['modified']) { - // Undo the addition/removal when a product purchase is cancelled - if ($e['group_type']==0) { // Joomla User Group -JFactory::getApplication()->enqueueMessage("Trying to Undo add (".$e['group_add'].") user $uid to group ".$e['group_id'], 'info'); - if ($e['group_add']==1) { // Remove from Joomla user group again - $res = JUserHelper::removeUserFromGroup ($uid, $e['group_id']); - } elseif ($e['group_add']==0) { // Add to Joomla user group again - $res = JUserHelper::addUserToGroup ($uid, $e['group_id']); + if ($modified) { + $this->setModifiedFlag ($e, $modified); } -JFactory::getApplication()->enqueueMessage("Result: ".print_r($res,1), 'info'); - } elseif ($e['group_type']==1) { // Virtuemart Shopper Group - if ($e['group_add']==1) { // Remove from Virtuemart Shopper group again - $modified = $this->removeShopperGroup($users[$uid], $e['group_id']); - } elseif ($e['group_add']==0) { // Add from Virtuemart Shopper group again - $modified = $this->addShopperGroup ($users[$uid], $e['group_id']); + } elseif ($unpurchased && $e['modified']) { + // Undo the addition/removal when a product purchase is cancelled + if ($e['group_type']==0) { // Joomla User Group + if ($e['group_add']==1) { // Remove from Joomla user group again + $modified = JUserHelper::removeUserFromGroup ($uid, $e['group_id']); + } elseif ($e['group_add']==0) { // Add to Joomla user group again + $modified = JUserHelper::addUserToGroup ($uid, $e['group_id']); + } + } elseif ($e['group_type']==1) { // Virtuemart Shopper Group + if ($e['group_add']==1) { // Remove from Virtuemart Shopper group again + $modified = $this->removeShopperGroup($users[$uid], $e['group_id']); + } elseif ($e['group_add']==0) { // Add from Virtuemart Shopper group again + $modified = $this->addShopperGroup ($users[$uid], $e['group_id']); + } } + // Clear the modified flag in the database + $this->setModifiedFlag ($e, 0); } - // Clear the modified flag in the database - $this->setModifiedFlag ($e, 0); } -} -catch (Exception $ex) { -JFactory::getApplication()->enqueueMessage("ERROR: <pre>".$ex->getMessage()."</pre>", 'info'); - $ex->getMessage(); - JLog::add('Unable to add/remove user to/from group'); -} + catch (Exception $ex) { + JFactory::getApplication()->enqueueMessage("ERROR: <pre>".$ex->getMessage()."</pre>", 'info'); + JLog::add('Unable to add/remove user to/from group: '.$ex->getMessage()); + } } - - -// JFactory::getApplication()->enqueueMessage("Order Entries: <pre>".print_r($orderEntries,1)."</pre>", 'info'); -// JFactory::getApplication()->enqueueMessage("Purchased States: <pre>".print_r($pstates,1)."</pre>", 'info'); - } function plgVmCouponUpdateOrderStatus($data, $old_order_status) { @@ -238,6 +247,8 @@ JFactory::getApplication()->enqueueMessage("ERROR: <pre>".$ex->getMessage()."</ $uid = $user->JUser->id; $order_id = $order['details']['BT']->virtuemart_order_id; + $orderModel = VmModel::getModel('orders'); + $order = $orderModel->getOrder($order_id); $values = array(); $customModel = VmModel::getModel('customfields'); diff --git a/releases/plg_opentools_vm2_buyer_assign_group_v0.1.zip b/releases/plg_opentools_vm2_buyer_assign_group_v0.1.zip new file mode 100644 index 0000000000000000000000000000000000000000..925051084c99798dec6134b7b811ead03676e994 Binary files /dev/null and b/releases/plg_opentools_vm2_buyer_assign_group_v0.1.zip differ