Extension talk:Cargo

From mediawiki.org
Latest comment: 1 hour ago by Yaron Koren in topic Export as Excel, Composer, What Did I Miss?

Self-Inflicted Duplicate Issue[edit]

Putting the solution at the top!
Don't do this: My MediaWiki Page -> My Template #1 -> Cargo Query using Template #2 for display -> Template #2 stores Cargo data.
Re-using Template #2 caused rebuilding of the associated Cargo database to pick up on My Mediawiki Page as something to include in Cargo despite the exact same data being present in Template #2.
Thanks to Yaron Koren for patiently debugging my recursive template usage issue.

Original problem follows...
This isn't a recurrence of the duplicate rows issue that cropped up in 2021. I am 99.9% sure it's self-inflicted.


  1. Import page data from Excel into MyCargoDB. All pages are prefixed with CARGO ("CARGO_MyPageName") because they're data, not to be looked at directly by readers.
  2. The template MyTemplate queries data pulled into Cargo from the imported CARGO pages.
  3. Page called MyPageName uses MyTemplate to display data pulled into Cargo from CARGO_MyPageName.
  4. Rebuild MyCargoDB.
  5. Now MyPageName using MyTemplate displays Cargo data twice.
  6. The view in Cargo Tables of MyCargoDB shows CARGO_MyPageName AND now MyPageName which explains why it's appearing twice.
  7. If this keeps up I'll have 150 duplicates.

I'm not sure what mistake I've made to create this circular import into Cargo.

SovereignGFC (talk) 15:06, 2 May 2023 (UTC)Reply[reply]

That first step sounds odd - are you directly creating a table within the database? If so, you shouldn't do that - the data stored by Cargo should always reflect what's in the wikitext. Could that be the issue? Yaron Koren (talk) 02:56, 3 May 2023 (UTC)Reply[reply]
Apologies, I am not directly creating a table. I import through an extension that creates wiki pages from said Excel sheet that match MyTemplate.
After importing, I immediately execute runJobs.php.
I then Recreate data on MyCargoDB.
If any MyPageName using MyTemplate that got put into MyCargoDB exists at that point, MyCargoDB gains an entry from MyPageName even though MyCargoDB was already populated by MyTemplate. SovereignGFC (talk) 22:02, 3 May 2023 (UTC)Reply[reply]
Okay, never mind. Well, it's strange that pages that look simply like "MyPageName" are showing up as holding Cargo data - even though they're meant to only display, not store, Cargo data. What exactly is in the template "MyTemplate"? Yaron Koren (talk) 14:30, 4 May 2023 (UTC)Reply[reply]
MyTemplate is NOT a Cargo-generated template. It is an actual page template that DOES contain Cargo queries using templates created by Cargo's Create a class. SovereignGFC (talk) 01:11, 5 May 2023 (UTC)Reply[reply]
Well, does MyTemplate contain a call to #cargo_store? And if not, how are the pages that call it getting Cargo data stored for them? Yaron Koren (talk) 17:32, 5 May 2023 (UTC)Reply[reply]
MyTemplate does not have calls to #cargo_store.
MyPageName -> MyTemplate -> Cargo query in MyTemplate -> Separate Cargo-specific pages/templates referenced in query. SovereignGFC (talk) 18:29, 5 May 2023 (UTC)Reply[reply]
Alright. Well, barring more information about your setup, I'm totally stumped - I have no idea how pages like MyPageName could show up in Special:CargoTables. Yaron Koren (talk) 18:43, 5 May 2023 (UTC)Reply[reply]
What additional information might be helpful? SovereignGFC (talk) 00:50, 6 May 2023 (UTC)Reply[reply]
The contents of MyPageName and MyTemplate, I suppose. Yaron Koren (talk) 13:29, 7 May 2023 (UTC)Reply[reply]

Header in dynamic table[edit]

How to change header in dynamic table?

Tamplate: {{#cargo_query: tables=Items |fields=CONCAT( '{{item icon|', Items.name, '}}' ) |format=dynamic table }}

Table header looks like this:

name, '}}' )

Thanks! -- Oleksii 06:58, 6 May 2023 (UTC)Reply[reply]

Add something like "=ColumnName" after the final ")" - i.e., set an alias for the field. Yaron Koren (talk) 13:30, 7 May 2023 (UTC)Reply[reply]
how to display format=dynamic table in Lua?
local args = {
where = '...',
format='dynamic table',
orderBy = '_pageName',
the word 'format' seems to be a Lua reserved word
--Oleksii 15:55, 7 May 2023 (UTC)Reply[reply]
There might not be any way to display result formats from within a Lua Cargo query - I'm not sure. Yaron Koren (talk) 02:42, 8 May 2023 (UTC)Reply[reply]

WITHIN statement error when a Hierarchy item has an apostrophe[edit]

I have a hierarchy definition in a template that includes the item "St. Mary's Anglican Church". When I try to query this with a WITHIN statement, I get an error that appears to split this at the apostrophe:

WHERE Collection IN ( SELECT `_value` FROM `cargo__CollectedIn__Collection__hierarchy` WHERE `_left` >= ( SELECT `_left` FROM `cargo__CollectedIn__Collection__hierarchy` WHERE `_value` = "St. Mary' ) AND `_right` <= ( SELECT `_right` FROM `cargo__CollectedIn__Collection__hierarchy` WHERE `_value` = "St. Mary' ) )s Anglican Church") ORDER BY `cargo__Collection`.`_pageID`,`cargo__Collection`.`_pageName` 

. When I put double-quotes around a string with an apostrophe in a WHERE clause this seems to work fine. Is this a bug or am I writing the query wrong? Thanks! Tenbergen (talk) 04:10, 9 May 2023 (UTC)Reply[reply]

Recreate and 500 Line Bug Again[edit]

  • MediaWiki 1.39.3
  • Cargo 3.4.2

When I kick off re-create data from the Cargo tables page, it gets stuck at 500 lines.

When I import a spreadsheet to that same table/template with 500+ lines and execute runJobs.php, the table populates.

What additional diagnostic or debugging data can I provide? SovereignGFC (talk) 03:40, 13 May 2023 (UTC)Reply[reply]

Sorry, I missed this before. Do you see any errors in the browser's JavaScript console? Yaron Koren (talk) 02:37, 29 May 2023 (UTC)Reply[reply]
Now that the backup function (export to Excel which keeps my special character filled text intact) works thanks to the phpspreadsheet update, I was able to test this.
  1. Open browser dev/debug tools.
  2. Recreate data link on template page, Cargo view all tables page (line of the table), or Cargo table (table to be recreated).
  3. ...no errors detected. The command to recreate data just returns a 200 OK.
  4. Invoke runJobs.php. Observe that only 500 rows exist.
SovereignGFC (talk) 01:32, 2 June 2023 (UTC)Reply[reply]

Vertical list of names be grouped by the initial letters[edit]

Sorry if my question has already been asked here, but I have just started using Cargo. How could a vertical list of names (from Cargo databases) be grouped by the letters of the alphabet using a Cargo query? Lalo5555 (talk) 08:49, 27 May 2023 (UTC)Reply[reply]

If you use the "category" format, it will provide a display that's hopefully close enough to what you are looking for. Yaron Koren (talk) 02:36, 29 May 2023 (UTC)Reply[reply]

Export as Excel, Composer, What Did I Miss?[edit]

(This is preventing me from properly testing the 500-line recreate bug as I want to back up my big table beforehand!)

When I try to export as Excel, I get a 500 internal server error when I click on the link to download. Unfortunately, even with MediaWiki debug on, that's all I do get:

HTTP/1.1 500 Internal Server Error
Date: Wed, 31 May 2023 02:41:54 GMT
Server: Apache
X-Powered-By: PHP/7.4.33
X-Content-Type-Options: nosniff
X-Request-Id: ZHaz8pqI3nmiV89-O7ng8wAAAss
Strict-Transport-Security: max-age=63072000; includeSubDomains
X-Frame-Options: SAMEORIGIN
Content-Length: 0
Connection: close
Content-Type: text/html; charset=UTF-8

I have Composer installed at the same level of directory as MediaWiki and I confirm that phpoffice/phpspreadsheet is installed (1.19.0). I know it works because I can import spreadsheets just fine...but not export for some reason. SovereignGFC (talk) 02:46, 31 May 2023 (UTC)Reply[reply]

The "excel" format code is very old, and it actually uses the PHPExcel library, not PhpSpreadsheet. Yaron Koren (talk) 13:04, 31 May 2023 (UTC)Reply[reply]
Inspired by this discussion, I just added support for PhpSpreadsheet to the "excel" format. At least, in theory - I haven't actually tried running it. But there's a chance that it works! Yaron Koren (talk) 15:54, 1 June 2023 (UTC)Reply[reply]
Can confirm this works!
I did the very proper and sophisticated thing of "copy entire single changed file and paste text into existing version" before running the query.
All 800+ items exported without issue. SovereignGFC (talk) 00:51, 2 June 2023 (UTC)Reply[reply]
That's great to hear! Yaron Koren (talk) 02:44, 2 June 2023 (UTC)Reply[reply]