1<?php 2 3namespace dokuwiki\Ui; 4 5use dokuwiki\Form\Form; 6 7/** 8 * DokuWiki Subscribe Interface 9 * 10 * @package dokuwiki\Ui 11 */ 12class Subscribe extends Ui 13{ 14 /** 15 * Display the subscribe form 16 * 17 * @author Adrian Lang <lang@cosmocode.de> 18 * 19 * @triggers HTMLFORM_SUBSCRIBE_OUTPUT 20 * @return void 21 */ 22 public function show() 23 { 24 global $INPUT; 25 global $INFO; 26 global $ID; 27 global $lang; 28 global $conf; 29 $stime_days = $conf['subscribe_time'] / 60 / 60 / 24; 30 31 // print intro 32 echo p_locale_xhtml('subscr_form'); 33 34 // list up current subscriptions 35 echo '<h2>'.$lang['subscr_m_current_header'].'</h2>'; 36 echo '<div class="level2">'; 37 if ($INFO['subscribed'] === false) { 38 echo '<p>'.$lang['subscr_m_not_subscribed'].'</p>'; 39 } else { 40 echo '<ul>'; 41 foreach ($INFO['subscribed'] as $sub) { 42 echo '<li><div class="li">'; 43 if ($sub['target'] !== $ID) { 44 echo '<code class="ns">'.hsc(prettyprint_id($sub['target'])).'</code>'; 45 } else { 46 echo '<code class="page">'.hsc(prettyprint_id($sub['target'])).'</code>'; 47 } 48 $sstl = sprintf($lang['subscr_style_'.$sub['style']], $stime_days); 49 if (!$sstl) $sstl = hsc($sub['style']); 50 echo ' ('.$sstl.') '; 51 52 echo '<a href="'.wl( 53 $ID, 54 array( 55 'do' => 'subscribe', 56 'sub_target'=> $sub['target'], 57 'sub_style' => $sub['style'], 58 'sub_action'=> 'unsubscribe', 59 'sectok' => getSecurityToken() 60 ) 61 ). 62 '" class="unsubscribe">'.$lang['subscr_m_unsubscribe']. 63 '</a></div></li>'; 64 } 65 echo '</ul>'; 66 } 67 echo '</div>'; 68 69 // Add new subscription form 70 echo '<h2>'.$lang['subscr_m_new_header'].'</h2>'; 71 echo '<div class="level2">'; 72 $ns = getNS($ID).':'; 73 $targets = [ 74 $ID => '<code class="page">'.prettyprint_id($ID).'</code>', 75 $ns => '<code class="ns">'.prettyprint_id($ns).'</code>', 76 ]; 77 $styles = [ 78 'every' => $lang['subscr_style_every'], 79 'digest' => sprintf($lang['subscr_style_digest'], $stime_days), 80 'list' => sprintf($lang['subscr_style_list'], $stime_days), 81 ]; 82 83 // create the form 84 $form = new Form(['id' => 'subscribe__form']); 85 $form->addTagOpen('div')->addClass('no'); 86 $form->setHiddenField('id', $ID); 87 $form->setHiddenField('do', 'subscribe'); 88 $form->setHiddenField('sub_action', 'subscribe'); 89 90 $form->addFieldsetOpen($lang['subscr_m_subscribe']); 91 $value = (array_key_exists($INPUT->post->str('sub_target'), $targets)) ? 92 $INPUT->str('sub_target') : key($targets); 93 foreach ($targets as $val => $label) { 94 $data = ($value === $val) ? ['checked' => 'checked'] : []; 95 $form->addRadioButton('sub_target', $label)->val($val)->attrs($data); 96 } 97 $form->addFieldsetClose(); 98 99 $form->addFieldsetOpen($lang['subscr_m_receive']); 100 $value = (array_key_exists($INPUT->post->str('sub_style'), $styles)) ? 101 $INPUT->str('sub_style') : key($styles); 102 foreach ($styles as $val => $label) { 103 $data = ($value === $val) ? ['checked' => 'checked'] : []; 104 $form->addRadioButton('sub_style', $label)->val($val)->attrs($data); 105 } 106 $form->addFieldsetClose(); 107 108 $form->addButton('do[subscribe]', $lang['subscr_m_subscribe'])->attr('type', 'submit'); 109 $form->addTagClose('div'); 110 111 // print form that might be modified by HTMLFORM_SUBSCRIBE_OUTPUT event handlers 112 print $form->toHTML('subscribe'); 113 114 echo '</div>'; 115 } 116 117} 118