1b625487dSandi<?php 2b625487dSandi/** 3b625487dSandi * Utilities for collecting data from config files 4b625487dSandi * 5b625487dSandi * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 6b625487dSandi * @author Harry Fuecks <hfuecks@gmail.com> 7b625487dSandi */ 8b625487dSandi 9b625487dSandi if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../').'/'); 10b625487dSandi 11b625487dSandi/** 12b625487dSandi * Returns the (known) extension and mimetype of a given filename 13b625487dSandi * 14b625487dSandi * @author Andreas Gohr <andi@splitbrain.org> 15b625487dSandi */ 16b625487dSandifunction mimetype($file){ 17b625487dSandi $ret = array(false,false); // return array 18b625487dSandi $mtypes = getMimeTypes(); // known mimetypes 19b625487dSandi $exts = join('|',array_keys($mtypes)); // known extensions (regexp) 20b625487dSandi if(preg_match('#\.('.$exts.')$#i',$file,$matches)){ 21b625487dSandi $ext = strtolower($matches[1]); 22b625487dSandi } 23b625487dSandi 24b625487dSandi if($ext && $mtypes[$ext]){ 25b625487dSandi $ret = array($ext, $mtypes[$ext]); 26b625487dSandi } 27b625487dSandi 28b625487dSandi return $ret; 29b625487dSandi} 30b625487dSandi 31b625487dSandi/** 32b625487dSandi * returns a hash of mimetypes 33b625487dSandi * 34b625487dSandi * @author Andreas Gohr <andi@splitbrain.org> 35b625487dSandi */ 36b625487dSandifunction getMimeTypes() { 37b625487dSandi static $mime = NULL; 38b625487dSandi if ( !$mime ) { 39b625487dSandi $mime = confToHash(DOKU_INC . 'conf/mime.conf'); 40b625487dSandi } 41b625487dSandi return $mime; 42b625487dSandi} 43b625487dSandi 44b625487dSandi/** 45b625487dSandi * returns a hash of acronyms 46b625487dSandi * 47b625487dSandi * @author Harry Fuecks <hfuecks@gmail.com> 48b625487dSandi */ 49b625487dSandifunction getAcronyms() { 50b625487dSandi static $acronyms = NULL; 51b625487dSandi if ( !$acronyms ) { 52b625487dSandi $acronyms = confToHash(DOKU_INC . 'conf/acronyms.conf'); 53*d2ee49ceSSteven Danz if (@file_exists(DOKU_INC . 'conf/local.acronyms.conf')) { 54*d2ee49ceSSteven Danz $local = confToHash(DOKU_INC . 'conf/local.acronyms.conf'); 55*d2ee49ceSSteven Danz $acronyms = array_merge($acronyms, $local); 56*d2ee49ceSSteven Danz } 57b625487dSandi } 58b625487dSandi return $acronyms; 59b625487dSandi} 60b625487dSandi 61b625487dSandi/** 62b625487dSandi * returns a hash of smileys 63b625487dSandi * 64b625487dSandi * @author Harry Fuecks <hfuecks@gmail.com> 65b625487dSandi */ 66b625487dSandifunction getSmileys() { 67b625487dSandi static $smileys = NULL; 68b625487dSandi if ( !$smileys ) { 69b625487dSandi $smileys = confToHash(DOKU_INC . 'conf/smileys.conf'); 70b625487dSandi } 71b625487dSandi return $smileys; 72b625487dSandi} 73b625487dSandi 74b625487dSandi/** 75b625487dSandi * returns a hash of entities 76b625487dSandi * 77b625487dSandi * @author Harry Fuecks <hfuecks@gmail.com> 78b625487dSandi */ 79b625487dSandifunction getEntities() { 80b625487dSandi static $entities = NULL; 81b625487dSandi if ( !$entities ) { 82b625487dSandi $entities = confToHash(DOKU_INC . 'conf/entities.conf'); 83b625487dSandi } 84b625487dSandi return $entities; 85b625487dSandi} 86b625487dSandi 87b625487dSandi/** 88b625487dSandi * returns a hash of interwikilinks 89b625487dSandi * 90b625487dSandi * @author Harry Fuecks <hfuecks@gmail.com> 91b625487dSandi */ 92b625487dSandifunction getInterwiki() { 93b625487dSandi static $wikis = NULL; 94b625487dSandi if ( !$wikis ) { 9527a2b085Sandi $wikis = confToHash(DOKU_INC . 'conf/interwiki.conf',true); 96b625487dSandi } 9797a3e4e3Sandi //add sepecial case 'this' 9827a2b085Sandi $wikis['this'] = DOKU_URL.'{NAME}'; 99b625487dSandi return $wikis; 100b625487dSandi} 101b625487dSandi 102b625487dSandi/** 103b625487dSandi * Builds a hash from a configfile 104b625487dSandi * 1053fd0b676Sandi * If $lower is set to true all hash keys are converted to 1063fd0b676Sandi * lower case. 1073fd0b676Sandi * 108b625487dSandi * @author Harry Fuecks <hfuecks@gmail.com> 1093fd0b676Sandi * @author Andreas Gohr <andi@splitbrain.org> 110b625487dSandi */ 11127a2b085Sandifunction confToHash($file,$lower=false) { 112b625487dSandi $conf = array(); 113b625487dSandi $lines = @file( $file ); 114b625487dSandi if ( !$lines ) return $conf; 115b625487dSandi 116b625487dSandi foreach ( $lines as $line ) { 117b625487dSandi //ignore comments 118b625487dSandi $line = preg_replace('/[^&]?#.*$/','',$line); 119b625487dSandi $line = trim($line); 120b625487dSandi if(empty($line)) continue; 121b625487dSandi $line = preg_split('/\s+/',$line,2); 122b625487dSandi // Build the associative array 12327a2b085Sandi if($lower){ 12427a2b085Sandi $conf[strtolower($line[0])] = $line[1]; 12527a2b085Sandi }else{ 126b625487dSandi $conf[$line[0]] = $line[1]; 127b625487dSandi } 12827a2b085Sandi } 129b625487dSandi 130b625487dSandi return $conf; 131b625487dSandi} 132b625487dSandi 133b625487dSandi 134b625487dSandi//Setup VIM: ex: et ts=2 enc=utf-8 : 135