| 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>
|
|
zoom=page-width was appended to the file URL; moved to viewer hash where
pdfjs expects it. search= now correctly appended to the same hash fragment.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Covers LibertyXrefType, dual-guid schema, xref display path,
parseDataHash, storeXref, owner change, Firebird GROUP BY.
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>
|
|
on xrefAllowEdit; fix edit_xref_value_item — use template_title for type label
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>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
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>
|
|
Prevents NULL xorder from import paths that omit the column, which
causes the CASE expression building xref_title to return NULL.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
user-trash updated to a proper dustbin SVG. All templates across
all packages updated to use user-trash instead of edit-delete.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
stock_attach (paperclip) is available as PNG (16px) and SVG (scalable),
making it a cleaner fit for attach/assign/crosspost contexts than the
mail-specific mail-attachment icon.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Replace all {booticon iname="icon-*"} and {booticon iname="fa-*"} calls with
{biticon ipackage="icons" iname="<freedesktop-name>"} using the tango iconset.
Mapping covers ~70 distinct old names to tango equivalents (edit-delete,
document-properties, go-next, lock, internet-mail, etc.).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
When source_file is already in pStoreRow (e.g. called from a non-fisheye
context with reload_pdf set), re-extract the text layer without replacing
the stored file. Fisheye handles this via edit_image.php directly; this
branch covers other call sites.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
processor.imagick: ImagickPixel('none') explicit colour, add clear() to rotate
mime.pdf: fix dest_branch absolute path in regenerate case — strip STORAGE_PKG_PATH
and ensure trailing slash before passing to liberty_generate_thumbnails
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
flattenImages() -> mergeImageLayers(LAYERMETHOD_FLATTEN)
destroy() -> clear()
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
plugin_settings
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
yet set
mime_default_update/store don't set top-level source_file; mime_pdf_thumbnail
already handles the upload hash directly, so the guard just needs to also
trigger when upload is present.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
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>
|
|
- view_xref_image_item.tpl, view_xref_inc_report_item.tpl: update includes
to use renamed contact _item.tpl templates
- Remove view_xref_key_seal_item.tpl — key_seal code dropped
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>
|
|
list_xref.tpl: accept allow_edit param; assign $xrefAllowEdit for record
templates; hide Edit column header when allow_edit is false.
view_xref_*_record.tpl (8 files): gate hasUpdatePermission and
hasExpungePermission checks on $xrefAllowEdit|default:true so callers
can render xref data read-only without altering user permissions.
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>
|
|
Thin bridge templates that delegate to the contact package for
key_seal, inc_report and image record types — allows liberty's
generic list_xref.tpl to render these without duplicating logic.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|