Extension:StructuredInput/code

From MediaWiki.org
Jump to: navigation, search

Code from Extension:StructuredInput

Contents

[edit] Core files

[edit] /extensions/structuredInput.php

<?php
 
set_include_path(get_include_path() . PATH_SEPARATOR . $IP.'/extensions/structuredInput/special' );
 
$StructuredInput = new StructuredInput();
$wgHooks['SpecialPage_initList'][] = array($StructuredInput, 'addToSpecialPages');
$wgHooks['EditPage::showEditForm:initial'][] = array($StructuredInput, 'editForm');
 
// Bootleg php namespace
class StructuredInput
{
 
  public static $inputList = array();
 
  function getInputList() {
    return StructuredInput::$inputList;
  }
 
  function addToSpecialPages(&$list) {
    global $wgAllMessagesEn;
        global $wgMessageCache;
 
    foreach (StructuredInput::getInputList() as $val) {
      $key = str_replace (' ', '', strtolower($val));
      if (!array_key_exists($key, $wgAllMessagesEn)) {
        $wgAllMessagesEn[$key] = $val;
        $wgMessageCache->addMessages( array ($key => $val) );
 
        $pageName = str_replace (' ', '', $val);
 
        $list[$pageName] = array('SpecialPage', $pageName);
      }
    }
 
    $wgAllMessagesEn['structuredinput'] = 'Structured Input Forms';
        $wgMessageCache->addMessages( array ('structuredinput' => 'Structured Input Forms') );
 
    $list['StructuredInput'] = array('SpecialPage', 'StructuredInput');
 
    return true;
  }
 
  function editForm(&$form) {
    if (!empty($_POST['_type'])) {
      $post = $_POST;
      require_once('structuredInput/transformations/'.$_POST['_type'].'.php');
      $form->textbox1 = $output;
      $form->starttime = wfTimestampNow();
      $form->edittime = wfTimestampNow();
    } elseif (empty($_GET['viewsource']) && strpos($form->mArticle->mContent, '<!--|StructuredInput|-->') !== False){
      global $wgServerName, $wgScriptPath;
 
      $inputType = str_replace(array('<','!','-','>'),
                               array('','','',''),
                               $this->extractStructuredValue('StructuredInput', 
                                                             $form->mArticle->mContent) 
                               );
 
      header('Location: http://'.$wgServerName.$wgScriptPath.'/index.php?title=Special:'.$inputType.'&id='.$_GET['title']);
      die();
    }
 
        return true;
  }
 
  function extractStructuredValue($key, $haystack) {
    preg_match('/<!--\|'.$key.'\|-->(.*?)<!--\|'.$key.'\|-->/', $haystack, $matches);
 
    if (!empty($matches)) {
      return $matches[1];
    } else {
      return '';
    }
  }
 
  function extractStructuredValues($haystack) {
    preg_match_all('/<!--\|(.*)\|-->(.*?)<!--\|\1\|-->/s', $haystack, $matches);
 
    return array_combine($matches[1], $matches[2]);
  } 
 
  function makeRadios($key, $data, $selectedValue) {
    $output = '';
 
    foreach ($data as $item) {
      $id = $key.str_replace(' ', '', $item['value']);
 
      if ($item['value'] == $selectedValue) {
        $selected = 'checked="checked"';
      } else {
        $selected = '';
      }
 
      $output .= <<<TEXT
 
        <input type="radio" id="$id" name="$key" value="{$item['value']}" $selected />
        <label for="$id"><strong>{$item['value']}</strong>: {$item['caption']}</label>
        <br />
 
TEXT;
 
    }
 
    return $output;
  } 
 
  function makeSelect($key, $data, $selectedValue) {
    $output = '<select id="'.$key.'" name="'.$key.'">';
    foreach ($data as $value) {
      if ($value == $selectedValue) {
        $selected = ' selected="selected"';
      } else {
        $selected = '';
      }
 
      $output .= '<option'.$selected.'>'.$value.'</option>';
    }
    $output .= '</select>';
    return $output;
  } 
 
  function getStructuredData($id) {
    $pageContent = Revision::newFromTitle( Title::newFromText($id) )->getText();
 
    $data = StructuredInput::extractStructuredValues($pageContent);
    $data['_title'] = $id;
 
    return $data;
  }
 
}
 
 
?>

[edit] /extensions/structuredInput/special/SpecialStructuredInput.php

<?php
 
 
function wfSpecialStructuredInput() {
 
  global $wgOut, $wgServerName, $wgScriptPath;
 
  $structuredInputs = '';
 
  foreach (StructuredInput::getInputList() as $input) {
    $key = ucfirst(str_replace (' ', '', strtolower($input)));
    $structuredInputs .= '<li><a href="http://'.$wgServerName.$wgScriptPath.'/index.php/Special:'.$key.'">'.$input.'</a></li>';
  }
 
  if (!empty($structuredInputs)) $structuredInputs = '<ul>'.$structuredInputs.'</ul>';
 
 
  $wgOut->addHTML($structuredInputs);
 
}
 
?>

[edit] Sample code

[edit] StructuredInput form

/extensions/structuredInput/special/SpecialAddactivity.php:

<?php
 
function wfSpecialAddactivity() {
    global $wgOut, $wgScriptPath;
    $action = $wgScriptPath.'/index.php?action=submit';
 
    if (!empty($_GET['id'])) {
      $data = StructuredInput::getStructuredData($_GET['id']);
    } else {
      $data = array();
    }
 
    $html = <<<TEMPLATE
 
<h2>Add activity</h2>
 
<script>
    function setAction(formEl) {
      if (formEl['_title'].value) {
        formEl.action += '&title=' + formEl['_title'].value;
        return true;
      } else {
        return false;
      }
    }
</script>
 
<form method="post" action="$action" onsubmit="return setAction(this)">
    <input type="hidden" name="_type" value="addactivity" />
    <input type="hidden" name="wpPreview" value="Show preview" />
 
    <label for="_title">Activity name:</label>
    <input id="_title" name="_title" value="{$data['_title']}" />
 
    <br /><br />
 
    <label for="goal">Goal:</label>
    <textarea id="goal" name="goal">{$data['goal']}</textarea>
 
    <br /><br />
 
    <label for="items">Content Covered:</label>
    <input id="items" name="items" value="{$data['items']}" />
 
    <br /><br />
 
    <label for="steps">Steps to Follow:</label>
    <textarea id="steps" name="instructions">{$data['instructions']}</textarea>
 
    <br /><br />
 
    <input type="submit" value="Save">
 
</form>
 
TEMPLATE;
 
    $wgOut->addHTML($html);
}
 
?>

[edit] Transformation code

/extensions/structuredInput/transformations/addactivity.php:

<?php

$output = <<<EOT

==Goal==
<!--|goal|-->{$post['goal']}<!--|goal|-->

==What to do==
<!--|instructions|-->{$post['instructions']}<!--|instructions|-->

<!--|StructuredInput|--><!--Addactivity--><!--|StructuredInput|-->

EOT;

?>
Personal tools
Namespaces
Variants
Actions
Site
Support
Download
Development
Communication
Print/export
Toolbox