xref: /dokuwiki/inc/confutils.php (revision d2ee49cef0fd47388b8a1ac8cb259dac5fb8c670)
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