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