. * * @category Documentation * @package StatusNet * @author Evan Prodromou * @copyright 2011 StatusNet, Inc. * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @link http://status.net/ */ if (!defined('STATUSNET')) { // This check helps protect against security problems; // your code file can't be executed directly from the web. exit(1); } /** * Utility for finding and parsing documentation files * * @category Documentation * @package StatusNet * @author Evan Prodromou * @copyright 2011 StatusNet, Inc. * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @link http://status.net/ */ class DocFile { protected $filename; protected $contents; function __construct($filename) { $this->filename = $filename; } static function forTitle($title, array $paths, $language=null) { $filename = null; if (Event::handle('StartDocFileForTitle', array($title, &$paths, &$filename))) { foreach ($paths as $path) { $def = $path.'/'.$title; if (!file_exists($def)) { $def = null; } $lang = glob($path.'/'.$title.'.*'); if ($lang === false) { $lang = array(); } if (!empty($lang) || !empty($def)) { $filename = self::negotiateLanguage($lang, $def, $language); break; } } Event::handle('EndDocFileForTitle', array($title, $paths, &$filename)); } if (empty($filename)) { return null; } else { return new DocFile($filename); } } function toHTML(array $args=array()) { if (empty($this->contents)) { $this->contents = file_get_contents($this->filename); } return common_markup_to_html($this->contents, $args); } static function defaultPaths() { $paths = array(INSTALLDIR.'/local/doc-src/', INSTALLDIR.'/doc-src/'); $site = GNUsocial::currentSite(); if (!empty($site)) { array_unshift($paths, INSTALLDIR.'/local/doc-src/'.$site.'/'); } return $paths; } static function mailPaths() { $paths = array(INSTALLDIR.'/local/mail-src/', INSTALLDIR.'/mail-src/'); $site = GNUsocial::currentSite(); if (!empty($site)) { array_unshift($paths, INSTALLDIR.'/local/mail-src/'.$site.'/'); } return $paths; } private static function negotiateLanguage(array $filenames, $defaultFilename=null, $language = null) { // Default is current language $langcode = common_language(); // Is a language set? if (!empty($language)) { // And is it valid? if (common_valid_language($language)) { // Use this as language (e.g. from form) $langcode = strval($language); } } foreach ($filenames as $filename) { if (preg_match('/\.'.$langcode.'$/', $filename)) { return $filename; } } return $defaultFilename; } }