/** * Display the subscribe form * * @author Adrian Lang <*****@*****.**> */ function tpl_subscribe() { global $INFO; global $ID; global $lang; global $conf; $stime_days = $conf['subscribe_time'] / 60 / 60 / 24; echo p_locale_xhtml('subscr_form'); echo '<h2>' . $lang['subscr_m_current_header'] . '</h2>'; echo '<div class="level2">'; if ($INFO['subscribed'] === false) { echo '<p>' . $lang['subscr_m_not_subscribed'] . '</p>'; } else { echo '<ul>'; foreach ($INFO['subscribed'] as $sub) { echo '<li><div class="li">'; if ($sub['target'] !== $ID) { echo '<code class="ns">' . hsc(prettyprint_id($sub['target'])) . '</code>'; } else { echo '<code class="page">' . hsc(prettyprint_id($sub['target'])) . '</code>'; } $sstl = sprintf($lang['subscr_style_' . $sub['style']], $stime_days); if (!$sstl) { $sstl = hsc($sub['style']); } echo ' (' . $sstl . ') '; echo '<a href="' . wl($ID, array('do' => 'subscribe', 'sub_target' => $sub['target'], 'sub_style' => $sub['style'], 'sub_action' => 'unsubscribe', 'sectok' => getSecurityToken())) . '" class="unsubscribe">' . $lang['subscr_m_unsubscribe'] . '</a></div></li>'; } echo '</ul>'; } echo '</div>'; // Add new subscription form echo '<h2>' . $lang['subscr_m_new_header'] . '</h2>'; echo '<div class="level2">'; $ns = getNS($ID) . ':'; $targets = array($ID => '<code class="page">' . prettyprint_id($ID) . '</code>', $ns => '<code class="ns">' . prettyprint_id($ns) . '</code>'); $styles = array('every' => $lang['subscr_style_every'], 'digest' => sprintf($lang['subscr_style_digest'], $stime_days), 'list' => sprintf($lang['subscr_style_list'], $stime_days)); $form = new Doku_Form(array('id' => 'subscribe__form')); $form->startFieldset($lang['subscr_m_subscribe']); $form->addRadioSet('sub_target', $targets); $form->startFieldset($lang['subscr_m_receive']); $form->addRadioSet('sub_style', $styles); $form->addHidden('sub_action', 'subscribe'); $form->addHidden('do', 'subscribe'); $form->addHidden('id', $ID); $form->endFieldset(); $form->addElement(form_makeButton('submit', 'subscribe', $lang['subscr_m_subscribe'])); html_form('SUBSCRIBE', $form); echo '</div>'; }
/** * Send a list mail * * Sends a list mail showing a list of changed pages. * * @author Adrian Lang <*****@*****.**> * * @param string $subscriber_mail The target mail address * @param array $ids Array of ids * @param string $ns_id The id of the namespace * @return bool true if a mail was sent */ protected function send_list($subscriber_mail, $ids, $ns_id) { if (count($ids) === 0) { return false; } $tlist = ''; $hlist = '<ul>'; foreach ($ids as $id) { $link = wl($id, array(), true); $tlist .= '* ' . $link . NL; $hlist .= '<li><a href="' . $link . '">' . hsc($id) . '</a></li>' . NL; } $hlist .= '</ul>'; $id = prettyprint_id($ns_id); $trep = array('DIFF' => rtrim($tlist), 'PAGE' => $id, 'SUBSCRIBE' => wl($id, array('do' => 'subscribe'), true, '&')); $hrep = array('DIFF' => $hlist); return $this->send($subscriber_mail, 'subscribe_list', $ns_id, 'subscr_list', $trep, $hrep); }
/** * Validate POST data * * Validates POST data for a subscribe or unsubscribe request. This is the * default action for the event ACTION_HANDLE_SUBSCRIBE. * * @author Adrian Lang <*****@*****.**> */ function subscription_handle_post(&$params) { global $INFO; global $lang; // Get and validate parameters. if (!isset($params['target'])) { throw new Exception('no subscription target given'); } $target = $params['target']; $valid_styles = array('every', 'digest'); if (substr($target, -1, 1) === ':') { // Allow “list” subscribe style since the target is a namespace. $valid_styles[] = 'list'; } $style = valid_input_set('style', $valid_styles, $params, 'invalid subscription style given'); $action = valid_input_set('action', array('subscribe', 'unsubscribe'), $params, 'invalid subscription action given'); // Check other conditions. if ($action === 'subscribe') { if ($INFO['userinfo']['mail'] === '') { throw new Exception($lang['subscr_subscribe_noaddress']); } } elseif ($action === 'unsubscribe') { $is = false; foreach ($INFO['subscribed'] as $subscr) { if ($subscr['target'] === $target) { $is = true; } } if ($is === false) { throw new Exception(sprintf($lang['subscr_not_subscribed'], $_SERVER['REMOTE_USER'], prettyprint_id($target))); } // subscription_set deletes a subscription if style = null. $style = null; } $data = in_array($style, array('list', 'digest')) ? time() : null; $params = compact('target', 'style', 'data', 'action'); }
/** * Send a list mail * * Sends a list mail showing a list of changed pages. * * @param string $subscriber_mail The target mail address * @param array $ids Array of ids * @param string $ns_id The id of the namespace * * @author Adrian Lang <*****@*****.**> */ function subscription_send_list($subscriber_mail, $ids, $ns_id) { if (count($ids) === 0) { return; } global $conf; $list = ''; foreach ($ids as $id) { $list .= '* ' . wl($id, array(), true) . NL; } subscription_send($subscriber_mail, array('DIFF' => rtrim($list), 'SUBSCRIBE' => wl($ns_id . $conf['start'], array('do' => 'subscribe'), true, '&')), 'subscribe_list', prettyprint_id($ns_id), 'subscr_list'); }
/** * Send a list mail * * Sends a list mail showing a list of changed pages. * * @param string $subscriber_mail The target mail address * @param array $changes Array of changes * @param string $id The id of the namespace * * @author Adrian Lang <*****@*****.**> */ function subscription_send_list($subscriber_mail, $changes, $id) { global $conf; $list = ''; foreach ($changes as $change) { $list .= '* ' . wl($change['id'], array(), true) . NL; } subscription_send($subscriber_mail, array('DIFF' => rtrim($list), 'SUBSCRIBE' => wl($id . $conf['start'], array('do' => 'subscribe'), true, '&')), 'subscribe_list', prettyprint_id($id), 'subscr_list'); }