Extension talk:Attribute
Add topicAny 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)
Props
[edit]Just wanted to leave some props. Very cool extension. --131.158.72.67 22:12, 15 December 2006 (UTC)
MW Versions
[edit]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)
Having problems in 1.9.2 version
[edit]- 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");
Note that the above conversation may have been edited or added to since the transfer. If in doubt, check the edit history.
missing specialpage
[edit]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)
More recent versions?
[edit]Just wondering if there are any plans to update this extension for the more recent versions of MediaWiki, specifically 1.12?
Working with 1.11.2
[edit]- 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;
Working with 1.13.3
[edit]- 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;
}
}
?>
1.16.1
[edit]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.