From 7d6e3a14327c738ed70b9e167a1859c0438d8bfe Mon Sep 17 00:00:00 2001 From: Lester Caine Date: Sun, 14 Jun 2026 16:07:55 +0100 Subject: Add parsed_data, counts and kitlocker data to StockAssembly::getList() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - getList() now provides per-row: parsed_data (via parseDataHash), part_number (#SUP first), klid, component_count (BOM lines), prebuild_count (PBLD kit total for assembly owner) as correlated subqueries — removes need for supplementary queries in callers - list_assemblies.php: remove batch query block now redundant - user_galleries.tpl: show parsed_data in .content div; dl counts moved to panel-footer with margin-bottom:0; klid in panel-title second line; panel-heading tidied to title only Co-Authored-By: Claude Sonnet 4.6 --- includes/classes/StockAssembly.php | 17 ++++++++++ list_assemblies.php | 1 + templates/user_galleries.tpl | 67 +++++++++++++------------------------- 3 files changed, 41 insertions(+), 44 deletions(-) diff --git a/includes/classes/StockAssembly.php b/includes/classes/StockAssembly.php index c072c41..10a59d7 100755 --- a/includes/classes/StockAssembly.php +++ b/includes/classes/StockAssembly.php @@ -997,6 +997,16 @@ class StockAssembly extends StockBase { $sortSql .= " ORDER BY ".$this->mDb->convertSortmode( $pListHash['sort_mode'] )." "; } $selectSql .= ", (SELECT COUNT(*) FROM `".BIT_DB_PREFIX."stock_assembly_map` sacmc WHERE sacmc.`assembly_content_id` = lc.`content_id`) AS `child_count`"; + $X = BIT_DB_PREFIX; + $selectSql .= ", (SELECT FIRST 1 x.`xkey` FROM `{$X}liberty_xref` x WHERE x.`content_id` = lc.`content_id` AND x.`item` = '#SUP' ORDER BY x.`xorder`) AS `part_number`"; + $selectSql .= ", (SELECT FIRST 1 x.`xkey` FROM `{$X}liberty_xref` x WHERE x.`content_id` = lc.`content_id` AND x.`item` = 'KLID') AS `klid`"; + $selectSql .= ", (SELECT COUNT(*) FROM `{$X}liberty_xref` x WHERE x.`content_id` = lc.`content_id` AND x.`item` IN ('SGL','PRT','SHT','VOL')) AS `component_count`"; + $selectSql .= ", (SELECT COALESCE(SUM(CAST(xasm.`xkey` AS DOUBLE PRECISION)), 0) + FROM `{$X}liberty_xref` xasm + INNER JOIN `{$X}liberty_content` mc ON mc.`content_id` = xasm.`content_id` + AND mc.`content_type_guid` = 'stockmovement' AND mc.`user_id` = lc.`user_id` + INNER JOIN `{$X}liberty_xref` xpbld ON xpbld.`content_id` = xasm.`content_id` AND xpbld.`item` = 'PBLD' + WHERE xasm.`item` = 'ASSEMBLY' AND xasm.`xref` = lc.`content_id`) AS `prebuild_count`"; if( !empty( $pListHash['stgrp'] ) ) { $whereSql .= " AND EXISTS (SELECT 1 FROM `".BIT_DB_PREFIX."liberty_xref` sx WHERE sx.`content_id` = lc.`content_id` AND sx.`item` = ?)"; @@ -1033,6 +1043,13 @@ class StockAssembly extends StockBase { foreach( array_keys( $data ) as $assemblyId ) { $data[$assemblyId]['display_url'] = static::getDisplayUrlFromHash( $data[$assemblyId] ); $data[$assemblyId]['display_uri'] = static::getDisplayUriFromHash( $data[$assemblyId] ); + if( !empty( $data[$assemblyId]['data'] ) ) { + $parseHash = [ + 'data' => $data[$assemblyId]['data'], + 'format_guid' => $data[$assemblyId]['format_guid'] ?? 'bithtml', + ]; + $data[$assemblyId]['parsed_data'] = LibertyContent::parseDataHash( $parseHash ); + } if( empty( $pListHash['no_thumbnails'] ) ) { if( $thumbImage = $this->getThumbnailImage( $data[$assemblyId]['content_id'] ) ) { $data[$assemblyId]['thumbnail_url'] = $thumbImage->getThumbnailUrl( $thumbsize ); diff --git a/list_assemblies.php b/list_assemblies.php index 69e9db8..6f428f6 100755 --- a/list_assemblies.php +++ b/list_assemblies.php @@ -38,6 +38,7 @@ if (!empty($_REQUEST['user_id']) && is_numeric($_REQUEST['user_id'])) { $galleryList = $gStockAssembly->getList( $_REQUEST ); $gStockAssembly->invokeServices( 'content_list_function', $_REQUEST ); $gBitSmarty->assign( 'listInfo', $_REQUEST['listInfo'] ); + $gBitSmarty->assign( 'galleryList', $galleryList ); $gDefaultCenter = "bitpackage:stock/$template"; diff --git a/templates/user_galleries.tpl b/templates/user_galleries.tpl index ddf4e4e..bda5520 100755 --- a/templates/user_galleries.tpl +++ b/templates/user_galleries.tpl @@ -1,66 +1,45 @@ {strip}
-
+
+ + {if $gBitUser->mUserId eq $gQueryUserId} + {if $gBitUser->hasPermission('p_stock_create')} + {biticon ipackage="icons" iname="package-x-generic" iexplain="Add Prebuild"} + {/if} + {biticon ipackage="icons" iname="view-form-table" iexplain="Stock Levels"} + {/if} {minifind prompt="Assemblies"}
-

{tr}Assemblies{/tr}{if $gQueryUserId} {tr}by{/tr} {displayname user_id=$gQueryUserId}{/if}

+

{tr}Assemblies{/tr} {tr}by{/tr} {displayname user_id=$gQueryUserId}

+ {tr}Assemblies{/tr}
- {if !$gQueryUserId} -
    -
  • {biticon ipackage="icons" iname="go-next" iexplain="sort by" iforce="icon"}
  • - {if $gBitSystem->isFeatureActive('stock_list_title')} -
  • {smartlink ititle="Name" isort="title"}
  • - {/if} - {if $gBitSystem->isFeatureActive('stock_list_user')} -
  • {smartlink ititle="Owner" isort=$gBitSystem->getConfig('users_display_name')}
  • - {/if} - {if $gBitSystem->isFeatureActive('stock_list_created')} -
  • {smartlink ititle="Created" isort="created"}
  • - {/if} - {if $gBitSystem->isFeatureActive('stock_list_lastmodif')} -
  • {smartlink ititle="Last Modified" isort="last_modified"}
  • - {/if} - {if $gBitSystem->isFeatureActive('stock_list_hits')} -
  • {smartlink ititle="Hits" isort="hits"}
  • - {/if} -
- {/if} -
{foreach from=$galleryList key=galleryId item=gal} -
+

- {if $gBitSystem->isFeatureActive('stock_list_title')} - {$gal.title|truncate|escape} - {else} - {tr}Assembly{/tr} {$gal.content_id} - {/if} + {$gal.title|truncate|escape}
+ {tr}Kitlocker{/tr}: {$gal.klid|escape}
- {if $gal.is_hidden|default:'n' == 'y' || $gal.is_private|default:'n' == 'y' || $gal.access_answer|default:false} - {biticon ipackage="icons" iname="lock" iexplain="Restricted"} - {/if}

- {if $gBitSystem->isFeatureActive('stock_list_user')} - {displayname hash=$gal nolink=true} - {/if} - {if $gBitSystem->isFeatureActive('stock_list_created')} -
{$gal.created|bit_short_date}
- {/if} - {if $gBitSystem->isFeatureActive('stock_list_lastmodif')} -
{tr}Modified:{/tr} {$gal.last_modified|bit_short_date}
+ {if $gal.parsed_data} +
{$gal.parsed_data}
{/if} - {if $gBitSystem->isFeatureActive('stock_list_hits')} -
{tr}Hits:{/tr} {$gal.hits}
- {/if} - {include file="bitpackage:liberty/services_inc.tpl" serviceLocation='body' serviceHash=$gal} +
+
-- cgit v1.3