Mercurial > hg > rc1
comparison plugins/help/help.php @ 0:1e000243b222
vanilla 1.3.3 distro, I hope
| author | Charlie Root |
|---|---|
| date | Thu, 04 Jan 2018 15:50:29 -0500 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:1e000243b222 |
|---|---|
| 1 <?php | |
| 2 | |
| 3 /** | |
| 4 * Roundcube Help Plugin | |
| 5 * | |
| 6 * @author Aleksander 'A.L.E.C' Machniak | |
| 7 * @author Thomas Bruederli <thomas@roundcube.net> | |
| 8 * @license GNU GPLv3+ | |
| 9 * | |
| 10 * Configuration (see config.inc.php.dist) | |
| 11 * | |
| 12 **/ | |
| 13 | |
| 14 class help extends rcube_plugin | |
| 15 { | |
| 16 // all task excluding 'login' and 'logout' | |
| 17 public $task = '?(?!login|logout).*'; | |
| 18 // we've got no ajax handlers | |
| 19 public $noajax = true; | |
| 20 // skip frames | |
| 21 public $noframe = true; | |
| 22 | |
| 23 function init() | |
| 24 { | |
| 25 $this->load_config(); | |
| 26 $this->add_texts('localization/', false); | |
| 27 | |
| 28 // register task | |
| 29 $this->register_task('help'); | |
| 30 | |
| 31 // register actions | |
| 32 $this->register_action('index', array($this, 'action')); | |
| 33 $this->register_action('about', array($this, 'action')); | |
| 34 $this->register_action('license', array($this, 'action')); | |
| 35 | |
| 36 $this->add_hook('startup', array($this, 'startup')); | |
| 37 $this->add_hook('error_page', array($this, 'error_page')); | |
| 38 } | |
| 39 | |
| 40 function startup($args) | |
| 41 { | |
| 42 $rcmail = rcmail::get_instance(); | |
| 43 | |
| 44 // add taskbar button | |
| 45 $this->add_button(array( | |
| 46 'command' => 'help', | |
| 47 'class' => 'button-help', | |
| 48 'classsel' => 'button-help button-selected', | |
| 49 'innerclass' => 'button-inner', | |
| 50 'label' => 'help.help', | |
| 51 ), 'taskbar'); | |
| 52 | |
| 53 $this->include_script('help.js'); | |
| 54 $rcmail->output->set_env('help_open_extwin', $rcmail->config->get('help_open_extwin', false), true); | |
| 55 | |
| 56 // add style for taskbar button (must be here) and Help UI | |
| 57 $skin_path = $this->local_skin_path(); | |
| 58 if (is_file($this->home . "/$skin_path/help.css")) { | |
| 59 $this->include_stylesheet("$skin_path/help.css"); | |
| 60 } | |
| 61 } | |
| 62 | |
| 63 function action() | |
| 64 { | |
| 65 $rcmail = rcmail::get_instance(); | |
| 66 | |
| 67 // register UI objects | |
| 68 $rcmail->output->add_handlers(array( | |
| 69 'helpcontent' => array($this, 'content'), | |
| 70 'tablink' => array($this, 'tablink'), | |
| 71 )); | |
| 72 | |
| 73 if ($rcmail->action == 'about') | |
| 74 $rcmail->output->set_pagetitle($this->gettext('about')); | |
| 75 else if ($rcmail->action == 'license') | |
| 76 $rcmail->output->set_pagetitle($this->gettext('license')); | |
| 77 else | |
| 78 $rcmail->output->set_pagetitle($this->gettext('help')); | |
| 79 | |
| 80 $rcmail->output->send('help.help'); | |
| 81 } | |
| 82 | |
| 83 function tablink($attrib) | |
| 84 { | |
| 85 $rcmail = rcmail::get_instance(); | |
| 86 | |
| 87 $attrib['name'] = 'helplink' . $attrib['action']; | |
| 88 $attrib['href'] = $rcmail->url(array('_action' => $attrib['action'], '_extwin' => !empty($_REQUEST['_extwin']) ? 1 : null)); | |
| 89 | |
| 90 // title might be already translated here, so revert to it's initial value | |
| 91 // so button() will translate it correctly | |
| 92 $attrib['title'] = $attrib['label']; | |
| 93 | |
| 94 return $rcmail->output->button($attrib); | |
| 95 } | |
| 96 | |
| 97 function content($attrib) | |
| 98 { | |
| 99 $rcmail = rcmail::get_instance(); | |
| 100 | |
| 101 switch ($rcmail->action) { | |
| 102 case 'about': | |
| 103 if (is_readable($this->home . '/content/about.html')) { | |
| 104 return @file_get_contents($this->home . '/content/about.html'); | |
| 105 } | |
| 106 $default = $rcmail->url(array('_task' => 'settings', '_action' => 'about', '_framed' => 1)); | |
| 107 $src = $rcmail->config->get('help_about_url', $default); | |
| 108 break; | |
| 109 | |
| 110 case 'license': | |
| 111 if (is_readable($this->home . '/content/license.html')) { | |
| 112 return @file_get_contents($this->home . '/content/license.html'); | |
| 113 } | |
| 114 $src = $rcmail->config->get('help_license_url', 'http://www.gnu.org/licenses/gpl-3.0-standalone.html'); | |
| 115 break; | |
| 116 | |
| 117 default: | |
| 118 $src = $rcmail->config->get('help_source'); | |
| 119 | |
| 120 // resolve task/action for depp linking | |
| 121 $index_map = $rcmail->config->get('help_index_map', array()); | |
| 122 $rel = $_REQUEST['_rel']; | |
| 123 list($task,$action) = explode('/', $rel); | |
| 124 if ($add = $index_map[$rel]) | |
| 125 $src .= $add; | |
| 126 else if ($add = $index_map[$task]) | |
| 127 $src .= $add; | |
| 128 break; | |
| 129 } | |
| 130 | |
| 131 // default content: iframe | |
| 132 if (!empty($src)) { | |
| 133 $attrib['src'] = $this->resolve_language($src); | |
| 134 } | |
| 135 | |
| 136 if (empty($attrib['id'])) | |
| 137 $attrib['id'] = 'rcmailhelpcontent'; | |
| 138 | |
| 139 $attrib['name'] = $attrib['id']; | |
| 140 | |
| 141 return $rcmail->output->frame($attrib); | |
| 142 } | |
| 143 | |
| 144 function error_page($args) | |
| 145 { | |
| 146 $rcmail = rcmail::get_instance(); | |
| 147 | |
| 148 if ($args['code'] == 403 && $rcmail->request_status == rcube::REQUEST_ERROR_URL && ($url = $rcmail->config->get('help_csrf_info'))) { | |
| 149 $args['text'] .= '<p>' . html::a(array('href' => $url, 'target' => '_blank'), $this->gettext('csrfinfo')) . '</p>'; | |
| 150 } | |
| 151 | |
| 152 return $args; | |
| 153 } | |
| 154 | |
| 155 private function resolve_language($path) | |
| 156 { | |
| 157 // resolve language placeholder | |
| 158 $rcmail = rcmail::get_instance(); | |
| 159 $langmap = $rcmail->config->get('help_language_map', array('*' => 'en_US')); | |
| 160 $lang = $langmap[$_SESSION['language']] ?: $langmap['*']; | |
| 161 | |
| 162 return str_replace('%l', $lang, $path); | |
| 163 } | |
| 164 } |
