| 
							- <?php
 - 
 - namespace dokuwiki\Ui;
 - 
 - use dokuwiki\Draft;
 - use dokuwiki\Extension\Event;
 - use dokuwiki\Form\Form;
 - 
 - /**
 -  * DokuWiki Page Editor
 -  *
 -  * @package dokuwiki\Ui
 -  */
 - class Editor extends Ui
 - {
 -     /**
 -      * Display the Edit Window
 -      * preprocess edit form data
 -      *
 -      * @return void
 -      * @author   Andreas Gohr <andi@splitbrain.org>
 -      *
 -      * @triggers EDIT_FORM_ADDTEXTAREA
 -      */
 -     public function show()
 -     {
 -         global $INPUT;
 -         global $ID;
 -         global $REV;
 -         global $DATE;
 -         global $PRE;
 -         global $SUF;
 -         global $INFO;
 -         global $SUM;
 -         global $lang;
 -         global $conf;
 -         global $TEXT;
 - 
 -         global $license;
 - 
 -         if ($INPUT->has('changecheck')) {
 -             $check = $INPUT->str('changecheck');
 -         } elseif (!$INFO['exists']) {
 -             // $TEXT has been loaded from page template
 -             $check = md5('');
 -         } else {
 -             $check = md5($TEXT);
 -         }
 -         $mod = (md5($TEXT) !== $check);
 - 
 -         $wr = $INFO['writable'] && !$INFO['locked'];
 - 
 -         // intro locale text (edit, rditrev, or read)
 -         if ($wr) {
 -             $intro = ($REV) ? 'editrev' : 'edit';
 -         } else {
 -             // check pseudo action 'source'
 -             if (!actionOK('source')) {
 -                 msg('Command disabled: source', -1);
 -                 return;
 -             }
 -             $intro = 'read';
 -         }
 - 
 -         // create the Editor form
 -         $form = new Form(['id' => 'dw__editform']);
 -         $form->setHiddenField('id', $ID);
 -         $form->setHiddenField('rev', $REV);
 -         $form->setHiddenField('date', $DATE);
 -         $form->setHiddenField('prefix', $PRE . '.');
 -         $form->setHiddenField('suffix', $SUF);
 -         $form->setHiddenField('changecheck', $check);
 - 
 -         // prepare data for EDIT_FORM_ALTERNATE event
 -         $data = [
 -             'form' => $form,
 -             'wr' => $wr,
 -             'media_manager' => true,
 -             'target' => ($INPUT->has('target') && $wr) ? $INPUT->str('target') : 'section',
 -             'intro_locale' => $intro
 -         ];
 - 
 -         if ($data['target'] !== 'section') {
 -             // Only emit event if page is writable, section edit data is valid and
 -             // edit target is not section.
 -             Event::createAndTrigger('EDIT_FORM_ADDTEXTAREA', $data, [$this, 'addTextarea'], true);
 -         } else {
 -             $this->addTextarea($data);
 -         }
 - 
 -         $form->setHiddenField('target', $data['target']);
 - 
 -         if ($INPUT->has('hid')) {
 -             $form->setHiddenField('hid', $INPUT->str('hid'));
 -         }
 -         if ($INPUT->has('codeblockOffset')) {
 -             $form->setHiddenField('codeblockOffset', $INPUT->str('codeblockOffset'));
 -         }
 - 
 -         $form->addTagOpen('div')->id('wiki__editbar')->addClass('editBar');
 - 
 -         $form->addTagOpen('div')->id('size__ctl');
 -         $form->addTagClose('div');
 - 
 -         if ($wr) {
 -             // add edit buttons: save, preview, cancel
 -             $form->addTagOpen('div')->addClass('editButtons');
 -             $form->addButton('do[save]', $lang['btn_save'])->attr('type', 'submit')
 -                 ->attrs(['accesskey' => 's', 'tabindex' => '4'])
 -                 ->id('edbtn__save');
 -             $form->addButton('do[preview]', $lang['btn_preview'])->attr('type', 'submit')
 -                 ->attrs(['accesskey' => 'p', 'tabindex' => '5'])
 -                 ->id('edbtn__preview');
 -             $form->addButton('do[cancel]', $lang['btn_cancel'])->attr('type', 'submit')
 -                 ->attrs(['tabindex' => '6']);
 -             $form->addTagClose('div'); // close div editButtons class
 - 
 -             // add a textbox for edit summary
 -             $form->addTagOpen('div')->addClass('summary');
 -             $input = $form->addTextInput('summary', $lang['summary'])
 -                 ->attrs(['size' => '50', 'tabindex' => '2'])
 -                 ->id('edit__summary')->addClass('edit')
 -                 ->val($SUM);
 -             $input->getLabel()->attr('class', 'nowrap');
 - 
 -             // adds a checkbox for minor edits for logged in users
 -             if ($conf['useacl'] && $INPUT->server->str('REMOTE_USER')) {
 -                 $form->addHTML(' ');
 -                 $form->addCheckbox('minor', $lang['minoredit'])->id('edit__minoredit')->addClass('nowrap')->val('1');
 -             }
 -             $form->addTagClose('div'); // close div summary class
 -         }
 - 
 -         $form->addTagClose('div'); // close div editBar class
 - 
 -         // license note
 -         if ($wr && $conf['license']) {
 -             $attr = [
 -                 'href' => $license[$conf['license']]['url'],
 -                 'rel' => 'license',
 -                 'class' => 'urlextern',
 -                 'target' => $conf['target']['extern'] ?: ''
 -             ];
 -             $form->addTagOpen('div')->addClass('license');
 -             $form->addHTML($lang['licenseok']
 -                 . ' <a ' . buildAttributes($attr, true) . '>' . $license[$conf['license']]['name'] . '</a>');
 -             $form->addTagClose('div');
 -         }
 - 
 -         // start editor html output
 -         if ($wr) {
 -             // sets changed to true when previewed
 -             echo '<script>/*<![CDATA[*/textChanged = ' . ($mod ? 'true' : 'false') . '/*!]]>*/</script>';
 -         }
 - 
 -         // print intro locale text (edit, rditrev, or read.txt)
 -         if (isset($data['intro_locale'])) {
 -             echo p_locale_xhtml($data['intro_locale']);
 -         }
 - 
 -         echo '<div class="editBox" role="application">';
 - 
 -         echo '<div class="toolbar group">';
 -         echo '<div id="tool__bar" class="tool__bar">';
 -         if ($wr && $data['media_manager']) {
 -             echo '<a href="' . DOKU_BASE . 'lib/exe/mediamanager.php?ns=' . $INFO['namespace'] . '" target="_blank">';
 -             echo $lang['mediaselect'];
 -             echo '</a>';
 -         }
 -         echo '</div>';
 -         echo '</div>';
 - 
 -         echo '<div id="draft__status" class="draft__status">';
 -         $draft = new Draft($ID, $INFO['client']);
 -         if ($draft->isDraftAvailable()) {
 -             echo $draft->getDraftMessage();
 -         }
 -         echo '</div>';
 - 
 -         echo $form->toHTML('Edit');
 - 
 -         echo '</div>'; // close div editBox class
 -     }
 - 
 -     /**
 -      * Display the default edit form (textarea)
 -      *
 -      * the default action for EDIT_FORM_ADDTEXTAREA
 -      *
 -      * @param array{wr: bool, media_manager: bool, target: string, intro_locale: string, form: Form} $data
 -      */
 -     public function addTextarea(&$data)
 -     {
 -         global $TEXT;
 - 
 -         if ($data['target'] !== 'section') {
 -             msg('No editor for edit target ' . hsc($data['target']) . ' found.', -1);
 -         }
 - 
 -         // set textarea attributes
 -         $attr = ['tabindex' => '1'];
 -         if (!$data['wr']) $attr['readonly'] = 'readonly';
 -         $attr['dir'] = 'auto';
 -         $attr['cols'] = '80';
 -         $attr['rows'] = '10';
 - 
 -         $data['form']->addTextarea('wikitext', '')->attrs($attr)->val($TEXT)
 -             ->id('wiki__text')->addClass('edit');
 -     }
 - }
 
 
  |