| Age | Commit message (Collapse) | Author | Files | Lines |
|
registerContentType() set mType and mPackageGuid but skipped mContentTypeGuid,
leaving it null throughout the object lifetime when loaded via getLibertyObject.
This caused a TypeError in xrefType() -> LibertyXrefType::__construct(string, ...).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Exposes liberty_content.data of the linked content item so BOM and other
xref view templates can display description without a separate enrichment query.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
load/verify; loadContent: add linked_title from joined liberty_content
LibertyXref gains mPackageGuid; load() and verify() now use IN(contentTypeGuid,packageGuid)
so package-level xref items (e.g. stock/supplier) are found when editing a sub-type record
(e.g. stockcomponent). LibertyContent propagates mPackageGuid to LibertyXref in loadXref(),
storeXref() and stepXref(). LibertyXrefType::loadContent() LEFT JOINs liberty_content on
x.xref to expose linked_title for templates that display a linked content item's name.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
LibertyXrefType::loadContent()
- Add LibertyXrefContent: thin data container (just $mGroups), replaces LibertyXrefInfo
- Delete LibertyXrefInfo: constructor params and load() move to LibertyXrefType::loadContent()
- LibertyXrefType::loadContent($contentId): loads all display groups and their xref rows,
returns LibertyXrefContent; absorbs both LibertyXrefInfo::load() and LibertyXrefGroup::loadXrefs()
- LibertyXrefGroup: pure value object — remove extends LibertyBase, remove loadXrefs();
mXrefs type changed to LibertyXref[]
- LibertyXref: add ArrayAccess + fromRow() factory; templates keep {$xrefInfo.key} dot
notation unchanged; load() also populates $mRow for consistency
- LibertyContent: mXrefInfo type updated to LibertyXrefContent; loadXrefInfo() delegates
to $this->xrefType()->loadContent(); xrefType() visibility private → protected
(StockBase calls it from an override)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Uses mDb and mErrors from BitBase; does not use any LibertyBase factory
methods (getLibertyObject, getLibertyClass etc). BitBase is the correct base.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Explains the lazy-init/cache/reset lifecycle, why mPackageGuid is passed,
how it enables the dual-guid IN() query, and that subclass/page code should
not construct LibertyXrefType directly. Restores @see tags on the four thin
delegate methods.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Documents the package-level vs content-type-level split, the IN() filter
strategy, the self-consistent JOIN rule, and the stock reference implementation.
Adds usage note directing callers via LibertyContent::xrefType().
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
- Remove extends LibertyBase (unused — all methods were static, no instance
state needed from the hierarchy)
- Add constructor(contentTypeGuid, packageGuid) so the type context is held
on the object rather than threaded through every call
- Runtime methods (getDisplayGroups, getTypeMarkers, getAvailableItems,
getTemplateFormats, getContentTypeMarkers) become instance methods; guid
params removed
- Admin cross-type queries (getXrefTypeList, getContentTypeGuids, getGroupList)
stay static
- Fix getAvailableItems JOIN: use t.content_type_guid = s.content_type_guid
so each item only joins its own group — prevents cross-matching when two
guids share an x_group name (e.g. 'quantity' on stockcomponent vs stockassembly)
- packageGuid IN() filter applied only in WHERE on s, not duplicated in JOIN
LibertyContent: use LibertyXrefType instance via lazy xrefType() accessor
- Add mXrefType property (reset to null in registerContentType)
- Private xrefType() creates LibertyXrefType(mContentTypeGuid, mPackageGuid)
on first call and caches it
- Five delegate methods simplified to single-line instance calls
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
(int) cast on $next prevents NULL overwriting the default xorder=0 when
fAddXref is used for an item type that has no liberty_xref_item row.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Adds optional $packageGuid parameter to both constructors. When set,
the liberty_xref_group and liberty_xref_item queries use IN (type, pkg)
instead of = type, allowing package-level rows to be shared across
multiple content types (e.g. 'stock' shared by stockassembly and
stockcomponent).
Also removes duplicate ipackage attributes from templates.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Same pattern as contact: direct mUserId string interpolation produces
'purm.user_id=' with no value for anonymous users (null mUserId),
causing Firebird -104 Token unknown. Four occurrences fixed.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
method docs
Class docblock explains the intermediate role between BitBase and
LibertyContent, and documents getLibertyObject() as the canonical
entry point for loading any content by content_id.
Factory method docblocks updated: getLibertyObject() resolution order,
getLibertyClass() use case, getNewObject/ById() override intent.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
LibertyXrefType gains five runtime statics (getDisplayGroups,
getTypeMarkers, getAvailableItems, getTemplateFormats,
getContentTypeMarkers) — role-filtered, content-type-scoped.
LibertyContent xref query methods become one-line delegates.
LibertyXrefInfo added as new class (was missing from repo).
Docblocks added to LibertyContent class, LibertyXref, LibertyXrefGroup,
LibertyXrefInfo, LibertyXrefType.
list_xref.tpl: remove dead legacy $source path; new path only.
loadXrefList() removed from LibertyContent (stock fully migrated).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
- list_xref.tpl: remove dead Link <th>; add 30/30/40% column widths;
fix colspan to conditional 6/3; support both LibertyXrefGroup and
legacy $source paths
- view_xref_text_item.tpl: remove Link cell; wrap date/updated/
edit cells under single {if $xrefAllowEdit|default:false}
- LibertyXrefGroup: new class — loads xref rows for one x_group,
separates expired rows into history
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Guard mRoles against null in all xref query methods to prevent TypeError
and Firebird empty IN() syntax error for unauthenticated users; fall back
to [-1] so the IN() clause is valid but matches nothing.
Also add x.xorder to the SELECT in loadXrefList() so xorder values are
available in fetched row data for sorting and display.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
- LibertyContent: add enrichXrefDisplay() no-op hook; call it in edit_xref.php
so packages can inject display-only data (e.g. component title) into xrefInfo
- edit_xref_value_item.tpl: add Notes (xkey_ext) field alongside Value (xkey)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
- Rename all view_xref_*_record.tpl → view_xref_*_item.tpl throughout
- LibertyContent: getXrefRecordTemplate/ListTemplate/EditTemplate use _item
naming with three-level fallback (pkg/guid subdir → pkg root → liberty);
getXrefRecordTemplate falls back to text_item if template file not found;
getXrefEditTemplate checks liberty _item before generic edit_xref.tpl
- list_xref.tpl: assign _rowTpl before method call to avoid Smarty section
variable resolution issue inside PHP method call arguments
- New templates: view_xref_value_item.tpl, edit_xref_value_item.tpl for
simple numeric xref items (xkey field, not data)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
- LibertyContent: add getXrefListTemplate(), getXrefRecordTemplate(),
getXrefEditTemplate() for package-aware template dispatch with liberty fallback
- LibertyXref: explicit xorder passthrough in verify(); fix start_date/end_date
to use time() instead of mDb->NOW() so BitDate::date() receives a timestamp
- add_xref.php, edit_xref.php: redirect to getEditUrl() after save/cancel
- list_xref.tpl: use getXrefRecordTemplate() instead of hardcoded liberty path
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
- Make mContentTypeGuid public so LibertyContent::storeXref() can set it
on a fresh LibertyXref instance
- Format start_date/end_date Unix timestamps as Y-m-d H:i:s UTC strings
before INSERT; Firebird rejects raw integers for TIMESTAMP columns
- Use null instead of empty string for ignored date fields
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
liberty_xref rows are owned by content_id but were never deleted
during expunge, leaving orphaned xref records whenever any content
type was deleted.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
liberty_xref.source was renamed to item; the count query in
getXrefTypeList still referenced the old name causing a fatal error
on the admin xref sources page.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Replaces per-package xref tables with three shared liberty tables:
liberty_xref_group (tab groups), liberty_xref_item (source definitions),
liberty_xref (records). Column names: group→x_group (Firebird reserved word),
source→item, multi→multiple throughout PHP classes and templates.
- 5.0.1 upgrade creates the three tables + sequence + indexes for existing installs
- schema_inc.php updated so fresh installs also get the tables
- Admin UI: admin_xref_groups and admin_xref_sources pages with package filter
- LibertyContent::loadXrefList / getXrefGroupList / getXrefTypeList updated
- LibertyMime: skip attachment rendering during BIT_INSTALL
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
LibertyXrefType: add getContentTypeGuids() and getGroupList() static methods.
New admin pages with package filter (session-persisted content_type_guid
dropdown): admin_xref_groups.php manages liberty_xref_type rows;
admin_xref_sources.php manages liberty_xref_source rows. Both support
add and delete (delete guarded by entry/source count). Wired into
menu_liberty_admin.tpl as Xref Groups / Xref Sources links.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Moves xref handling up from Contact so any LibertyContent subclass can
use liberty_xref_type/source/xref tables scoped to its own content_type_guid.
Added: getXrefGroupList, getXrefSourceList, getXrefTypeList, getXrefFormatList,
loadXrefTypeList (uses protected $mXrefTypeKey, default 'xref_types'),
loadXrefList, loadXref, storeXref, stepXref. loadXref/storeXref/stepXref use
LibertyXref directly with mContentTypeGuid set before load.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
LibertyXref gains a $mContentTypeGuid property (default empty) used to
filter the liberty_xref_source JOIN in load() and the multi-check in
verify(). Subclasses set it to scope queries to their content type without
duplicating any logic.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
New tables: liberty_xref_type (text PK, package, sort_order),
liberty_xref_source (package column for direct equality filtering),
liberty_xref (data rows keyed by content_id, works for any package).
Sequence liberty_xref_seq and indices on content_id and package columns.
LibertyXref and LibertyXrefType classes provide the full store/load/step
mechanism. Contact and stock register their own source types against the
shared tables. Upgrade script 5.0.1.php creates the tables on existing installs.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Replaced SELECT-then-INSERT/UPDATE with UPDATE-first pattern: attempt
UPDATE and only INSERT if zero rows were affected. Eliminates the race
window where two concurrent requests both see no row and both try to
INSERT, which left an uncommitted Firebird transaction blocking reads.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
functionality
Used by blogs to pass extra info to search package
|
|
Missed from BIT_INSTALL fixes
|
|
|
|
|
|
|
|
base defaulted to ROLE_MODEL reducing complexity in LibertyContent
|
|
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Once the database is created autoload is messing things up until the tables are also created. Need a tidier way of doing this but it works for now by check tables exist before using them.
|
|
|
|
being used
|
|
|
|
|
|
|
|
|
|
|