Line 1: |
Line 1: |
− | local Date = require('Module:Date')._Date
| |
− | local yesno = require('Module:Yesno')
| |
− |
| |
| local p = {} | | local p = {} |
− |
| |
− | -- Local variables.
| |
− | local reviewer = nil;
| |
− | local df = "mdy";
| |
− | local entity = nil;
| |
− | local genRefs = true;
| |
− | local showSystem = true;
| |
− | local showUpdateLink = true;
| |
− | local system = nil;
| |
− | local systemId = nil;
| |
− | local systemFormat = "colon";
| |
− | local updateLinkStyle = nil;
| |
− | local entities = {};
| |
− |
| |
− | -- Translation table for converting numeric-IDs to shorthand aliases.
| |
− | local systemAliases = {
| |
− | [10677] = 'PS1',
| |
− | [1323662] = 'PS1', -- Placeholder, this is actually the series but could be mistakenly used for PS1.
| |
− | [10680] = 'PS2',
| |
− | [10683] = 'PS3',
| |
− | [5014725] = 'PS4',
| |
− | [16338] = 'PC',
| |
− | [8079] = 'Wii',
| |
− | [56942] = 'WiiU',
| |
− | [132020] = 'XBOX',
| |
− | [48263] = 'X360',
| |
− | [13361286] = 'XONE',
| |
− | [203597] = '3DS',
| |
− | [188808] = 'PSV',
| |
− | [170323] = 'DS', -- Sometimes has been NDS
| |
− | [170325] = 'PSP',
| |
− | [48493] = 'IOS', -- iOS, iPhone, iPad
| |
− | [94] = 'AND', -- Android
| |
− | [186437] = 'GB',
| |
− | [188642] = 'GBA',
| |
− | [203992] = 'GBC',
| |
− | [184198] = 'DC',
| |
− | [200912] = 'SAT',
| |
− | [172742] = 'NES',
| |
− | [183259] = 'SNES',
| |
− | [184839] = 'N64',
| |
− | [182172] = 'GC', -- Sometimes has been NGC
| |
− | [19610114] = 'NS' -- Nintendo Switch
| |
− | }
| |
− |
| |
− | -- Translation table for converting system aliases to QIDs
| |
− | local systemIDs = {
| |
− | ['PS1'] = 10677,
| |
− | ['PS2'] = 10680,
| |
− | ['PS3'] = 10683,
| |
− | ['PS4'] = 5014725,
| |
− | ['PC'] = 16338,
| |
− | ['WII'] = 8079,
| |
− | ['WIIU'] = 56942,
| |
− | ['XBOX'] = 132020,
| |
− | ['X360'] = 48263,
| |
− | ['XONE'] = 13361286,
| |
− | ['3DS'] = 203597,
| |
− | ['PSV'] = 188808,
| |
− | ['DS'] = 170323,
| |
− | ['NDS'] = 170323,
| |
− | ['PSP'] = 170325,
| |
− | ['IOS'] = 48493,
| |
− | ['AND'] = 94,
| |
− | ['GB'] = 186437,
| |
− | ['GBA'] = 188642,
| |
− | ['GBC'] = 203992,
| |
− | ['DC'] = 184198,
| |
− | ['SAT'] = 200912,
| |
− | ['NES'] = 172742,
| |
− | ['SNES'] = 183259,
| |
− | ['N64'] = 184839,
| |
− | ['GC'] = 182172,
| |
− | ['NGC'] = 182172,
| |
− | ['NS'] = 19610114
| |
− | }
| |
− |
| |
− | -- List of accepted aggregator arguments and their related QID.
| |
− | local aggregatorAliases = {
| |
− | [150248] = 'MC',
| |
− | [40160] = 'GR',
| |
− | [21039459] = 'OC'
| |
− | }
| |
− |
| |
− | -- List of accepted aggregator arguments and their related QID.
| |
− | local aggregatorIDs = {
| |
− | ['MC'] = 150248,
| |
− | ['GR'] = 40160,
| |
− | ['OC'] = 21039459
| |
− | }
| |
− |
| |
− | -- List of accepted reviewer arguments and their related QID.
| |
− | local reviewerAliases = {
| |
− | [591573] = 'FAM',
| |
− | [207708] = 'IGN'
| |
− | }
| |
− |
| |
− | -- List of accepted reviewer arguments and their related QID.
| |
− | local reviewerIDs = {
| |
− | ['FAM'] = 591573,
| |
− | ['IGN'] = 207708
| |
− | }
| |
− |
| |
− | local function sortByPlatform(a,b)
| |
− | local platformA = nil;
| |
− | local platformB = nil;
| |
− | if(a['qualifiers']['P400'] ~= nil and b['qualifiers']['P400'][1] ~= nil) then
| |
− | platformA = p.getSystemAlias(a['qualifiers']['P400'][1]['datavalue']['value']['numeric-id']);
| |
− | if(platformA == nil) then
| |
− | platformA = mw.wikibase.label('Q'..a['qualifiers']['P400'][1]['datavalue']['value']['numeric-id']);
| |
− | end;
| |
− | end;
| |
− | if(b['qualifiers']['P400'] ~= nil and b['qualifiers']['P400'][1] ~= nil) then
| |
− | platformB = p.getSystemAlias(b['qualifiers']['P400'][1]['datavalue']['value']['numeric-id']);
| |
− | if(platformB == nil) then
| |
− | platformB = mw.wikibase.label('Q'..b['qualifiers']['P400'][1]['datavalue']['value']['numeric-id']);
| |
− | end;
| |
− | end;
| |
− |
| |
− | return platformA < platformB
| |
− | end;
| |
− |
| |
− | local function buildCite(reference)
| |
− | local referenceUrl = nil;
| |
− | local cite = nil;
| |
− |
| |
− | if(reference['snaks']['P854'] ~= nil and reference['snaks']['P854'][1] ~= nil) then
| |
− | referenceUrl = reference['snaks']['P854'][1]['datavalue']['value'];
| |
− | end;
| |
− |
| |
− | if(referenceUrl ~= nil and referenceUrl ~= "") then
| |
− | cite = "{{cite web|url="..referenceUrl;
| |
− |
| |
− | local pubdate = nil;
| |
− | local accessdate = nil;
| |
− | local publisher = nil;
| |
− | local work = nil;
| |
− | local title = nil;
| |
− | local archiveUrl = nil;
| |
− | local archiveDate = nil;
| |
− | local authors = {};
| |
− |
| |
− | if(reference['snaks']['P577'] ~= nil and reference['snaks']['P577'][1] ~= nil) then
| |
− | pubdate = reference['snaks']['P577'][1]['datavalue']['value']['time'];
| |
− | end;
| |
− | if(reference['snaks']['P813'] ~= nil and reference['snaks']['P813'][1] ~= nil) then
| |
− | accessdate = reference['snaks']['P813'][1]['datavalue']['value']['time'];
| |
− | end;
| |
− | if(reference['snaks']['P123'] ~= nil and reference['snaks']['P123'][1] ~= nil) then
| |
− | publisher = mw.wikibase.label('Q'..reference['snaks']['P123'][1]['datavalue']['value']['numeric-id']);
| |
− | end;
| |
− | if(reference['snaks']['P1433'] ~= nil and reference['snaks']['P1433'][1] ~= nil) then
| |
− | work = mw.wikibase.label('Q'..reference['snaks']['P1433'][1]['datavalue']['value']['numeric-id']);
| |
− | end;
| |
− | if(reference['snaks']['P1476'] ~= nil and reference['snaks']['P1476'][1] ~= nil) then
| |
− | title = reference['snaks']['P1476'][1]['datavalue']['value']['text'];
| |
− | end;
| |
− | if(reference['snaks']['P1065'] ~= nil and reference['snaks']['P1065'][1] ~= nil) then
| |
− | archiveUrl = reference['snaks']['P1065'][1]['datavalue']['value'];
| |
− | end;
| |
− | if(reference['snaks']['P2960'] ~= nil and reference['snaks']['P2960'][1] ~= nil) then
| |
− | archiveDate = reference['snaks']['P2960'][1]['datavalue']['value']['time'];
| |
− | end;
| |
− | if(reference['snaks']['P50'] ~= nil and #reference['snaks']['P50'] > 0) then
| |
− | for i,authorDat in pairs(reference['snaks']['P50']) do
| |
− | local authorQid = 'Q'..authorDat['datavalue']['value']['numeric-id'];
| |
− | if(entities[authorQid] == nil) then
| |
− | entities[authorQid] = mw.wikibase.getEntity(authorQid);
| |
− | end;
| |
− |
| |
− | local author = {};
| |
− | author['fullname'] = mw.wikibase.label(authorQid); -- Default to label
| |
− | author['first'] = nil;
| |
− | author['last'] = nil;
| |
− |
| |
− | if(entities[authorQid]['claims']['P735'] ~= nil and entities[authorQid]['claims']['P735'][1] ~= nil) then
| |
− | author['first'] = mw.wikibase.label('Q'..entities[authorQid]['claims']['P735'][1]['mainsnak']['datavalue']['value']['numeric-id']);
| |
− | end;
| |
− | if(entities[authorQid]['claims']['P734'] ~= nil and entities[authorQid]['claims']['P734'][1] ~= nil) then
| |
− | author['last'] = mw.wikibase.label('Q'..entities[authorQid]['claims']['P734'][1]['mainsnak']['datavalue']['value']['numeric-id']);
| |
− | end;
| |
− |
| |
− | table.insert(authors, author);
| |
− | end;
| |
− | end;
| |
− |
| |
− | if(title ~= nil and title ~= "") then
| |
− | cite = cite .. "|title="..title;
| |
− | end;
| |
− | if(publisher ~= nil and publisher ~= "") then
| |
− | cite = cite .. "|publisher="..publisher;
| |
− | end;
| |
− | if(work ~= nil and work ~= "") then
| |
− | cite = cite .. "|work="..work;
| |
− | end;
| |
− | if(pubdate ~= nil and pubdate ~= "") then
| |
− | local pubdateText = Date(pubdate):text(df);
| |
− |
| |
− | cite = cite .. "|date="..pubdateText;
| |
− | end;
| |
− | if(accessdate ~= nil and accessdate ~= "") then
| |
− | local accessdateText = Date(accessdate):text(df);
| |
− |
| |
− | cite = cite .. "|accessdate="..accessdateText;
| |
− | end;
| |
− | if(archiveUrl ~= nil and archiveUrl ~= "" and archiveDate ~= nil and archiveDate ~= "") then
| |
− | local archivedateText = Date(archiveDate):text(df);
| |
− | cite = cite .. "|archiveurl="..archiveUrl;
| |
− | cite = cite .. "|archivedate="..archivedateText;
| |
− | end;
| |
− | if(#authors > 0) then
| |
− | for i,author in pairs(authors) do
| |
− | if(author['first'] ~= nil and author['last'] ~= nil and author['first'] ~= "" and author['last'] ~= "") then
| |
− | if(#authors == 1) then
| |
− | cite = cite .."|last="..author['last'].."|first="..author['first'];
| |
− | else
| |
− | cite = cite .."|last"..i.."="..author['last'].."|first"..i.."="..author['first'];
| |
− | end;
| |
− | else
| |
− | if(#authors == 1) then
| |
− | cite = cite .."|author="..author['fullname'];
| |
− | else
| |
− | cite = cite .."|author"..i.."="..author['fullname'];
| |
− | end;
| |
− | end;
| |
− | end;
| |
− | end;
| |
− |
| |
− |
| |
− | cite = cite..'}}';
| |
− | end;
| |
− |
| |
− | return cite;
| |
− | end;
| |
− |
| |
− | local function printReviewRow(frame, reviewscore)
| |
− | local score = nil;
| |
− |
| |
− | if(reviewscore['mainsnak']['datavalue'] ~= nil and reviewscore['mainsnak']['datavalue']['value'] ~= nil) then
| |
− | score = reviewscore['mainsnak']['datavalue']['value'];
| |
− | else
| |
− | return "";
| |
− | end;
| |
− |
| |
− | local ret = ""
| |
− | local system = nil;
| |
− | local reference = nil;
| |
− |
| |
− | if(reviewscore['qualifiers']['P400'] ~= nil and reviewscore['qualifiers']['P400'][1] ~= nil) then
| |
− | system = p.getSystemAlias(reviewscore['qualifiers']['P400'][1]['datavalue']['value']['numeric-id']);
| |
− | end
| |
− | if(system ~= nil and system ~= "" and showSystem) then
| |
− | if(systemFormat == "para") then
| |
− | ret = ret.."("..system..") ";
| |
− | else
| |
− | ret = ret..system..": ";
| |
− | end;
| |
− | end;
| |
− |
| |
− | ret = ret..score;
| |
− |
| |
− | if(reviewscore['references'] ~= nil and reviewscore['references'][1] ~= nil and genRefs) then
| |
− | local cite = buildCite(reviewscore['references'][1]);
| |
− |
| |
− | if(cite ~= nil) then
| |
− | local scoreBy = p.getAggregatorAlias(reviewscore['qualifiers']['P447'][1]['datavalue']['value']['numeric-id']);
| |
− | if(scoreBy == nil) then
| |
− | scoreBy = p.getReviewerAlias(reviewscore['qualifiers']['P447'][1]['datavalue']['value']['numeric-id']);
| |
− | end;
| |
− |
| |
− | local name = entity:getLabel()..'-'..scoreBy;
| |
− | if(system ~= nil and system ~= "") then
| |
− | name = name..system;
| |
− | end;
| |
− |
| |
− | cite = frame:extensionTag{ name = "ref", args = {name=name}, content=cite };
| |
− | ret = ret..cite;
| |
− | end;
| |
− | end;
| |
− |
| |
− | return ret.."<br />";
| |
− | end
| |
| | | |
| function p.getSystemAlias(numericId) | | function p.getSystemAlias(numericId) |
− | return systemAliases[numericId]; | + | return "" |
| end | | end |
| | | |
| function p.getSystemID(system) | | function p.getSystemID(system) |
− | return systemIDs[system]; | + | return "" |
| end | | end |
| | | |
| function p.getAggregatorAlias(numericId) | | function p.getAggregatorAlias(numericId) |
− | return aggregatorAliases[numericId]; | + | return "" |
| end | | end |
| | | |
| function p.getAggregatorID(system) | | function p.getAggregatorID(system) |
− | return aggregatorIDs[system]; | + | return "" |
| end | | end |
| | | |
| function p.getReviewerAlias(numericId) | | function p.getReviewerAlias(numericId) |
− | return reviewerAliases[numericId]; | + | return "" |
| end | | end |
| | | |
| function p.getReviewerID(system) | | function p.getReviewerID(system) |
− | return reviewerIDs[system]; | + | return "" |
| end | | end |
| | | |
| function p.setReviewer(iReviewer) | | function p.setReviewer(iReviewer) |
− | -- No reviewer, stop. Must have reviewer at least. | + | return "" |
− | if(iReviewer == nil or iReviewer == "") then
| |
− | return "Missing reviewer";
| |
− | end;
| |
− |
| |
− | -- See if supplied reviewer is in the aggregator table.
| |
− | iReviewer = string.upper(iReviewer)
| |
− | reviewer = p.getAggregatorID(iReviewer);
| |
− | if(reviewer == nil or reviewer == "") then
| |
− | -- No? Maybe in the reviewer table.
| |
− | reviewer = p.getReviewerID(iReviewer);
| |
− | if(reviewer == nil or reviewer == "") then
| |
− | return "Invalid reviewer";
| |
− | end;
| |
− | end;
| |
− | | |
− | return nil;
| |
| end; | | end; |
| | | |
| function p.setDateFormat(iDf) | | function p.setDateFormat(iDf) |
− | -- Check for a date format parameter. Default to mdy if missing. | + | return "" |
− | if(iDf ~= nil and iDf ~= "") then
| |
− | df = string.lower(iDf);
| |
− | end;
| |
| end; | | end; |
| | | |
| function p.setSystemFormat(iSf) | | function p.setSystemFormat(iSf) |
− | if(iSf ~= nil and iSf ~= "") then | + | return "" |
− | systemFormat = string.lower(iSf);
| |
− | end;
| |
| end; | | end; |
| | | |
| function p.setUpdateLinkStyle(iStyle) | | function p.setUpdateLinkStyle(iStyle) |
− | if(iStyle ~= nil and iStyle ~= "") then | + | return "" |
− | updateLinkStyle = string.lower(iStyle);
| |
− | end;
| |
| end; | | end; |
| | | |
| function p.setGame(iGame) | | function p.setGame(iGame) |
− | -- Check for a game parameter. If missing, default to current article. | + | return "" |
− | if(iGame ~= nil and iGame ~= "") then
| |
− | if(entities[iGame] == nil and mw.wikibase ~= nil) then
| |
− | entities[iGame] = mw.wikibase.getEntity(iGame);
| |
− | end;
| |
− |
| |
− | entity = entities[iGame]
| |
− | else
| |
− | -- Need to research if we can determine the entity's ID before retrieving it.
| |
− | if(mw.wikibase ~= nil) then
| |
− | entity = mw.wikibase.getEntity();
| |
− | if(entity ~= nil) then
| |
− | entities[entity['id']] = entity;
| |
− | end;
| |
− | end;
| |
− | end;
| |
− |
| |
− | if(entity == nil) then
| |
− | return "No matching wikidata entity found";
| |
− | end;
| |
− |
| |
− | return nil;
| |
| end; | | end; |
| | | |
| function p.setSystem(iSystem) | | function p.setSystem(iSystem) |
− | -- Check for system parameter, and resolve it's QID if possible. | + | return "" |
− | if(iSystem ~= nil and iSystem ~= "") then
| |
− | system = string.upper(iSystem);
| |
− | systemId = p.getSystemID(system);
| |
− | elseif(not showSystem) then
| |
− | -- If no system was specified, force showSystem on.
| |
− | showSystem = true;
| |
− | end;
| |
| end; | | end; |
| | | |
| function p.setGenerateReferences(iGenRefs) | | function p.setGenerateReferences(iGenRefs) |
− | -- Reference suppression. | + | return "" |
− | if(iGenRefs ~= nil and iGenRefs ~= "") then
| |
− | genRefs = yesno(iGenRefs, true);
| |
− | end;
| |
| end; | | end; |
| | | |
| function p.setShowSystem(iShowSystem) | | function p.setShowSystem(iShowSystem) |
− | -- Suppression of system aliases in front of score, i.e. (XBOX) xx/100. | + | return "" |
− | if(iShowSystem ~= nil and iShowSystem ~= "") then
| |
− | showSystem = yesno(iShowSystem, false);
| |
− | end;
| |
− | if(system == nil or system == '') then
| |
− | -- If no system was specified, force showSystem on.
| |
− | showSystem = true;
| |
− | end;
| |
| end; | | end; |
| | | |
| function p.setShowUpdateLink(iShowUpdateLink) | | function p.setShowUpdateLink(iShowUpdateLink) |
− | -- Suppression of update link to Wikidata at the end of the score, i.e. (XBOX) xx/100[+]. | + | return "" |
− | if(iShowUpdateLink ~= nil and iShowUpdateLink ~= "") then
| |
− | showUpdateLink = yesno(iShowUpdateLink, false);
| |
− | end;
| |
| end; | | end; |
| | | |
| function p.getUpdateLink() | | function p.getUpdateLink() |
− | if(updateLinkStyle == "pen") then | + | return "" |
− | return "[[File:Blue pencil.svg|frameless|text-top|10px|alt=Edit this on Wikidata|link=https://www.wikidata.org/wiki/"..entity['id'].."?uselang="..mw.language.getContentLanguage().code.."#P444|Edit this on Wikidata]]";
| |
− | elseif(updateLinkStyle == "noSub") then
| |
− | return '[[d:'..entity['id']..'#P444|[±]]]';
| |
− | elseif(updateLinkStyle == "text and pen") then
| |
− | return '<span style="position: relative;"><span style="position: absolute; right: 0;">[[File:Blue pencil.svg|10px|baseline|link=|alt=]]</span>[[d:'..entity['id']..'#P444|<span style="position: relative; padding-right: 14px;">Edit on Wikidata</span>]]</span>'
| |
− | end;
| |
− |
| |
− | return '<sub>[[d:'..entity['id']..'#P444|[±]]]</sub>';
| |
| end; | | end; |
| | | |
| function p.getSitelink() | | function p.getSitelink() |
− | return mw.wikibase.sitelink(entity['id']); | + | return "" |
| end; | | end; |
| | | |
| function p.getLabel() | | function p.getLabel() |
− | return mw.wikibase.label(entity['id']); | + | return "" |
| end; | | end; |
| | | |
| function p.getParts() | | function p.getParts() |
− | local ret = {}; | + | return "" |
− |
| |
− | -- Loop all of "has Part" for this title
| |
− | local parts = entity['claims']['P527'];
| |
− | if(parts) then
| |
− | for i,part in pairs(parts) do
| |
− | table.insert(ret,"Q"..part['mainsnak']['datavalue']['value']['numeric-id']);
| |
− | end;
| |
− | end;
| |
− | | |
− | return ret;
| |
| end; | | end; |
| | | |
| function p.getEarliestPublicationDate() | | function p.getEarliestPublicationDate() |
− | local ret = {}; | + | return "" |
− |
| |
− | local pubDates = entity['claims']['P577'];
| |
− | if(pubDates) then
| |
− | for i,pubDate in pairs(pubDates) do
| |
− | local timestamp = pubDate['mainsnak']['datavalue']['value']['time'];
| |
− | local accessdate = Date(timestamp);
| |
− | table.insert(ret,accessdate);
| |
− | end;
| |
− | end;
| |
− | | |
− | if(#ret < 1) then
| |
− | return nil;
| |
− | end;
| |
− | | |
− | table.sort(ret);
| |
− |
| |
− | return ret[1];
| |
| end; | | end; |
| | | |
| function p.printReviewScores(frame) | | function p.printReviewScores(frame) |
− | local ret = ""; | + | return "" |
− |
| |
− | -- Loop all of "review scores" for this title
| |
− | local reviewscores = entity['claims']['P444'];
| |
− | if(reviewscores) then
| |
− | -- Find reviews that qualify for printing and insert into array.
| |
− | local reviewsToPrint = {}
| |
− | for i,review in pairs(reviewscores) do
| |
− | if(review['qualifiers'] ~= nil) then
| |
− | local scoreBy = nil
| |
− | if(review['qualifiers']['P447'] ~= nil and review['qualifiers']['P447'][1] ~= nil) then
| |
− | scoreBy = review['qualifiers']['P447'][1]['datavalue']['value']['numeric-id'];
| |
− | end;
| |
− | if(scoreBy == reviewer) then
| |
− | -- If template specified a system, we need to check for the specific system and only output that one.
| |
− | if(system == nil or system == "") then
| |
− | -- No system specified, so output each one found.
| |
− | table.insert(reviewsToPrint,review);
| |
− | else
| |
− | -- Get platform if it exists.
| |
− | if(review['qualifiers']['P400'] ~= nil and review['qualifiers']['P400'][1] ~= nil) then
| |
− | -- Try to match based on QID.
| |
− | local reviewSysId = review['qualifiers']['P400'][1]['datavalue']['value']['numeric-id'];
| |
− | if(systemId == reviewSysId) then
| |
− | table.insert(reviewsToPrint,review);
| |
− | else
| |
− | -- If that failed, try to match based on label.
| |
− | local systemName = mw.wikibase.label('Q'..reviewSysId);
| |
− | if(systemName ~= nil and string.upper(systemName) == system) then
| |
− | table.insert(reviewsToPrint,review);
| |
− | end;
| |
− | end;
| |
− | end;
| |
− | end;
| |
− | end;
| |
− | end;
| |
− | end;
| |
− |
| |
− | -- Sort the array by platform label.
| |
− | table.sort(reviewsToPrint, sortByPlatform);
| |
− |
| |
− | -- If a system was not specified, showSystem has defaulted to true. If this title only has one platform and one review, we will turn it off.
| |
− | -- Note: If the title has zero or more platforms defined, we leave showSystem on. We are unable to determine if this is a single-platform game.
| |
− | --if((system == nil or system == "") and #reviewsToPrint == 1 and entity['claims']['P400'] ~= nil and #entity['claims']['P400'] == 1) then
| |
− | -- Simplifying this based on discussion at [Template:Video game reviews]. If there's only one review, don't display system unless explicitly requested.
| |
− | if((system == nil or system == "") and #reviewsToPrint == 1) then
| |
− | showSystem = false;
| |
− | end;
| |
− | | |
− | -- Print the reviews
| |
− | for i,review in ipairs(reviewsToPrint) do
| |
− | ret = ret .. printReviewRow(frame, review);
| |
− | end;
| |
− | end;
| |
− | | |
− | if(ret ~= "") then
| |
− | ret = string.sub(ret, 1, -7);
| |
− | elseif(not showUpdateLink) then
| |
− | ret = nil;
| |
− | end;
| |
− |
| |
− | -- Add edit link at end if showUpdateLink is on.
| |
− | if(showUpdateLink) then
| |
− | ret = ret .. p.getUpdateLink();
| |
− | end;
| |
− | | |
− | return ret;
| |
| end; | | end; |
| | | |
| return p | | return p |