Selaa lähdekoodia

UNA Market like on Boonex site: Changes in Studio Store.

AntonLV 10 vuotta sitten
vanhempi
sitoutus
a487ed4b32

+ 14 - 9
modules/boonex/market/classes/BxMarketDb.php

@@ -34,17 +34,15 @@ class BxMarketDb extends BxBaseModTextDb
     	$aMethod = array('name' => 'getAll', 'params' => array(0 => 'query'));
 		$aOrderWay = array('up' => 'ASC', 'down' => 'DESC');
 
-    	$sFieldsClause = $sJoinClause = $sWhereClause = $sOrderClause = '';
+    	$sFieldsClause = $sJoinClause = $sWhereClause = $sGroupClause = $sOrderClause = '';
 
     	//--- Add file info.
     	$sFieldsClause .= " `te`.`" . $CNF['FIELD_PACKAGE'] . "` AS `file_id`, `tf`.`file_name` AS `file_name`, `tfe`.`version` AS `file_version`, ";
     	$sJoinClause .= " LEFT JOIN `" . $CNF['TABLE_FILES2ENTRIES'] . "` AS `tfe` ON `te`.`" . $CNF['FIELD_ID'] . "`=`tfe`.`content_id` AND `te`.`" . $CNF['FIELD_PACKAGE'] . "`=`tfe`.`file_id` LEFT JOIN `" . $CNF['TABLE_FILES'] . "` AS `tf` ON `te`.`" . $CNF['FIELD_PACKAGE'] . "`=`tf`.`id` ";
 
     	//--- Add license checking for Public listings if Client is specified.
-    	if(in_array($aParams['type'], array('featured', 'category', 'tag', 'vendor', 'keyword')) && isset($aParams['client']) && (int)$aParams['client'] != 0) {
-    		$sFieldsClause .= " `tl`.`added` AS `purchased_on`, `tl`.`added` AS `purchased_on_f`, UNIX_TIMESTAMP() - `tl`.`added` AS `purchased_ago`, ";
-    		$sJoinClause .= $this->prepareAsString(" LEFT JOIN `" . $CNF['TABLE_LICENSES'] . "` AS `tl` ON `te`.`id`=`tl`.`product_id` AND `tl`.`profile_id`=? AND (`tl`.`domain`=?" . (empty($aParams['key_assigned']) ? " OR `tl`.`domain`=''" : "") . ") ", (int)$aParams['client'], $aParams['key']);
-    	}
+    	if(in_array($aParams['type'], array('featured', 'category', 'tag', 'vendor', 'keyword')) && isset($aParams['client']) && (int)$aParams['client'] != 0)
+    		$sFieldsClause .= $this->prepareAsString(" (SELECT `tl`.`added` FROM `" . $CNF['TABLE_LICENSES'] . "` AS `tl` WHERE `tl`.`product_id`=`te`.`" . $CNF['FIELD_ID'] . "` AND `tl`.`profile_id`=? AND (`tl`.`domain`=?" . (empty($aParams['key_assigned']) ? " OR `tl`.`domain`=''" : "") . ") LIMIT 1) AS `purchased_on`, ", (int)$aParams['client'], $aParams['key']);
 
 		switch($aParams['type']) {
 			case 'id':
@@ -132,25 +130,32 @@ class BxMarketDb extends BxBaseModTextDb
 				break;
 
 			case 'granted':
-				$sFieldsClause .= " '" . $aParams['license']['license'] . "' AS `license`, '" . $aParams['license']['profile_id'] . "' AS `purchased_by`, '' AS `purchased_for`, '" . $aParams['license']['added'] . "' AS `purchased_on`, '" . $aParams['license']['added'] . "' AS `purchased_on_f`, UNIX_TIMESTAMP() - '" . $aParams['license']['added'] . "' AS `purchased_ago`, ";
+				$sFieldsClause .= " '" . $aParams['license']['license'] . "' AS `license`, '" . $aParams['license']['profile_id'] . "' AS `purchased_by`, '' AS `purchased_for`, '" . $aParams['license']['added'] . "' AS `purchased_on`, ";
 				$sWhereClause .= $this->prepareAsString(" AND `te`.`" . $CNF['FIELD_AUTHOR'] . "`=? AND (`te`.`" . $CNF['FIELD_PRICE_SINGLE'] . "`<>'0' OR `te`.`" . $CNF['FIELD_PRICE_RECURRING'] . "`<>'0') ", (int)$aParams['value']);
 				$sOrderClause = "`te`.`added` " . (isset($aParams['order_way']) ? $aOrderWay[$aParams['order_way']] : "DESC");
 				break;
 
 			case 'purchased':
-				$sFieldsClause .= " `tl`.`license` AS `license`, `tl`.`profile_id` AS `purchased_by`, `tl`.`domain` AS `purchased_for`, `tl`.`added` AS `purchased_on`, `tl`.`added` AS `purchased_on_f`, UNIX_TIMESTAMP() - `tl`.`added` AS `purchased_ago`, ";
+				$sFieldsClause .= " `tl`.`license` AS `license`, `tl`.`profile_id` AS `purchased_by`, `tl`.`domain` AS `purchased_for`, `tl`.`added` AS `purchased_on`, ";
+				$sJoinClause .= " LEFT JOIN `" . $CNF['TABLE_LICENSES'] . "` AS `tl` ON `te`.`" . $CNF['FIELD_ID'] . "`=`tl`.`product_id` ";
+				$sWhereClause .= $this->prepareAsString(" AND `tl`.`profile_id`=? AND (`tl`.`domain`=?" . (empty($aParams['key_assigned']) ? " OR `tl`.`domain`=''" : "") . ") ", (int)$aParams['client'], $aParams['key']);
+				$sGroupClause .= "`tl`.`product_id`";
+				/*
+				$sFieldsClause .= " `tl`.`license` AS `license`, `tl`.`profile_id` AS `purchased_by`, `tl`.`domain` AS `purchased_for`, `tl`.`added` AS `purchased_on`, ";
 				$sJoinClause .= " LEFT JOIN `" . $CNF['TABLE_LICENSES'] . "` AS `tl` ON `te`.`" . $CNF['FIELD_ID'] . "`=`tl`.`product_id` ";
 				$sWhereClause .= $this->prepareAsString(" AND `tl`.`profile_id`=? AND (`tl`.`domain`=?" . (empty($aParams['key_assigned']) ? " OR `tl`.`domain`=''" : "") . ") ", (int)$aParams['client'], $aParams['key']);
+				*/
 				$sOrderClause = "`tl`.`added` " . (isset($aParams['order_way']) ? $aOrderWay[$aParams['order_way']] : "DESC");
 				break;
 		}
 
-		$sOrderClause = $sOrderClause ? " ORDER BY " . $sOrderClause : "";
+		$sGroupClause = $sGroupClause ? "GROUP BY " . $sGroupClause : "";
+		$sOrderClause = $sOrderClause ? "ORDER BY " . $sOrderClause : "";
 
 		$aMethod['params'][0] = "SELECT
         		" . $sFieldsClause . "`te`.*
             FROM `" . $this->_oConfig->CNF['TABLE_ENTRIES'] . "` AS `te`" . $sJoinClause . "
-            WHERE 1" . $sWhereClause . " " . $sOrderClause;
+            WHERE 1" . $sWhereClause . " " . $sGroupClause . " " . $sOrderClause;
 
         return call_user_func_array(array($this, $aMethod['name']), $aMethod['params']);
     }

+ 2 - 1
studio/classes/BxDolStudioInstallerUtils.php

@@ -318,7 +318,8 @@ class BxDolStudioInstallerUtils extends BxDolInstallerUtils implements iBxDolSin
     	$oModuleDb->updateModule(array('hash' => ''));
         if(!empty($aProducts) && is_array($aProducts))
 	        foreach ($aProducts as $aProduct)
-	        	$oModuleDb->updateModule(array('hash' => $aProduct['hash']), array('name' => $aProduct['name']));
+	        	if(!empty($aProduct['hash']))
+	        		$oModuleDb->updateModule(array('hash' => $aProduct['hash']), array('name' => $aProduct['name']));
 
 		return $aProducts;
     }

+ 9 - 2
studio/template/css/store.css

@@ -93,7 +93,10 @@ div.bx-std-pc-action div.bx-std-pc-buttons .bx-btn:first-child {
     -webkit-justify-content: flex-start;
     justify-content: flex-start;
 }
-
+.bx-std-products .bx-msg-box-container {
+	width: 100%;
+	padding: 0px;
+}
 .bx-std-products .bx-std-product-gallery {
     display: -webkit-box;
     display: -webkit-flex;
@@ -287,11 +290,15 @@ div.bx-std-pv-actions .bx-std-pv-action {
 	vertical-align: top;
 }
 
-div.bx-std-pv-actions .bx-std-pv-action.bx-std-pva-price span {
+div.bx-std-pv-actions .bx-std-pv-action.bx-std-pva-price .bx-std-pva-or {
 	line-height: 40px;
 	line-height: 2.5rem;
 }
 
+div.bx-std-pv-actions .bx-std-pv-action.bx-std-pva-price .bx-std-pva-or:first-child {
+	display: none;
+}
+
 div.bx-std-pv-line span.bx-std-pv-cpt {
 	font-weight: bold;
 }

+ 34 - 29
studio/template/scripts/BxBaseStudioStore.php

@@ -491,36 +491,41 @@ class BxBaseStudioStore extends BxDolStudioStore
                     'bx_repeat:screenshots' => $aScreenshots
                 )
             ),
-            'bx_if:show_purchase_single' => array(
-                'condition' => $bPurchaseSingle && !$bInCart,
-                'content' => array(
-                    'js_object' => $sJsObject,
-                    'id' => $aProduct['id'],
-                    'vendor_id' => $aProduct['author_id'],
-            		'price_single' => _t('_adm_str_txt_price_single', $aProduct['author_currency_sign'], $aProduct['price_single'])
-                )
-            ),
-            'bx_if:show_checkout_single' => array(
-				'condition' => $bPurchaseSingle,
-				'content' => array(
-					'js_object' => $sJsObject,
-					'id' => $aProduct['id'],
-					'vendor_id' => $aProduct['author_id'],
-					'bx_if:show_as_hidden' => array(
-						'condition' => !$bInCart,
-						'content' => array()
+            'bx_if:show_purchase' => array(
+            	'condition' => $bPurchaseSingle || $bPurchaseRecurring,
+            	'content' => array(
+            		'bx_if:show_purchase_single' => array(
+		                'condition' => $bPurchaseSingle && !$bInCart,
+		                'content' => array(
+		                    'js_object' => $sJsObject,
+		                    'id' => $aProduct['id'],
+		                    'vendor_id' => $aProduct['author_id'],
+		            		'price_single' => _t('_adm_str_txt_price_single', $aProduct['author_currency_sign'], $aProduct['price_single'])
+		                )
+		            ),
+		            'bx_if:show_checkout_single' => array(
+						'condition' => $bPurchaseSingle,
+						'content' => array(
+							'js_object' => $sJsObject,
+							'id' => $aProduct['id'],
+							'vendor_id' => $aProduct['author_id'],
+							'bx_if:show_as_hidden' => array(
+								'condition' => !$bInCart,
+								'content' => array()
+							)
+						)
+					),
+					'bx_if:show_purchase_recurring' => array(
+						'condition' => $bPurchaseRecurring,
+						'content' => array(
+							'js_object' => $sJsObject,
+							'id' => $aProduct['id'],
+							'vendor_id' => $aProduct['author_id'],
+							'price_recurring' => _t('_adm_str_txt_price_recurring', $aProduct['author_currency_sign'], $aProduct['price_recurring'], _t('_adm_str_txt_per_' . $aProduct['duration_recurring']))
+						)
 					)
-				)
-			),
-			'bx_if:show_purchase_recurring' => array(
-				'condition' => $bPurchaseRecurring,
-				'content' => array(
-					'js_object' => $sJsObject,
-					'id' => $aProduct['id'],
-					'vendor_id' => $aProduct['author_id'],
-					'price_recurring' => _t('_adm_str_txt_price_recurring', $aProduct['author_currency_sign'], $aProduct['price_recurring'], _t('_adm_str_txt_per_' . $aProduct['duration_recurring']))
-				)
-			),
+            	)
+            ),
             'bx_if:show_download' => array(
                 'condition' => $bDownload && !$bDownloaded,
                 'content' => array(

+ 16 - 14
studio/template/str_product_view.html

@@ -79,20 +79,22 @@
 		</span> __description__
 	</div>
 	<div class="bx-std-pv-actions bx-def-margin-top">
-		<div class="bx-std-pv-action bx-std-pva-price bx-def-margin-right">
-			<bx_if:show_purchase_single>
-				<a class="bx-btn" onclick="javascript:__js_object__.addToCart(__vendor_id__, __id__, this)">__price_single__</a>
-			</bx_if:show_purchase_single>
-			<bx_if:show_checkout_single>
-				<a class="bx-btn bx-std-pva-checkout" onclick="javascript:__js_object__.checkoutCart(__vendor_id__, this)" <bx_if:show_as_hidden>style="display:none;"</bx_if:show_as_hidden>>
-					<bx_text:_adm_btn_checkout_submit />
-				</a>
-			</bx_if:show_checkout_single>
-			<bx_if:show_purchase_recurring>
-				<span class="bx-def-margin-sec-leftright bx-def-font-grayed"><bx_text:_adm_str_txt_or /></span>
-				<a class="bx-btn" onclick="javascript:__js_object__.subscribe(__vendor_id__, __id__, this)">__price_recurring__</a>
-			</bx_if:show_purchase_recurring>
-		</div>
+		<bx_if:show_purchase>
+			<div class="bx-std-pv-action bx-std-pva-price bx-def-margin-right">
+				<bx_if:show_purchase_single>
+					<a class="bx-btn" onclick="javascript:__js_object__.addToCart(__vendor_id__, __id__, this)">__price_single__</a>
+				</bx_if:show_purchase_single>
+				<bx_if:show_checkout_single>
+					<a class="bx-btn bx-std-pva-checkout" onclick="javascript:__js_object__.checkoutCart(__vendor_id__, this)" <bx_if:show_as_hidden>style="display:none;"</bx_if:show_as_hidden>>
+						<bx_text:_adm_btn_checkout_submit />
+					</a>
+				</bx_if:show_checkout_single>
+				<bx_if:show_purchase_recurring>
+					<span class="bx-std-pva-or bx-def-margin-sec-leftright bx-def-font-grayed"><bx_text:_adm_str_txt_or /></span>
+					<a class="bx-btn" onclick="javascript:__js_object__.subscribe(__vendor_id__, __id__, this)">__price_recurring__</a>
+				</bx_if:show_purchase_recurring>
+			</div>
+		</bx_if:show_purchase>
 		<bx_if:show_download>
 			<a class="bx-btn bx-def-margin-right" onclick="javascript:__js_object__.getFile(__file_id__, this)">
 				<bx_text:_adm_btn_download_submit />