7dc1946e0c7583b519c993f494cf07d6eb013d6f
[mailer.git] / inc / inc-functions.php
1 <?php
2 /************************************************************************
3  * MXChange v0.2.1                                    Start: 03/10/2009 *
4  * ===============                              Last change: 03/10/2009 *
5  *                                                                      *
6  * -------------------------------------------------------------------- *
7  * File              : inc-functions.php                                *
8  * -------------------------------------------------------------------- *
9  * Short description : Special functions for handling include files     *
10  * -------------------------------------------------------------------- *
11  * Kurzbeschreibung  : Spezielle Funktionen fuer Include-Dateien        *
12  * -------------------------------------------------------------------- *
13  * $Revision:: 999                                                    $ *
14  * $Date:: 2009-03-10 17:24:54 +0100 (Tue, 10 Mar 2009)               $ *
15  * $Tag:: 0.2.1-FINAL                                                 $ *
16  * $Author:: quix0r                                                   $ *
17  * Needs to be in all Files and every File needs "svn propset           *
18  * svn:keywords Date Revision" (autoprobset!) at least!!!!!!            *
19  * -------------------------------------------------------------------- *
20  * Copyright (c) 2003 - 2008 by Roland Haeder                           *
21  * For more information visit: http://www.mxchange.org                  *
22  *                                                                      *
23  * This program is free software; you can redistribute it and/or modify *
24  * it under the terms of the GNU General Public License as published by *
25  * the Free Software Foundation; either version 2 of the License, or    *
26  * (at your option) any later version.                                  *
27  *                                                                      *
28  * This program is distributed in the hope that it will be useful,      *
29  * but WITHOUT ANY WARRANTY; without even the implied warranty of       *
30  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        *
31  * GNU General Public License for more details.                         *
32  *                                                                      *
33  * You should have received a copy of the GNU General Public License    *
34  * along with this program; if not, write to the Free Software          *
35  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,               *
36  * MA  02110-1301  USA                                                  *
37  ************************************************************************/
38
39 // Some security stuff...
40 if (!defined('__SECURITY')) {
41         $INC = substr(dirname(__FILE__), 0, strpos(dirname(__FILE__), '/inc') + 4) . '/security.php';
42         require($INC);
43 }
44
45 // Check if our config file is writeable or not
46 function isIncludeWriteable ($inc) {
47         // Generate FQFN
48         $FQFN = sprintf("%sinc/%s.php", constant('PATH'), $inc);
49
50         // Abort by simple test
51         if ((isFileReadable($FQFN)) && (!is_writeable($FQFN))) {
52                 return false;
53         } // END - if
54
55         // Test write-access on directory
56         return is_writeable(dirname($FQFN));
57 }
58
59 // Reads a directory with PHP files in and gets only files back
60 function getArrayFromDirectory ($baseDir, $prefix, $includeDirs = false, $addBaseDir = true, $excludePattern = '@(\.|\.\.)$@') {
61         //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, "baseDir={$baseDir},prefix={$prefix} - Entered!");
62         // Init includes
63         $INCs = array();
64
65         // Open directory
66         $dirPointer = opendir(constant('PATH') . $baseDir) or app_die(__FUNCTION__, __LINE__, "Cannot read ".basename($baseDir)." path!");
67
68         // Read all entries
69         while ($baseFile = readdir($dirPointer)) {
70                 // Steps over this returned $baseFile-Name, when it matches the $excludePattern
71                 if (preg_match($excludePattern, $baseFile, $match)) {
72                         // These Lines are only for debugging!!
73                     //$INC = $baseDir . '/' . $baseFile;
74                         //$FQFN = constant('PATH') . $INC;
75                         //echo '<pre>$baseDir:'.print_r($baseDir, true).'</pre>';
76                         //echo '<pre>$baseDir:'.print_r(constant('PATH') . $baseDir, true).'</pre>';
77                         //echo '<pre>constant(\'PATH\'):'.print_r(constant('PATH'), true).'</pre>';
78                         //echo '<pre>$FQFN:'.print_r($FQFN, true).'</pre>';
79                         continue;
80                 } // END - if
81
82                 // Construct include filename and FQFN
83                 $INC = $baseDir . '/' . $baseFile;
84                 $FQFN = constant('PATH') . $INC;
85
86                 // repalecment of // to / is needed, whenn $baseDir is an emty String
87                 $FQFN = str_replace('//', '/', $FQFN);
88
89                 // Is this a valid reset file?
90                 //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, "baseDir={$baseDir},prefix={$prefix},baseFile={$baseFile}");
91                 if (((isFileReadable($FQFN)) && (substr($baseFile, 0, strlen($prefix)) == $prefix) && (substr($baseFile, -4, 4) == ".php")) || (($includeDirs) && (isDirectory($FQFN)))) {
92                         // Remove both for extension name
93                         $extName = substr($baseFile, strlen($prefix), -4);
94
95                         // Try to find it
96                         $extId = GET_EXT_ID($extName);
97
98                         // Is the extension valid and active?
99                         if (($extId > 0) && (EXT_IS_ACTIVE($extName))) {
100                                 // Then add this file
101                                 //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, " Extension entry ".$baseFile." added.");
102                                 $INCs[] = $INC;
103                         } elseif ($extId == 0) {
104                                 // Add non-extension files as well
105                                 //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, " Regular entry ".$baseFile." added.");
106                                 if ($addBaseDir) {
107                                         $INCs[] = $INC;
108                                 } else {
109                                         $INCs[] = $baseFile;
110                                 }
111                         }
112                 } // END - if
113         } // END - while
114
115         // Close directory
116         closedir($dirPointer);
117
118         // Sort array
119         asort($INCs);
120
121         // Return array with include files
122         //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, " - Left!");
123         return $INCs;
124 }
125
126 // Init INC_POOL
127 function INIT_INC_POOL () {
128         $GLOBALS['inc_pool'] = array();
129 }
130
131 // Setter for INC_POOL
132 function SET_INC_POOL ($includePool) {
133         $GLOBALS['inc_pool'] = (array) $includePool;
134 }
135
136 // Getter for INC_POOL
137 function GET_INC_POOL () {
138         return $GLOBALS['inc_pool'];
139 }
140
141 // Count INC_POOL
142 function COUNT_INC_POOL () {
143         return count($GLOBALS['inc_pool']);
144 }
145
146 // Merge INC_POOL into given
147 function MERGE_INC_POOL ($includePool) {
148         SET_INC_POOL(merge_array(GET_INC_POOL(), $includePool));
149 }
150
151 // Add single include file to INC_POOL
152 function ADD_INC_TO_POOL ($INC) {
153         $GLOBALS['inc_pool'][] = (string) $INC;
154 }
155
156 // Remove an include file from INC_POOL
157 function REMOVE_INC_FROM_POOL ($INC) {
158         // First look it up
159         $key = array_search($INC, GET_INC_POOL());
160
161         // Is it valid?
162         if ($key !== false) {
163                 // Then remove it
164                 unset($GLOBALS['inc_pool'][$key]);
165
166                 // And sort the list
167                 asort($GLOBALS['inc_pool']);
168         } // END - if
169 }
170
171 // [EOF]
172 ?>