(no commit message)
[mailer.git] / 0.2.1 / inc / install-inc.php
1 <?php\r
2 /************************************************************************\r
3  * MXChange v0.1.0                                    Start: 08/29/2003 *\r
4  * ===============                              Last change: 11/11/2004 *\r
5  *                                                                      *\r
6  * -------------------------------------------------------------------- *\r
7  * File              : install-inc.php                                  *\r
8  * -------------------------------------------------------------------- *\r
9  * Short description : Functions for installation procedure             *\r
10  * -------------------------------------------------------------------- *\r
11  * Kurzbeschreibung  : Funktionen für die Installationsroutine          *\r
12  * -------------------------------------------------------------------- *\r
13  *                                                                      *\r
14  * -------------------------------------------------------------------- *\r
15  * Copyright (c) 2003 - 2007 by Roland Haeder                           *\r
16  * For more information visit: http://www.mxchange.org                  *\r
17  *                                                                      *\r
18  * This program is free software; you can redistribute it and/or modify *\r
19  * it under the terms of the GNU General Public License as published by *\r
20  * the Free Software Foundation; either version 2 of the License, or    *\r
21  * (at your option) any later version.                                  *\r
22  *                                                                      *\r
23  * This program is distributed in the hope that it will be useful,      *\r
24  * but WITHOUT ANY WARRANTY; without even the implied warranty of       *\r
25  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        *\r
26  * GNU General Public License for more details.                         *\r
27  *                                                                      *\r
28  * You should have received a copy of the GNU General Public License    *\r
29  * along with this program; if not, write to the Free Software          *\r
30  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,               *\r
31  * MA  02110-1301  USA                                                  *\r
32  ************************************************************************/\r
33 \r
34 /************************************************************************\r
35  *      YOU MAY ALSO WANT TO REMOVE THIS FILE AFTER INSTALLTION!        *\r
36  ************************************************************************/\r
37 \r
38 // Some security stuff...\r
39 if (ereg(basename(__FILE__), $_SERVER['PHP_SELF']))\r
40 {\r
41         $INC = substr(dirname(__FILE__), 0, strpos(dirname(__FILE__), "/inc") + 4)."/security.php";\r
42         require($INC);\r
43 }\r
44 \r
45 //\r
46 function install_WriteData ($FILE, $COMMENT, $PREFIX, $SUFFIX, $DATA, $SNEAK=0)\r
47 {\r
48         $DONE = false;  $SNEAK++;\r
49         if (file_exists($FILE))\r
50         {\r
51                 $SEARCH = "CFG: ".$COMMENT;\r
52                 $TMP = $FILE.".tmp";\r
53                 $fp = fopen($FILE, 'r') or OUTPUT_HTML ("<STRONG>READ:</STRONG> ".$FILE."<BR>");\r
54                 if ($fp)\r
55                 {\r
56                         $fp_tmp = fopen($TMP, 'w') or OUTPUT_HTML ("<STRONG>WRITE:</STRONG> ".$TMP."<BR>");\r
57                         if ($fp_tmp)\r
58                         {\r
59                                 while (! feof($fp))\r
60                                 {\r
61                                         $line = fgets ($fp, 10240);\r
62                                         if (strpos($line, $SEARCH) > -1) $next = 0;\r
63                                         if ($next > -1)\r
64                                         {\r
65                                                 if ($next == $SNEAK)\r
66                                                 {\r
67                                                         $next = -1;\r
68                                                         $line = $PREFIX.$DATA.$SUFFIX."\n";\r
69                                                 }\r
70                                                  else\r
71                                                 {\r
72                                                         $next++;\r
73                                                 }\r
74                                         }\r
75                                         fputs($fp_tmp, $line);\r
76                                 }\r
77                                 fclose($fp_tmp);\r
78                                 // Finished writing tmp file\r
79                                 $DONE = true;\r
80                         }\r
81                         fclose($fp);\r
82                         if ($DONE)\r
83                         {\r
84                                 // Copy back tmp file and delete tmp :-)\r
85                                 @copy($TMP, $FILE);\r
86                                 @unlink($TMP);\r
87                         }\r
88                          else\r
89                         {\r
90                                 OUTPUT_HTML ("<STRONG>TMP:</STRONG> UNDONE!");\r
91                         }\r
92                 }\r
93         }\r
94          else\r
95         {\r
96                 OUTPUT_HTML ("<STRONG>404:</STRONG> ".$FILE."<BR>");\r
97         }\r
98 }\r
99 \r
100 //\r
101 $mysql = "";\r
102 if (isset($_POST['mysql']) && is_array($_POST['mysql'])) $mysql = $_POST['mysql'];\r
103 \r
104 if (URL != "http://your-server.com")\r
105 {\r
106         // Already installed???\r
107         $burl = URL;\r
108 }\r
109  elseif ($burl == "")\r
110 {\r
111         // Auto-detect URL\r
112         $burl = "http://".$SERVER_NAME.$_SERVER['PHP_SELF'];\r
113         $burl = substr($burl, 0, strpos($burl, "install.php"));\r
114 }\r
115 //\r
116 if ((!mxchange_installed) || (!admin_registered))\r
117 {\r
118         // Set URL for FORM actions\r
119         define('__BURL_ACTION', $burl);\r
120 \r
121         // Output page for entered value\r
122         switch ($_GET['page'])\r
123         {\r
124         case "welcome": // Welcome to the installation!\r
125                 LOAD_TEMPLATE("install_welcome");\r
126                 break;\r
127 \r
128         case "1": // Server path, base URL\r
129                 define('__PATH_LEN'     , strlen(PATH));\r
130                 define('__BURL_LEN'     , strlen($burl));\r
131                 define('__TITLE_LEN'    , strlen(MAIN_TITLE));\r
132                 define('__SLOGAN_LEN'   , strlen(SLOGAN));\r
133                 define('__WEBMASTER_LEN', (strlen(WEBMASTER) * 3));\r
134 \r
135                 // Load template\r
136                 LOAD_TEMPLATE("install_page1");\r
137                 break;\r
138 \r
139         case "2": // MySQL data (alone!)\r
140                 if (empty($mysql['dbase']))  $mysql['dbase']  = "your_database";\r
141                 if (empty($mysql['login']))  $mysql['login']  = "your_login";\r
142                 if (empty($mysql['host']))   $mysql['host']   = "localhost";\r
143                 if (empty($mysql['prefix'])) $mysql['prefix'] = "mxchange_";\r
144                 if ((sizeof($FATAL) > 0) || (!empty($FATAL[0])))\r
145                 {\r
146                         OUTPUT_HTML ("<SPAN class=\"install_fatal\">");\r
147                         foreach ($FATAL as $key=>$err)\r
148                         {\r
149                                 OUTPUT_HTML ("  <STRONG>&middot;</STRONG>&nbsp;".FATAL_NO.($key + 1).":&nbsp;".$err."<BR>\n");\r
150                         }\r
151                         OUTPUT_HTML ("</SPAN><BR>");\r
152                 }\r
153                 define('__MYSQL_HOST'  , $mysql['host']);\r
154                 define('__MYSQL_DBASE' , $mysql['dbase']);\r
155                 define('__MYSQL_PREFIX', $mysql['prefix']);\r
156                 define('__MYSQL_LOGIN' , $mysql['login']);\r
157                 define('__SPATH_VALUE' , $_POST['spath']);\r
158                 define('__BURL_VALUE'  , $_POST['burl']);\r
159                 define('__TITLE_VALUE' , $_POST['title']);\r
160                 define('__SLOGAN_VALUE', $_POST['slogan']);\r
161                 define('__EMAIL_VALUE' , $_POST['email']);\r
162 \r
163                 // Load template\r
164                 LOAD_TEMPLATE("install_page2");\r
165                 break;\r
166 \r
167         case "5": // Misc settings\r
168                 define('__SPATH_VALUE' , $_POST['spath']);\r
169                 define('__BURL_VALUE'  , $_POST['burl']);\r
170                 define('__TITLE_VALUE' , $_POST['title']);\r
171                 define('__SLOGAN_VALUE', $_POST['slogan']);\r
172                 define('__EMAIL_VALUE' , $_POST['email']);\r
173                 OUTPUT_HTML ("<FORM action=\"".__BURL_ACTION."/install.php?page=finalize\" method=\"POST\" target=\"_self\">\r
174 <TABLE border=\"0\" cellspacing=\"0\" cellpadding=\"0\" class=\"install_content\">\r
175 <TR>\r
176   <TD colspan=\"2\" align=\"center\">\r
177     <STRONG class=\"install\">".HEADER_TEXT_PAGE5."</STRONG>\r
178   </TD>\r
179 </TR>\r
180 <TR><TD colspan=\"2\" height=\"21\" class=\"seperator\">&nbsp;</TD></TR>\r
181 <TR>\r
182   <TD colspan=\"2\"><SPAN class=\"install_intro\">\r
183     ".TEXT_PAGE_5."\r
184   </SPAN></TD>\r
185 </TR>\r
186 <TR><TD colspan=\"2\" height=\"21\" class=\"seperator\">&nbsp;</TD></TR>\r
187 <TR>\r
188   <TD class=\"install\" align=\"right\">".LANG_OUTPUT_MODE.":&nbsp;&nbsp;</TD>\r
189   <TD>\r
190     <SELECT name=\"omode\" size=\"1\" class=\"install_select\">\r
191       <OPTION value=\"render\"");\r
192                 if (OUTPUT_MODE == "render") OUTPUT_HTML (" selected=\"selected\"");\r
193                 OUTPUT_HTML (">".MODE_RENDER."</OPTION>\r
194       <OPTION value=\"direct\"");\r
195                 if (OUTPUT_MODE == "direct") OUTPUT_HTML (" selected=\"selected\"");\r
196                 OUTPUT_HTML (">".MODE_DIRECT."</OPTION>\r
197     </SELECT>\r
198   </TD>\r
199 </TR>\r
200 <TR><TD colspan=\"2\" height=\"21\" class=\"seperator\">&nbsp;</TD></TR>\r
201 <TR>\r
202   <TD class=\"install\" align=\"right\">".WARN_NO_PASSWORD.":&nbsp;&nbsp;</TD>\r
203   <TD>\r
204     <SELECT name=\"warn_no_pass\" size=\"1\" class=\"install_select\">\r
205       <OPTION value=\"true\"");\r
206                 if (warn_no_pass) OUTPUT_HTML (" selected=\"selected\"");\r
207                 OUTPUT_HTML (">".YES."</OPTION>\r
208       <OPTION value=\"false\"");\r
209                 if (!warn_no_pass) OUTPUT_HTML (" selected=\"selected\"");\r
210                 OUTPUT_HTML (">".NO."</OPTION>\r
211     </SELECT>\r
212   </TD>\r
213 </TR>\r
214 <TR><TD colspan=\"2\" height=\"21\" class=\"seperator\">&nbsp;</TD></TR>\r
215 <TR>\r
216   <TD class=\"install\" align=\"right\">".LANG_WRITE_FOOTER.":&nbsp;&nbsp;</TD>\r
217   <TD>\r
218     <SELECT name=\"wfooter\" size=\"1\" class=\"install_select\">\r
219       <OPTION value=\"true\"");\r
220                 if (WRITE_FOOTER) OUTPUT_HTML (" selected=\"selected\"");\r
221                 OUTPUT_HTML (">".YES."</OPTION>\r
222       <OPTION value=\"false\"");\r
223                 if (!WRITE_FOOTER) OUTPUT_HTML (" selected=\"selected\"");\r
224                 OUTPUT_HTML (">".NO."</OPTION>\r
225     </SELECT>\r
226   </TD>\r
227 </TR>\r
228 <TR><TD colspan=\"2\" height=\"21\" class=\"seperator\">&nbsp;</TD></TR>\r
229 <TR>\r
230   <TD class=\"install\" align=\"right\">".LANG_FRAMESET_ACTIVE.":&nbsp;&nbsp;</TD>\r
231   <TD>\r
232     <SELECT name=\"frameset\" size=\"1\" class=\"install_select\">\r
233       <OPTION value=\"true\"");\r
234                 if (frameset_active) OUTPUT_HTML (" selected=\"selected\"");\r
235                 OUTPUT_HTML (">".YES."</OPTION>\r
236       <OPTION value=\"false\"");\r
237                 if (!frameset_active) OUTPUT_HTML (" selected=\"selected\"");\r
238                 OUTPUT_HTML (">".NO."</OPTION>\r
239     </SELECT>\r
240   </TD>\r
241 </TR>\r
242 <TR><TD colspan=\"2\" height=\"21\" class=\"seperator\">&nbsp;</TD></TR>\r
243 <TR>\r
244   <TD class=\"install\" align=\"right\">".INSTALL_ENABLE_BACKLINK.":&nbsp;&nbsp;</TD>\r
245   <TD>\r
246     <SELECT name=\"blink\" size=\"1\" class=\"install_select\">\r
247       <OPTION value=\"true\"");\r
248                 if (ENABLE_BACKLINK) OUTPUT_HTML (" selected=\"selected\"");\r
249                 OUTPUT_HTML (">".YES."</OPTION>\r
250       <OPTION value=\"false\"");\r
251                 if (!ENABLE_BACKLINK) OUTPUT_HTML (" selected=\"selected\"");\r
252                 OUTPUT_HTML (">".NO."</OPTION>\r
253     </SELECT>\r
254   </TD>\r
255 </TR>\r
256 <TR><TD colspan=\"2\" height=\"21\" class=\"seperator\">&nbsp;</TD></TR>\r
257 <TR>\r
258   <TD colspan=\"2\" align=\"center\">");\r
259                 foreach ($mysql as $key=>$value)\r
260                 {\r
261                         OUTPUT_HTML ("    <INPUT type=\"hidden\" name=\"mysql[".$key."]\" value=\"".$value."\">");\r
262                 }\r
263                 OUTPUT_HTML ("    <INPUT type=\"hidden\" name=\"spath\" value=\"".__SPATH_VALUE."\">\r
264     <INPUT type=\"hidden\" name=\"burl\" value=\"".__BURL_VALUE."\">\r
265     <INPUT type=\"hidden\" name=\"title\" value=\"".__TITLE_VALUE."\">\r
266     <INPUT type=\"hidden\" name=\"slogan\" value=\"".__SLOGAN_VALUE."\">\r
267     <INPUT type=\"hidden\" name=\"email\" value=\"".__EMAIL_VALUE."\">\r
268     <INPUT type=\"submit\" class=\"admin_submit submit\" name=\"finalize\" value=\"".NEXT_PAGE."\" class=\"install_submit\">\r
269   </TD>\r
270 </TR>\r
271 <TR><TD colspan=\"2\" height=\"21\" class=\"seperator\">&nbsp;</TD></TR>\r
272 </TABLE>\r
273 </FORM>");\r
274                 break;\r
275 \r
276         case "finalize": // Write captured data to files\r
277                 if (!empty($_POST['finalize']))\r
278                 {\r
279                         // You have submitted data then we have to reset the fatal messages\r
280                         $FATAL = array();\r
281 \r
282                         // Connect to MySQL server\r
283                         $link = SQL_CONNECT($mysql['host'], $mysql['login'], $mysql['pass1'], __FILE__, __LINE__);\r
284                         if ($link)\r
285                         {\r
286                                 // Seems to work, also right database?\r
287                                 $db = SQL_SELECT_DB($mysql['dbase'], $link, __FILE__, __LINE__);\r
288                                 if ($db)\r
289                                 {\r
290                                         // Automatically run install.sql\r
291                                         if (file_exists($_POST['spath']."install/tables.sql"))\r
292                                         {\r
293                                                 $ERRORS = $_POST['spath']."inc/sql.err";\r
294                                                 $cmd = array(\r
295                                                         // "Dump" tha' s*** up... ;-) > /dev/null\r
296                                                         "mysql ".$mysql['dbase']." --force --host=".$mysql['host']." --user=".$mysql['login']." --password=".$mysql['pass1']." < ".$_POST['spath']."install/tables.sql",\r
297                                                         "mysql ".$mysql['dbase']." --force --host=".$mysql['host']." --user=".$mysql['login']." --password=".$mysql['pass1']." < ".$_POST['spath']."install/menu-".GET_LANGUAGE().".sql"\r
298                                                 );\r
299 \r
300                                                 foreach ($cmd as $c)\r
301                                                 {\r
302                                                         @system($c);\r
303                                                 }\r
304 \r
305                                                 if ((file_exists($ERRORS)) && (filesize($ERRORS) > 0))\r
306                                                 {\r
307                                                         ADD_FATAL(MYSQLDUMP_ERROR);\r
308                                                 }\r
309                                                  elseif (!mxchange_installed)\r
310                                                 {\r
311                                                         // Remove error file if empty\r
312                                                         if (file_exists($ERRORS)) @unlink ($ERRORS);\r
313 \r
314                                                         // Ok, all done. So we can write the config data to the php files\r
315                                                         if ($_POST['spath'] != PATH) install_WriteData($_POST['spath']."inc/config.php", "SERVER-PATH", "define ('PATH', \"", "\");", $_POST['spath'], 0);\r
316                                                         if ($_POST['burl']  != URL)  install_WriteData($_POST['spath']."inc/config.php", "HOST-URL", "define ('URL', \"", "\");", $_POST['burl'], 0);\r
317                                                         install_WriteData($_POST['spath']."inc/config.php", "MAIN_TITLE", "define ('MAIN_TITLE', \"", "\");", $_POST['title'], 0);\r
318                                                         install_WriteData($_POST['spath']."inc/config.php", "SLOGAN", "define ('SLOGAN', \"", "\");", $_POST['slogan'], 0);\r
319                                                         install_WriteData($_POST['spath']."inc/config.php", "WEBMASTER", "define ('WEBMASTER', \"", "\");", $_POST['email'], 0);\r
320                                                         install_WriteData($_POST['spath']."inc/config.php", "NULLPASS-WARNING", "define ('warn_no_pass', ", ");", $_POST['warn_no_pass'], 0);\r
321                                                         install_WriteData($_POST['spath']."inc/config.php", "WRITE-FOOTER", "define ('WRITE_FOOTER', ", ");", $_POST['wfooter'], 0);\r
322                                                         install_WriteData($_POST['spath']."inc/config.php", "BACKLINK", "define ('ENABLED_BACKLINK', ", ");", $_POST['blink'], 0);\r
323                                                         // install_WriteData($_POST['spath']."inc/config.php", "FRAMESET", "define ('frameset_active', ", ");", $_POST['frameset'], 0);\r
324                                                         // install_WriteData($_POST['spath']."inc/config.php", "OUTPUT-MODE", "define ('OUTPUT_MODE', \"", "\");", $_POST['omode'], 0);\r
325                                                         install_WriteData($_POST['spath']."inc/config.php", "MYSQL-HOST", "     'host'     => \"", "\",", $mysql['host'], 0);\r
326                                                         install_WriteData($_POST['spath']."inc/config.php", "MYSQL-DBASE", "    'dbase'    => \"", "\",", $mysql['dbase'], 0);\r
327                                                         install_WriteData($_POST['spath']."inc/config.php", "MYSQL-LOGIN", "    'login'    => \"", "\",", $mysql['login'], 0);\r
328                                                         install_WriteData($_POST['spath']."inc/config.php", "MYSQL-PASSWORD", " 'password' => \"", "\",", $mysql['pass1'], 0);\r
329                                                         install_WriteData($_POST['spath']."inc/config.php", "MYSQL-PREFIX", "define ('_MYSQL_PREFIX', \"", "\");", $mysql['prefix'], 0);\r
330                                                         install_WriteData($_POST['spath']."inc/config.php", "INSTALLED", "define ('mxchange_installed', ", ");", "true", 0);\r
331 \r
332                                                         // Close the link\r
333                                                         SQL_CLOSE($link, __FILE__, __LINE__);\r
334                                                 }\r
335                                                  else\r
336                                                 {\r
337                                                         ADD_FATAL(INSTALL_MAYBE_DONE);\r
338                                                 }\r
339                                         }\r
340                                          else\r
341                                         {\r
342                                                 // Installation area not found!\r
343                                                 ADD_FATAL(INSTALL_MISSING_DUMPS);\r
344                                         }\r
345                                 }\r
346                         }\r
347                         if ((sizeof($FATAL) > 0) || ($FATAL[0] != ""))\r
348                         {\r
349                                 $OUT = "";\r
350                                 foreach ($FATAL as $value)\r
351                                 {\r
352                                         $OUT .= "    <LI>".$value."</LI>\n";\r
353                                 }\r
354                                 define('__FATAL_ERROR_LI', $OUT);\r
355                                 $OUT = "";\r
356                                 foreach ($mysql as $key=>$value)\r
357                                 {\r
358                                         $OUT .= "    <INPUT type=\"hidden\" name=\"mysql[".$key."]\" value=\"".$value."\">\n";\r
359                                 }\r
360                                 define('__MYSQL_DATA' , $OUT);\r
361                                 define('__SPATH_VALUE', $_POST['spath']);\r
362                                 define('__BURL_VALUE' , $_POST['burl']);\r
363                                 define('__TITLE_VALUE', $_POST['title']);\r
364 \r
365                                 OUTPUT_HTML ("<FORM action=\"".__BURL_ACTION."/install.php?page=2\" method=\"POST\">\r
366 <TABLE border=\"0\" cellspacing=\"0\" cellpadding=\"0\" class=\"install_content\">\r
367 <TR>\r
368   <TD align=\"center\">\r
369     <STRONG class=\"install\">".HEADER_MYSQL_ERRORS."</STRONG>\r
370   </TD>\r
371 </TR>\r
372 <TR><TD colspan=\"2\" height=\"21\" class=\"seperator\">&nbsp;</TD></TR>\r
373 <TR>\r
374   <TD><SPAN class=\"install_intro\">\r
375     ".TEXT_MYSQL_ERRORS."\r
376   </SPAN></TD>\r
377 </TR>\r
378 <TR>\r
379   <TD align=\"center\"><STRONG>\r
380     <OL>\r
381 ".__FATAL_ERROR_LI."\r
382     </OL>\r
383 ".__MYSQL_DATA."\r
384     <INPUT type=\"hidden\" name=\"spath\" value=\"".__SPATH_VALUE."\">\r
385     <INPUT type=\"hidden\" name=\"burl\" value=\"".__BURL_VALUE."\">\r
386     <INPUT type=\"hidden\" name=\"title\" value=\"".__TITLE_VALUE."\">\r
387     <INPUT type=\"submit\" class=\"admin_submit\" name=\"ok\" value=\"".RETURN_MYSQL_PAGE."\">\r
388   </STRONG></TD>\r
389 </TR>\r
390 </TABLE>\r
391 </FORM>");\r
392                         }\r
393                          else\r
394                         {\r
395                                 // Installation is done!\r
396                                 $URL = $burl."/install.php?page=finalize";\r
397                                 LOAD_URL($URL);\r
398                         }\r
399                 }\r
400                  elseif (mxchange_installed)\r
401                 {\r
402                         // Redirection after writing data... :-)\r
403                         OUTPUT_HTML ("<SPAN class=\"install_finished\">".INSTALL_FINISHED."</SPAN><BR>\r
404 <BR>\r
405 <SPAN class=\"install_security\">".INSTALL_FIN_SECU."</SPAN><BR>\r
406 <BR>\r
407 <FORM action=\"modules.php\" method=\"GET\">\r
408   <INPUT type=\"hidden\" name=\"module\" value=\"admin\">\r
409   <INPUT type=\"submit\" class=\"admin_submit submit\" value=\"".CONTINUE_ADMIN."\" class=\"install_submit\">\r
410 </FORM>");\r
411                 }\r
412                  else\r
413                 {\r
414                         // Something goes wrong during installation! :-(\r
415                         ADD_FATAL(INSTALL_FINALIZER_FAILED);\r
416                         include ("inc/fatal_errors.php");\r
417                 }\r
418                 break;\r
419 \r
420         default:\r
421                 OUTPUT_HTML ("    <STRONG class=\"install_error\">".WRONG_PAGE."</STRONG>");\r
422                 break;\r
423         }\r
424 }\r
425  else\r
426 {\r
427         ADD_FATAL(ALREADY_INSTALLED);\r
428 }\r
429 //\r
430 ?>\r