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