xref: /dokuwiki/inc/Ui/Subscribe.php (revision feee32dc5882f2ec122feaa7f6096a5897af1ddc)
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 HTML_SUBSCRIBEFORM_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        // emit HTML_SUBSCRIBEFORM_OUTPUT event
113        Event::createAndTrigger('HTML_SUBSCRIBEFORM_OUTPUT', $form, null, false);
114        print $form->toHTML();
115
116        echo '</div>'.DOKU_LF;
117    }
118
119}
120