Extension talk:Attribute
Any user names refer to users of that site, who are not necessarily users of MediaWiki.org (even if they share the same username).
I'm using MediaWiki: 1.7.1, PHP: 5.1.5 (apache2handler) and MySQL: 5.0.24-community-nt
I had to change
// Add special page
if ( version_compare( $wgVersion, '1.7.1', '<' )) {
require_once(dirname(__FILE__) . '/xyAttributeQuery.php');
SpecialPage::addPage(new XyAttributeQuery() );
}
else {
if ( !function_exists( 'extAddSpecialPage' ) ) {
require( dirname(__FILE__) . '/../ExtensionFunctions.php' );
}
extAddSpecialPage( dirname(__FILE__) . '/xyAttributeQuery.php', 'XyAttributeQuery', 'XyAttributeQuery' );
}
to
// Add special page
if ( version_compare( $wgVersion, '1.7.1', '<=' )) {
require_once(dirname(__FILE__) . '/xyAttributeQuery.php');
SpecialPage::addPage(new XyAttributeQuery() );
}
else {
if ( !function_exists( 'extAddSpecialPage' ) ) {
require( dirname(__FILE__) . '/../' );
}
extAddSpecialPage( dirname(__FILE__) . '/xyAttributeQuery.php', 'XyAttributeQuery', 'XyAttributeQuery' );
}
in xyAttribute.php
There's no ExtensionFunctions.php in 1.7.1, and I couldn't find much about the file. Seems to work fine after the change.
Icon issue: Using MW 1.7.1, had to comment out the $xyAttributePng line in LocalSettings.php in order for the button to display properly in the editor. --Jtautry 21:31, 16 October 2006 (UTC)
Contents |
[edit] Props
Just wanted to leave some props. Very cool extension. --131.158.72.67 22:12, 15 December 2006 (UTC)
[edit] MW Versions
Is it possible to have it on MW 1.6.7? Any changes to code are needed?
Regards, Aretai 14:43, 2 February 2007 (UTC)
[edit] Having problems in 1.9.2 version
- I am getting
"Fatal error: Call to undefined function wfInsertArray() in /opt/lampp/mediawiki/extensions/xyAttribute/xyAttribute.php on line 170"
--129.46.173.14 02:10, 17 February 2007 (UTC)
- I had the same problem using version 1.9.3
Solved including the following statement right before line 170:
require_once("./includes/DatabaseFunctions.php");
201.49.16.43 17:30, 10 May 2007 (UTC)
Note that the above conversation may have been edited or added to since the transfer. If in doubt, check the edit history.
[edit] missing specialpage
I simply don't have the page for querying the data. I had some minor issues installinng the extension (like missing ExtensionFunctions.php that I didn't have in the extensions directory and a missing localization file plus I had to paste the SQL thing in phpMyAdmin) that I fixed. But I don't have the special page, I usually nuke everything that doesn't work, but this is a neat extension and anyway the data is being gathered even if I don't have any specialpage for querying it.
Any suggestions on manually creating the specialpage? 354d 18:11, 20 August 2007 (UTC)
[edit] More recent versions?
Just wondering if there are any plans to update this extension for the more recent versions of MediaWiki, specifically 1.12?
[edit] Working with 1.11.2
- Installing ExtensionFunctions.php and activating DatabaseFunctions.php as described above
- Adding return values for some functions in xyAttribute.php
Here is the whole patch for xyAttribute.php
79a80
> return true;
86c87
< if ($action != 'xyAttributes') return;
---
> if ($action != 'xyAttributes') return false;
89c90
< $myAction = wfMsg('xyattributes');
---
> $myAction = wfMsg('xyAttributes');
106c107
< return;
---
> return false;
158c159
< if (!$ret) return;
---
> if (!$ret) return false;
169a171
> require_once("./includes/DatabaseFunctions.php");
170a173
> return true;
[edit] Working with 1.13.3
- Using this modified xyAttribute.php and adding to the extension folder ExtensionFunctions.php and activating DatabaseFunctions.php as described above will get things working with 1.13.3. (Based on the post above)
<?php /* Attribute extension for mediawiki * * @author xypron * @version 0.4 * filename: xyAttribute.php * * Version history * 0.4 Attribute Query added * 0.3 Installer added * 0.2 Tuple IDs added to attributes table * 0.1 First version * * Adds: * - attribute tag with attributes name and value * - attribute icon for editor * - attribute tab to see attribute values * - database table with attributes for evaluations */ if(!defined('MEDIAWIKI')) { header("HTTP/1.1 404 Not Found"); die('<H1>404 Not found</H1>'); } // Our variables $xyAttributePng = $wgScriptPath."/extensions/xyAttribute/attribute.png"; //install extension hooks $wgHooks['SkinTemplateTabs'][] = 'xyAttributesTabHook'; $wgHooks['UnknownAction'][] = 'xyAttributesActionHook'; $wgHooks['ArticleSaveComplete'][] = 'xyAttributesCompleteHook'; $wgHooks['EditPage::showEditForm:initial'][] = 'xyAttributesEditorButton'; // Add the initialization routine as extension function. $wgExtensionFunctions[] = 'xyAttributesInit'; // Intialize function xyAttributesInit() { global $wgMessageCache, $wgParser, $wgUser, $wgVersion; global $xyAttributes; // Add special page if ( version_compare( $wgVersion, '1.7.1', '<' )) { require_once(dirname(__FILE__) . '/xyAttributeQuery.php'); SpecialPage::addPage(new XyAttributeQuery() ); } else { if ( !function_exists( 'extAddSpecialPage' ) ) { require( dirname(__FILE__) . '/../ExtensionFunctions.php' ); } extAddSpecialPage( dirname(__FILE__) . '/xyAttributeQuery.php', 'XyAttributeQuery', 'XyAttributeQuery' ); } // During parsing $xyAttributes will be filled $xyAttributes= Array(); // Add a parser hook for the attribute tag $wgParser->setHook( "attribute", "xyAttributeParse" ); $lang = $wgUser->getOption('language'); $langInclude=dirname(__FILE__)."/xyAttributeMessages."; //en = default include($langInclude."en"); if ($lang != "en") { include($langInclude.$lang); } } // add a tab on the article page function xyAttributesTabHook(&$skin , &$content_actions ) { global $wgRequest, $wgTitle; $myAction = wfMsg('xyAttributes'); $action = $wgRequest->getText( 'action' ); $content_actions['xyAttributes'] = array( 'class' => ($action == 'xyAttributes')? 'selected' : '', 'text' => wfMsg('xyattributes'), 'href' => $wgTitle->getLocalUrl('action=xyAttributes') ); return true; } // Show the attributes function xyAttributesActionHook( &$action, &$article ) { global $wgTitle, $wgOut, $wgUser, $wgDBprefix; // Is this our action? if ($action != 'xyAttributes') return false; $myAction = wfMsg('xyAttributes'); $tblname = $wgDBprefix."xyAttributes"; $id = $article->getID(); // read database table $sql = "SELECT * FROM $tblname WHERE page_id = $id ORDER BY page_id, tuple_id, name"; // $dbr =& wfGetDB( DB_SLAVE ); // $ret = $dbr->query ( $sql ) ; $dbr =& wfGetDB( DB_SLAVE ); if ( $dbr !== false ) { $ret = $dbr->query( $sql, '', true ); } else { $ret = false; } if (!$ret) { require_once(dirname(__FILE__) . '/xyAttributeInstall.php'); return false; } // output as wiki table $output = "{|\n" . "| '''" . wfMsg('xytuple') . "'''\n" . "| '''" . wfMsg('xyname') . "'''\n" . "|\n| '''" . wfMsg('xyvalue') . "'''\n" . "|-\n"; $tuple_id = -1; while( $row = $dbr->fetchObject( $ret ) ){ $output .= "| "; if ($row->tuple_id != $tuple_id) { $tuple_id = $row->tuple_id; $output.= $tuple_id; }; $output .= "\n| ".$row->name."\n| =\n| ".$row->value."\n|-\n"; } $output .= "|}"; $dbr->freeResult( $ret ); $wgOut->clearHTML(); $wgOut->addWikiText($output); return false; } function xyAttributeParse($content, $params, $parser ) { global $xyAttributes; // remember attributes $tuple_id = xyAttribute::nextTupleID(); $xyAttributes[$tuple_id] = $params; return $content; } // When article is saved, insert collected attributes into database table function xyAttributesCompleteHook(&$article, &$user, $text, $summary ) { global $wgDBprefix, $wgDBtype, $wgOut; global $xyAttributes; $id = $article->getID(); $tblname = $wgDBprefix."xyAttributes"; // delete existing entries $sql = "DELETE from $tblname WHERE page_id = '$id'"; $db =& wfGetDB( DB_MASTER ); if ( $db !== false ) { $ret = $db->query( $sql, '', true ); } else { $ret = false; } // we cannot delete, probably table is missing if (!$ret) return false; $tab = Array(); foreach( $xyAttributes as $tuple_id => $arr ) { foreach( $arr as $opt => $val ) { $row = Array( 'page_id' => $id, 'tuple_id' => $tuple_id, 'name' => $opt, 'value' => $val); $tab[]=$row; } } require_once("./includes/DatabaseFunctions.php"); $ret = wfInsertArray( "xyAttributes", $tab); return true; } // Add a button to the internal editor function xyAttributesEditorButton ($editPage) { global $wgOut, $wgScriptPath, $xyAttributePng; $ico = $xyAttributePng; $alt = wfMsg('xyattribute'); // Insert javascript script that hooks up to create button. $wgOut->addScript("<script type=\"text/javascript\">\n". "function xyAttributesAddButton(){\n". " addButton('$ico','$alt','<'+'attribute name=\"','\" />','value');". " }\n". "addOnloadHook(xyAttributesAddButton);\n". "</script>"); return true; } class xyAttribute { var $error = 0; /* * Counter for tuples * Tested with PHP 4.3.6 Win32 * Tested with PHP 5.1.1 Win32 */ function nextTupleId() { static $tuple_id; if (!isset($tuple_id)) $tuple_id = 0; return ++$tuple_id; } function installErrorHandler() { $this->error = 1; } } ?>
[edit] 1.16.1
In xyAttributeQuery.php there is an apparent typo. Around line 235, the query button creation line should look like:
<TD><INPUT name="ok" type="submit" value="$Query" /></TD>
The unbalanced <TD </TD tags in the downloaded file cause Chrome and EI8 and EI9 to choke and fail to display the button. Firefox is more forgiving and never had this problem.
Mickeyf 16:00, 12 July 2011 (UTC)