Extension:StructuredInput/code
From MediaWiki.org
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;
?>
