AntonLV 9 лет назад
Родитель
Сommit
8a736a14bf

+ 8 - 14
modules/boonex/acl/classes/BxAclGridAdministration.php

@@ -50,11 +50,12 @@ class BxAclGridAdministration extends BxAclGridLevels
         	$iPeriod = $oForm->getCleanValue('period');
         	$sPeriodUnit = $oForm->getCleanValue('period_unit');
 
+        	if(!empty($iPeriod) && empty($sPeriodUnit)) 
+        	    return echoJson(array('msg' => _t('_bx_acl_form_price_input_err_period_unit')));
+        	
             $aPrice = $this->_oModule->_oDb->getPrices(array('type' => 'by_level_id_duration', 'level_id' => $iLevel, 'period' => $iPeriod, 'period_unit' => $sPeriodUnit));
-            if(!empty($aPrice) && is_array($aPrice)) {
-                echoJson(array('msg' => _t('_bx_acl_err_price_duplicate')));
-                return;
-            }
+            if(!empty($aPrice) && is_array($aPrice))
+                return echoJson(array('msg' => _t('_bx_acl_err_price_duplicate')));
 
             $aLevel = $this->_oModule->_oDb->getLevels(array('type' => 'by_id', 'value' => $iLevel));
             $sName = uriGenerate(strtolower(_t($aLevel['name'])) . ' ' . $iPeriod . ' ' . $sPeriodUnit, $CNF['TABLE_PRICES'], 'name');
@@ -89,16 +90,9 @@ class BxAclGridAdministration extends BxAclGridLevels
 
         $sAction = 'edit';
 
-        $aIds = bx_get('ids');
-        if(!$aIds || !is_array($aIds)) {
-            $iId = (int)bx_get('id');
-            if(!$iId) {
-	            echoJson(array());
-	            exit;
-	        }
-
-            $aIds = array($iId);
-        }
+        $aIds = $this->_getIds();
+        if($aIds === false)
+            return echoJson(array());
 
         $iId = $aIds[0];
 

+ 26 - 3
modules/boonex/acl/classes/BxAclGridLevels.php

@@ -31,16 +31,25 @@ class BxAclGridLevels extends BxTemplGrid
 
 	protected function _getCellPeriod($mixedValue, $sKey, $aField, $aRow)
     {
-    	$mixedValue = _t('_bx_acl_txt_n_unit', $mixedValue, _t($this->_aPeriodUnits[$aRow['period_unit']]));
+        if((int)$mixedValue == 0)
+            $mixedValue = _t('_bx_acl_txt_lifetime');
+        else
+            $mixedValue = _t('_bx_acl_txt_n_unit', $mixedValue, _t($this->_aPeriodUnits[$aRow['period_unit']]));
 
     	return parent::_getCellDefault($mixedValue, $sKey, $aField, $aRow);
     }
 
 	protected function _getCellPrice($mixedValue, $sKey, $aField, $aRow)
     {
-    	$aCurrency = $this->_oModule->_oConfig->getCurrency();
+        if((float)$mixedValue != 0) {
+            $aCurrency = $this->_oModule->_oConfig->getCurrency();
 
-        return parent::_getCellDefault($aCurrency['sign'] . $mixedValue, $sKey, $aField, $aRow);
+            $mixedValue = $aCurrency['sign'] . $mixedValue;
+        }
+        else 
+            $mixedValue = _t('_bx_acl_txt_free');
+
+        return parent::_getCellDefault($mixedValue, $sKey, $aField, $aRow);
     }
 
 	protected function _getCellTrial($mixedValue, $sKey, $aField, $aRow)
@@ -49,6 +58,20 @@ class BxAclGridLevels extends BxTemplGrid
 
         return parent::_getCellDefault($mixedValue, $sKey, $aField, $aRow);
     }
+
+    protected function _getIds()
+    {
+        $aIds = bx_get('ids');
+        if(!$aIds || !is_array($aIds)) {
+            $iId = (int)bx_get('id');
+            if(!$iId) 
+                return false;
+
+            $aIds = array($iId);
+        }
+
+        return $aIds;
+    }
 }
 
 /** @} */

+ 32 - 3
modules/boonex/acl/classes/BxAclGridView.php

@@ -28,21 +28,50 @@ class BxAclGridView extends BxAclGridLevels
         $this->_bTypeRecurring = $this->_oPayment->isAcceptingPayments($this->_iOwner, BX_PAYMENT_TYPE_RECURRING);
     }
 
+    public function performActionChoose()
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        $aIds = $this->_getIds();
+        if($aIds === false)
+            return echoJson(array());
+
+        $aItem = $this->_oModule->_oDb->getPrices(array('type' => 'by_id', 'value' => $aIds[0]));
+        if(!is_array($aItem) || empty($aItem) || (float)$aItem['price'] != 0)
+        	return echoJson(array());
+
+        $aResult = array();
+        $iUserId = bx_get_logged_profile_id();
+        if(BxDolAcl::getInstance()->setMembership($iUserId, $aItem['level_id'], 0, true))
+            $aResult = array('grid' => $this->getCode(false), 'blink' => $aItem['id'], 'msg' => _t('_bx_acl_msg_performed'));
+        else
+            $aResult = array('msg' => _t('_bx_acl_err_cannot_perform'));
+
+        return echoJson($aResult);
+    }
+
     public function getCode($isDisplayHeader = true)
     {
     	return $this->_oPayment->getCartJs() . parent::getCode($isDisplayHeader);
     }
 
-    //TODO: Show Icon
     protected function _getCellLevelIcon($mixedValue, $sKey, $aField, $aRow)
     {
         $mixedValue = $this->_oModule->_oTemplate->displayLevelIcon($mixedValue);
     	return parent::_getCellDefault($mixedValue, $sKey, $aField, $aRow);
     }
 
+    protected function _getActionChoose ($sType, $sKey, $a, $isSmall = false, $isDisabled = false, $aRow = array())
+    {
+        if((float)$aRow['price'] != 0 || BxDolAcl::getInstance()->isMemberLevelInSet(array($aRow['level_id'])))
+            return '';
+
+        return  parent::_getActionDefault($sType, $sKey, $a, false, $isDisabled, $aRow);
+    }
+
 	protected function _getActionBuy ($sType, $sKey, $a, $isSmall = false, $isDisabled = false, $aRow = array())
     {
-        if(!$this->_bTypeSingle || $this->_bTypeRecurring)
+        if((float)$aRow['price'] == 0 || !$this->_bTypeSingle || $this->_bTypeRecurring)
             return '';
 
     	$aJs = $this->_oPayment->getAddToCartJs($this->_iOwner, $this->MODULE, $aRow['id'], 1, true);
@@ -60,7 +89,7 @@ class BxAclGridView extends BxAclGridLevels
 
     protected function _getActionSubscribe ($sType, $sKey, $a, $isSmall = false, $isDisabled = false, $aRow = array())
     {
-        if(!$this->_bTypeRecurring)
+        if((float)$aRow['price'] == 0 || !$this->_bTypeRecurring)
             return '';
 
     	$aJs = $this->_oPayment->getSubscribeJs($this->_iOwner, '', $this->MODULE, $aRow['id'], 1);

+ 7 - 2
modules/boonex/acl/install/langs/en.xml

@@ -19,13 +19,13 @@
 	<string name="_bx_acl_form_price_input_sys_period"><![CDATA[Period]]></string>
 	<string name="_bx_acl_form_price_input_period"><![CDATA[Period]]></string>
 	<string name="_bx_acl_form_price_input_inf_period"><![CDATA[Use 0 for lifetime]]></string>
-	<string name="_bx_acl_form_price_input_err_period"><![CDATA[You need to enter a number of periods here.]]></string>
 	<string name="_bx_acl_form_price_input_sys_period_unit"><![CDATA[Period unit]]></string>
 	<string name="_bx_acl_form_price_input_period_unit"><![CDATA[Period unit]]></string>
+	<string name="_bx_acl_form_price_input_inf_period_unit"><![CDATA[Leave empty for lifetime level.]]></string>
 	<string name="_bx_acl_form_price_input_err_period_unit"><![CDATA[You need to select a period unit here.]]></string>
 	<string name="_bx_acl_form_price_input_sys_price"><![CDATA[Price]]></string>
 	<string name="_bx_acl_form_price_input_price"><![CDATA[Price]]></string>
-	<string name="_bx_acl_form_price_input_err_price"><![CDATA[You need to enter a price here.]]></string>
+	<string name="_bx_acl_form_price_input_inf_price"><![CDATA[Use 0 or leave empty to create free level.]]></string>
 	<string name="_bx_acl_form_price_input_sys_trial"><![CDATA[Trial]]></string>
     <string name="_bx_acl_form_price_input_trial"><![CDATA[Trial]]></string>
     <string name="_bx_acl_form_price_input_inf_trial"><![CDATA[The number of days new customers should receive a free trial. Leave empty to disable trial period.]]></string>
@@ -58,6 +58,8 @@
 	<string name="_bx_acl_grid_action_buy_title"><![CDATA[One-time payment]]></string>
 	<string name="_bx_acl_grid_action_subscribe"><![CDATA[Rent]]></string>
 	<string name="_bx_acl_grid_action_subscribe_title"><![CDATA[Subscribe on recurring payments]]></string>
+	<string name="_bx_acl_grid_action_choose"><![CDATA[Choose]]></string>
+    <string name="_bx_acl_grid_action_choose_title"><![CDATA[Switch to the level for free]]></string>
 
 	<string name="_bx_acl_popup_title_price_add"><![CDATA[Add Pricing Plan]]></string>
 	<string name="_bx_acl_popup_title_price_edit"><![CDATA[Edit Pricing Plan]]></string>
@@ -70,6 +72,7 @@
 
 	<!-- Common Texts -->
 	<string name="_bx_acl_msg_empty_owner"><![CDATA['Site administrator' is empty. You need to mark some profile as 'Site administrator' in Settings of currently active Payment module.]]></string>
+	<string name="_bx_acl_msg_performed"><![CDATA[The action was successfully performed.]]></string>
 	<string name="_bx_acl_err_price_duplicate"><![CDATA[Similar pricing plan is already exists.]]></string>
 	<string name="_bx_acl_err_cannot_perform"><![CDATA[An error appeared. Please report.]]></string>
 
@@ -79,4 +82,6 @@
 	<string name="_bx_acl_txt_manage"><![CDATA[Manage]]></string>
 	<string name="_bx_acl_txt_n_unit"><![CDATA[{0} ({1})]]></string>
 	<string name="_bx_acl_txt_none"><![CDATA[none]]></string>
+	<string name="_bx_acl_txt_free"><![CDATA[free]]></string>
+	<string name="_bx_acl_txt_lifetime"><![CDATA[lifetime]]></string>
 </resources>

+ 5 - 4
modules/boonex/acl/install/sql/install.sql

@@ -28,10 +28,10 @@ INSERT INTO `sys_form_displays` (`display_name`, `module`, `object`, `title`, `v
 INSERT INTO `sys_form_inputs` (`object`, `module`, `name`, `value`, `values`, `checked`, `type`, `caption_system`, `caption`, `info`, `required`, `collapsed`, `html`, `attrs`, `attrs_tr`, `attrs_wrapper`, `checker_func`, `checker_params`, `checker_error`, `db_pass`, `db_params`, `editable`, `deletable`) VALUES
 ('bx_acl_price', @sName, 'id', '', '', 0, 'hidden', '_bx_acl_form_price_input_sys_id', '', '', 1, 0, 0, '', '', '', '', '', '', 'Int', '', 1, 0),
 ('bx_acl_price', @sName, 'level_id', '', '', 0, 'hidden', '_bx_acl_form_price_input_sys_level_id', '', '', 1, 0, 0, '', '', '', '', '', '', 'Int', '', 1, 0),
-('bx_acl_price', @sName, 'period', '', '', 0, 'text', '_bx_acl_form_price_input_sys_period', '_bx_acl_form_price_input_period', '_bx_acl_form_price_input_inf_period', 1, 0, 0, '', '', '', 'Avail', '', '_bx_acl_form_price_input_err_period', 'Int', '', 1, 0),
-('bx_acl_price', @sName, 'period_unit', '', '#!bx_acl_period_units', 0, 'select', '_bx_acl_form_price_input_sys_period_unit', '_bx_acl_form_price_input_period_unit', '', 1, 0, 0, '', '', '', 'Avail', '', '_bx_acl_form_price_input_err_period_unit', 'Xss', '', 1, 0),
+('bx_acl_price', @sName, 'period', '', '', 0, 'text', '_bx_acl_form_price_input_sys_period', '_bx_acl_form_price_input_period', '_bx_acl_form_price_input_inf_period', 1, 0, 0, '', '', '', '', '', '', 'Int', '', 1, 0),
+('bx_acl_price', @sName, 'period_unit', '', '#!bx_acl_period_units', 0, 'select', '_bx_acl_form_price_input_sys_period_unit', '_bx_acl_form_price_input_period_unit', '_bx_acl_form_price_input_inf_period_unit', 1, 0, 0, '', '', '', '', '', '', 'Xss', '', 1, 0),
 ('bx_acl_price', @sName, 'trial', '', '', 0, 'text', '_bx_acl_form_price_input_sys_trial', '_bx_acl_form_price_input_trial', '_bx_acl_form_price_input_inf_trial', 0, 0, 0, '', '', '', '', '', '', 'Int', '', 1, 0),
-('bx_acl_price', @sName, 'price', '', '', 0, 'text', '_bx_acl_form_price_input_sys_price', '_bx_acl_form_price_input_price', '', 1, 0, 0, '', '', '', 'Avail', '', '_bx_acl_form_price_input_err_price', 'Float', '', 1, 0),
+('bx_acl_price', @sName, 'price', '', '', 0, 'text', '_bx_acl_form_price_input_sys_price', '_bx_acl_form_price_input_price', '_bx_acl_form_price_input_inf_price', 1, 0, 0, '', '', '', '', '', '', 'Float', '', 1, 0),
 ('bx_acl_price', @sName, 'controls', '', 'do_submit,do_cancel', 0, 'input_set', '', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
 ('bx_acl_price', @sName, 'do_submit', '_bx_acl_form_price_input_do_submit', '', 0, 'submit', '_bx_acl_form_price_input_sys_do_submit', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
 ('bx_acl_price', @sName, 'do_cancel', '_bx_acl_form_price_input_do_cancel', '', 0, 'button', '_bx_acl_form_price_input_sys_do_cancel', '', '', 0, 0, 0, 'a:2:{s:7:"onclick";s:45:"$(''.bx-popup-applied:visible'').dolPopupHide()";s:5:"class";s:22:"bx-def-margin-sec-left";}', '', '', '', '', '', '', '', 1, 0);
@@ -97,7 +97,8 @@ INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `icon
 ('bx_acl_administration', 'bulk', 'delete', '_bx_acl_grid_action_delete', '', 0, 1, 1),
 
 ('bx_acl_view', 'single', 'buy', '_bx_acl_grid_action_buy', 'cart-plus', 0, 0, 1),
-('bx_acl_view', 'single', 'subscribe', '_bx_acl_grid_action_subscribe', 'credit-card', 0, 0, 2);
+('bx_acl_view', 'single', 'subscribe', '_bx_acl_grid_action_subscribe', 'credit-card', 0, 0, 2),
+('bx_acl_view', 'single', 'choose', '_bx_acl_grid_action_choose', 'check-square-o', 0, 0, 3);
 
 
 -- STUDIO PAGE & WIDGET

+ 7 - 2
modules/boonex/russian/data/langs/bx_acl/ru.xml

@@ -19,13 +19,13 @@
 	<string name="_bx_acl_form_price_input_sys_period"><![CDATA[Период]]></string>
 	<string name="_bx_acl_form_price_input_period"><![CDATA[Период]]></string>
 	<string name="_bx_acl_form_price_input_inf_period"><![CDATA[Используйте 0 для пожизненного]]></string>
-	<string name="_bx_acl_form_price_input_err_period"><![CDATA[Здесь Вам необходимо ввести количество периодов.]]></string>
 	<string name="_bx_acl_form_price_input_sys_period_unit"><![CDATA[Единица измерения периода]]></string>
 	<string name="_bx_acl_form_price_input_period_unit"><![CDATA[Единица измерения периода]]></string>
+	<string name="_bx_acl_form_price_input_inf_period_unit"><![CDATA[Оставьте пустым для пожизненного уровня.]]></string>
 	<string name="_bx_acl_form_price_input_err_period_unit"><![CDATA[Здесь Вам необходимо выбрать единицу измерения периода.]]></string>
 	<string name="_bx_acl_form_price_input_sys_price"><![CDATA[Цена]]></string>
 	<string name="_bx_acl_form_price_input_price"><![CDATA[Цена]]></string>
-	<string name="_bx_acl_form_price_input_err_price"><![CDATA[Здесь Вам необходимо ввести цену.]]></string>
+	<string name="_bx_acl_form_price_input_inf_price"><![CDATA[Введите 0 или оставьте пустым для создания бесплатного уровня.]]></string>
 	<string name="_bx_acl_form_price_input_sys_trial"><![CDATA[Пробный период]]></string>
     <string name="_bx_acl_form_price_input_trial"><![CDATA[Пробный период]]></string>
     <string name="_bx_acl_form_price_input_inf_trial"><![CDATA[Количество пробных дней, которое новые пользователи получат бесплатно. Оставьте пустым для отключения пробного периода.]]></string>
@@ -58,6 +58,8 @@
 	<string name="_bx_acl_grid_action_buy_title"><![CDATA[Единовременный платеж]]></string>
 	<string name="_bx_acl_grid_action_subscribe"><![CDATA[Арендовать]]></string>
 	<string name="_bx_acl_grid_action_subscribe_title"><![CDATA[Подписка на периодические платежи]]></string>
+	<string name="_bx_acl_grid_action_choose"><![CDATA[Выбирать]]></string>
+    <string name="_bx_acl_grid_action_choose_title"><![CDATA[Бесплатно переключиться на уровень]]></string>
 
 	<string name="_bx_acl_popup_title_price_add"><![CDATA[Добавить ценовой план]]></string>
 	<string name="_bx_acl_popup_title_price_edit"><![CDATA[Редактировать ценовой план]]></string>
@@ -70,6 +72,7 @@
 
 	<!-- Common Texts -->
 	<string name="_bx_acl_msg_empty_owner"><![CDATA['Администратор сайта' не задан. Вам необходимо пометить какой-либо профайл как 'Администратор сайта' в настройках активного на данный момент платежного модуля.]]></string>
+	<string name="_bx_acl_msg_performed"><![CDATA[Действие было успешно выполнено.]]></string>
 	<string name="_bx_acl_err_price_duplicate"><![CDATA[Аналогичный ценовой план уже существует.]]></string>
 	<string name="_bx_acl_err_cannot_perform"><![CDATA[Невозможно выполнить действие. Пожалуйста, оповестите нас об этой проблеме.]]></string>
 
@@ -79,4 +82,6 @@
 	<string name="_bx_acl_txt_manage"><![CDATA[Изменить]]></string>
 	<string name="_bx_acl_txt_n_unit"><![CDATA[{0} ({1})]]></string>
     <string name="_bx_acl_txt_none"><![CDATA[нет]]></string>
+    <string name="_bx_acl_txt_free"><![CDATA[бесплатно]]></string>
+    <string name="_bx_acl_txt_lifetime"><![CDATA[пожизненно]]></string>
 </resources>