Extension talk:Attribute

From mediawiki.org
Latest comment: 12 years ago by Mickeyf in topic 1.16.1
The following discussion has been transferred from Meta-Wiki.
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)Reply

Props[edit]

Just wanted to leave some props. Very cool extension. --131.158.72.67 22:12, 15 December 2006 (UTC)Reply

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)Reply


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)Reply


  • 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)Reply

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)Reply

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.

Mickeyf 16:00, 12 July 2011 (UTC)Reply