function addApproval()
 {
     global $USERINFO;
     global $ID;
     global $INFO;
     if (!$INFO['exists']) {
         msg($this->getLang('cannot approve a non-existing revision'), -1);
         return;
     }
     $approvalRevision = $this->helper->getRevision();
     $approvals = $this->helper->getApprovals();
     if (!isset($approvals[$approvalRevision])) {
         $approvals[$approvalRevision] = array();
     }
     $approvals[$approvalRevision][$INFO['client']] = array($INFO['client'], $_SERVER['REMOTE_USER'], $USERINFO['mail'], time());
     $success = p_set_metadata($ID, array('approval' => $approvals), true, true);
     if ($success) {
         msg($this->getLang('version approved'), 1);
         $data = array();
         $data['rev'] = $approvalRevision;
         $data['id'] = $ID;
         $data['approver'] = $_SERVER['REMOTE_USER'];
         $data['approver_info'] = $USERINFO;
         if ($this->getConf('send_mail_on_approve') && $this->helper->isRevisionApproved($approvalRevision)) {
             /** @var action_plugin_publish_mail $mail */
             $mail = plugin_load('action', 'publish_mail');
             $mail->send_approve_mail();
         }
         trigger_event('PLUGIN_PUBLISH_APPROVE', $data);
     } else {
         msg($this->getLang('cannot approve error'), -1);
     }
     send_redirect(wl($ID, array('rev' => $this->helper->getRevision()), true, '&'));
 }
 function handle_revisions(Doku_Event &$event, $param)
 {
     global $ID;
     global $INFO;
     if (!$this->hlp->isActive()) {
         return;
     }
     $meta = p_get_metadata($ID);
     $latest_rev = $meta['last_change']['date'];
     $member = null;
     foreach ($event->data->_content as $key => $ref) {
         if (isset($ref['_elem']) && $ref['_elem'] == 'opentag' && $ref['_tag'] == 'div' && $ref['class'] == 'li') {
             $member = $key;
         }
         if ($member && $ref['_elem'] == 'tag' && $ref['_tag'] == 'input' && $ref['name'] == 'rev2[]') {
             $revision = $ref['value'];
             if ($revision == 'current') {
                 $revision = $INFO['meta']['date']['modified'];
             }
             if ($this->hlp->isRevisionApproved($revision)) {
                 $event->data->_content[$member]['class'] = 'li approved_revision';
             } else {
                 $event->data->_content[$member]['class'] = 'li unapproved_revision';
             }
             $member = null;
         }
     }
     return true;
 }
 function showLatestDraftIfNewer()
 {
     global $ID;
     $revision = $this->hlp->getRevision();
     $latestRevision = $this->hlp->getLastestRevision();
     if ($revision >= $latestRevision) {
         return;
     }
     if ($this->hlp->isRevisionApproved($latestRevision)) {
         return;
     }
     echo '<span class="approval_latest_draft">';
     printf($this->getLang('apr_recent_draft'), wl($ID, 'force_rev=1'));
     echo $this->difflink($ID, null, $revision) . '</span>';
 }