Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,059 of 9,059 pages
About the help in other languages
All help pages

Specification: the xrowextract extension

This page is the reference for the xrowextract extension (content export, import, packages, schedules and delivery), release line 2.5 (2.5.0 to 2.5.6, September to October 2026). It lists every view, policy, setting…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/specifications/6.0/xrowextract.md

On this page

Specification: the xrowextract extension

This page is the reference for the xrowextract extension (content export, import, packages, schedules and delivery), release line 2.5 (2.5.0 to 2.5.6, September to October 2026). It lists every view, policy, setting, preset field, table, class and command line option. Read it when you configure exports for a site, grant permissions, or script exports. How to use it is on the feature page.

Example: export articles from the command line

Run in the installation root (read-only for your content; it writes the output file):

php extension/xrowextract/bin/php/csv.php --list-classes --node=2                 # classes below node 2
php extension/xrowextract/bin/php/csv.php --list-columns --class=ng_article       # columns of one class
php extension/xrowextract/bin/php/csv.php --class=ng_article --node=2 --preview=10 # first 10 rows on screen
php extension/xrowextract/bin/php/csv.php --class=ng_article --node=2 --output=articles.csv

./console ext:xrowextract:csv runs the same command. Replace ng_article with a class identifier of your site. Exit code 0 means the file was written.

Module, views and policies

Module xrowextract (modules/xrowextract/module.php), navigation part ezextractnavigationpart, top menu tab xrowextract (name "Export", menu.ini [Topmenu_xrowextract], URL xrowextract/csv).

ViewPolicy functionPurpose
csvcsvOne class export page: preview, download, manifest, run in background, export as package
archivecsvSite archive (multi class)
jobsjobsJobs page; delete, cancel, export again
job_statusjobsJSON progress of one job (JobID)
job_downloadjobsDownload a job's file or log (JobID, What)
importimportImport content file; chunked upload entry; resume
upload_chunkimportEndpoint of the chunked uploader
packageimportContent packages: upload, inspect, install, build template (PackageName)
browse, browse_fileimportPackage contents browser (PackageName, Offset, ViewIndex)
compareimportCompare a package with the site or another package
schedulesscheduleScheduled exports and imports
destinationsdestinationsDelivery destinations and credentials
historyhistoryExport history

Policy functions not bound to a single view: all_jobs (see and manage everyone's jobs and shared presets; without it a user sees only their own) and password_hash (export the hash and hash type of user accounts). A link to the contents browser is added to the kernel's own package/view/full/<name>.

Settings

All keys are read with eZINI::instance( <file> ). Scope is the whole installation unless noted; override them in settings/override/<file>.append.php or in a siteaccess.

csv.ini

BlockKeyDefaultMeaning
GeneralExportableDatatypes[]30 datatypes (ezboolean, eztext, ezinteger, ezstring, eztime, ezurl, ezuser, ezxmltext, ezdate, ezdatetime, ezkeyword, eztags, ezobjectrelation, ezemail, ezfloat, ezidentifier, ezenhancedobjectrelation, ezenhancedselection, ezselection, ezenum, ezcountry, ezimage, ezmedia, ezbinaryfile, ezmatrix, ezobjectrelationlist, hmregexpline, ezprice, xrowmetadata)Datatypes the export offers
GeneralStripURLTexttrueExport only the URL of an ezurl value
GeneralNeutralizeFormulasenabledA cell starting with =, +, - or @ (not a number) gets a leading '
GeneralAllowPasswordHashExportenableddisabled removes the password hash columns for everyone; otherwise only holders of xrowextract/password_hash
JobsRetentionDays7Days a finished or failed job is kept before ext:xrowextract:job --clean removes it
JobsPhpCliemptyPHP command line binary for background jobs. Empty: PHP_BINARY, mapped from a PHP-FPM or php-cgi binary to the CLI one next to it, else php
ManifestEmbedInJSONenabledJSON export as envelope {"manifest","rows","summary"}; disabled writes a plain array
ManifestEmbedInXMLenabledA <manifest> element after <columns>
<datatype>HandlerFile, HandlerClassone block per datatypeHandler of that datatype; replace from your extension. [ezenhancedobjectrelation] OutputRelatedObjectNames=true writes names, false ids
UploadsRetentionHours24Hours an unfinished or never adopted chunked upload is kept
UploadsMinFreeMarginMB256Free disk space that must remain beyond the incoming file
UploadsQueueThresholdRows2000Above this many rows the dry run and the apply run as background jobs
UploadsQueueThresholdMB20The same, by file size
UploadsJsonOneShotThresholdMB20JSON above this size is still read in one go (json_decode() cannot stream); CSV and XML never are

export.ini

BlockKeyDefaultMeaning
ExportSettingsExportClasses[]empty (all classes)Restrict the classes the page offers
ExportSettingsStartNodeIDempty (root node of the default siteaccess)Node the page starts with
ExportSettingsDefaultClassIDempty (class with most objects)Class the page starts with
ExportSettingsPreselectAttributestrueTick every attribute
ExportSettingsLimit, Offset0, 0Row window (0 is unlimited)
SiteArchiveSitesParentNodeIDemptyNode whose children are the "Sites" set; empty uses the content structure
SiteArchiveDefaultSiteNodeIDs[]emptySites selected at the start; empty uses the default siteaccess root
PackageTemplateScratchNodeIDempty (content.ini [NodeSettings] MediaRootNode)Where the sample-content builder creates its throwaway objects. Never a node the public site renders

xrowextract.ini

BlockKeyDefaultMeaning
SchedulesCronjobEveryMinutes5Interval of the crontab line shown on the Schedules page
HistoryRetentionDays365Days history rows are kept (a schedule can set its own)
HistoryPageSize25Rows per page
DestinationsLocalPathRoots[]emptyThe only folders a local/NAS destination may write to, and a scheduled import may read from. Absolute, or relative to the installation root
DestinationsMaxAttempts3Delivery attempts
DestinationsBackoffSeconds10Wait between attempts, doubling each time
DestinationsSshBinaryDiremptyWhere sftp, ssh-keyscan and ssh-keygen are, when not in /usr/bin or /usr/local/bin
SecretsKeyFilesettings/override/xrowextract-secrets.keylibsodium secretbox key for destination credentials, generated with mode 0600 on first use
NotificationsWebhookSecretemptyWhen set, webhooks carry X-Xrowextract-Signature and X-Xrowextract-Timestamp
Preset_<id>Name, Description, Audience, View, Extends, Definition, PlaceholdersSite presets; see below

Other files

FileBlockPurpose
cronjob.ini[CronjobPart-xrowextract] Scripts[]=xrowextract.phpCronjob part that starts due schedules, then removes job folders and history rows past retention
extendedattributefilter.iniXrowExtractTranslation, XrowExtractHasChildren, XrowExtractRelation, XrowExtractUserStatusRegistered extended attribute filters (createSqlParts). The translation filter is deliberately not user-choosable: it is applied once per exported language
fetchalias.inixrowextract_recent_content, xrowextract_by_sectionExample named fetches the export can apply
site.ini[RegionalSettings] TranslationExtensions[]=xrowextractTranslations: eng-US, fre-FR, ger-DE, ita-IT, untranslated

Preset definition

Definition is one JSON object. Fields read by XrowExtractPreset::resolve(): scope, subtree, subtree_remote_id, class_id, class_identifier, mainnodeonly, limit, offset, languages, attributes, filters (an XrowExtractFilters values array), sort_field, sort_ascending, sort_field2, sort_ascending2, output_format, separator, line_separator, escape. A string may contain {name}; Placeholders is {"name": {"default": "..."}}. Extends is alias:<fetchalias name>[:<siteaccess>] or user:<id>. A person's own presets are stored as JSON in ezsite_data under the name xrowextract_preset_<20 hex>. The Audience groups are Site, Editors, Developers, Partners, Users and Maintenance; a preset without one is grouped under Site.

Tables

Created on first use from share/db_schema.dba (the engine-neutral schema; sql/mysql, sql/oracle, sql/postgresql, sql/sqlite carry the same for a manual install).

TableContent
xrowextract_schedule (+ index xrowextract_schedule_next)Saved schedules and their next run
xrowextract_destinationDelivery destinations; credentials encrypted
xrowextract_history (+ indexes _created, _job, _sched)One row per run

Classes

ClassRole
XrowExtractFilters, XrowExtractColumns, XrowExtractCatalogue, XrowExtractSchemaFilters, columns, column catalogue and class schema
XrowExtractWriter, XrowExtractManifestFile writing (CSV, JSON, XML) and the typed manifest
XrowExtractArchiveSite archive; formats zip, tar.gz, tar.bz2, tar.xz, 7z, rar
XrowExtractImport, XrowExtractUploadStreaming importer and chunked upload (ID_PATTERN ^[0-9a-f]{32}$; folder per upload, chunk appended only at the offset the server already holds)
XrowExtractPackageContent packages (.ezpkg): inspect, compare, install, template build
XrowExtractJob, XrowExtractCron, XrowExtractScheduler, XrowExtractScheduleBackground jobs and schedules
XrowExtractDestination, XrowExtractSecrets, XrowExtractNotifier, XrowExtractHistoryDelivery, encrypted credentials, notifications, history
XrowExtractPreset, XrowExtractFetchAliasPresets and named fetch support
XrowExtractRequirementsThe 19 requirements and 12 features check
classes/parsers/*One handler per datatype (XroweZStringHandler, ...)
classes/transports/*local, ftp, sftp, s3, webdav, http transports

Since 2.5.5 the command line scripts, the cronjob part and the module views are classes that the files call (Exponential\Command\Extension\Xrowextract\...); see CLI, cronjob and view abstractions. Behaviour did not change.

Command line options

ext:xrowextract:csv (extension/xrowextract/bin/php/csv.php) takes the options class, node, scope (node or all), depth and depth operator (eq, le, ge), main-only, offset, limit, columns, add, sets (identity, urls, publishing, location, migration), names, separator, line endings (win32/crlf, unix/lf, mac/cr), unquoted, languages, format (csv, json, xml, ezpkg), date filters (date-field, since, before, date), section, state, visibility, name, where, sort, order, sort2, order2, extended-filter, extended-params, fetch-alias, alias-param, preset, param, list-presets, show-preset, output (- is stdout), preview, list-classes, list-columns, user, progress-file, keep, changed-since, lenient, no-manifest, schedule and run-mode.

Exit codes: 0 success, 1 failure (bad option, unresolvable class or node), 3 --lenient and nothing was left to export. Warnings are printed as WARNING: ... lines; with --output=- they go to stderr so stdout stays the file.

The check script bin/check.sh is the release gate (lint, translations, duplicate sources, PHPStan level 8, unit tests, requirements, CLI, view and POST tests); .github/workflows/check.yml runs it on PHP 8.1 to 8.5. It needs EXPONENTIAL_ROOT to point at an Exponential root.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x