xref: /dokuwiki/inc/Ui/Subscribe.php (revision 66e555e237c4348c799bba8c03f1a8a490fcc7d6)
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