index.php 56 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536
  1. <?php
  2. /***************************************************************************
  3. * Dolphin Smart Community Builder
  4. * -----------------
  5. * begin : Mon Mar 23 2006
  6. * copyright : (C) 2006 BoonEx Group
  7. * website : http://www.boonex.com/
  8. * This file is part of Dolphin - Smart Community Builder
  9. *
  10. * Dolphin is free software. This work is licensed under a Creative Commons Attribution 3.0 License.
  11. * http://creativecommons.org/licenses/by/3.0/
  12. *
  13. * Dolphin is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  14. * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  15. * See the Creative Commons Attribution 3.0 License for more details.
  16. * You should have received a copy of the Creative Commons Attribution 3.0 License along with Dolphin,
  17. * see license.txt file; if not, write to marketing@boonex.com
  18. ***************************************************************************/
  19. define('CHECK_DOLPHIN_REQUIREMENTS', 1); //Don`t recommend to skip this step
  20. if (defined('CHECK_DOLPHIN_REQUIREMENTS')) {
  21. //check requirements
  22. $aErrors = array();
  23. $aErrors[] = (ini_get('register_globals') == 0) ? '' : '<font color="red">register_globals is On (warning, you should have this param in Off state, or your site will unsafe)</font>';
  24. $aErrors[] = (ini_get('safe_mode') == 0) ? '' : '<font color="red">safe_mode is On, disable it</font>';
  25. //$aErrors[] = (ini_get('allow_url_fopen') == 0) ? 'Off (warning, better keep this parameter in On to able register Dolphin' : '';
  26. $aErrors[] = (version_compare(PHP_VERSION, '5.2.0', '<')) ? '<font color="red">PHP version too old, please update to PHP 5.2.0 at least</font>' : '';
  27. $aErrors[] = (! extension_loaded( 'mbstring')) ? '<font color="red">mbstring extension not installed. <b>Warning!</b> Dolphin cannot work without <b>mbstring</b> extension.</font>' : '';
  28. // $aErrors[] = (! function_exists('shell_exec')) ? '<font color="red">shell_exec function is unvailable. <b>Warning!</b> Dolphin cannot work without <b>shell_exec</b> function.</font>' : '';
  29. $aErrors[] = (ini_get('short_open_tag') == 0) ? '<font color="red">short_open_tag is Off (must be On!)<b>Warning!</b> Dolphin cannot work without <b>short_open_tag</b>.</font>' : '';
  30. if (version_compare(phpversion(), "5.2", ">") == 1) {
  31. $aErrors[] = (ini_get('allow_url_include') == 0) ? '' : '<font color="red">allow_url_include is On (warning, you should have this param in Off state, or your site will unsafe)</font>';
  32. };
  33. $aErrors = array_diff($aErrors, array('')); //delete empty
  34. if (count($aErrors)) {
  35. $sErrors = implode(" <br /> ", $aErrors);
  36. echo <<<EOF
  37. {$sErrors} <br />
  38. Please go to the <br />
  39. <a href="http://www.boonex.com/trac/dolphin/wiki/GenDolTShooter">Dolphin Troubleshooter</a> <br />
  40. and solve the problem.
  41. EOF;
  42. exit;
  43. }
  44. }
  45. if (version_compare(phpversion(), "5.3.0", ">=") == 1)
  46. error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
  47. else
  48. error_reporting(E_ALL & ~E_NOTICE);
  49. set_magic_quotes_runtime(0);
  50. ini_set('magic_quotes_sybase', 0);
  51. /*------------------------------*/
  52. /*----------Vars----------------*/
  53. $aConf = array();
  54. $aConf['release'] = '24.03.11';
  55. $aConf['iVersion'] = '8.0';
  56. $aConf['iPatch'] = '0';
  57. $aConf['dolFile'] = '../inc/header.inc.php';
  58. $aConf['confDir'] = '../inc/';
  59. $aConf['headerTempl'] = <<<EOS
  60. <?php
  61. /**
  62. * @package Dolphin Core
  63. * @copyright Copyright (c) BoonEx Pty Limited - http://www.boonex.com/
  64. * @license CC-BY - http://creativecommons.org/licenses/by/3.0/
  65. */
  66. define ('BX_PROFILER', true);
  67. if (BX_PROFILER && !isset(\$GLOBALS['bx_profiler_start']))
  68. \$GLOBALS['bx_profiler_start'] = microtime ();
  69. //--- Version ---//
  70. define('BX_DOL_VERSION', '{$aConf['iVersion']}');
  71. define('BX_DOL_BUILD', '{$aConf['iPatch']}');
  72. //--- Main URLs ---//
  73. define('BX_DOL_URL_ROOT', '%site_url%');
  74. define('BX_DOL_URL_PLUGINS', BX_DOL_URL_ROOT . 'plugins/');
  75. define('BX_DOL_URL_MODULES', BX_DOL_URL_ROOT . 'modules/');
  76. define('BX_DOL_URL_CACHE_PUBLIC', BX_DOL_URL_ROOT . 'cache_public/');
  77. define('BX_DOL_URL_BASE', BX_DOL_URL_ROOT . 'template/');
  78. //--- Main Pathes ---//
  79. define('BX_DIRECTORY_PATH_ROOT', '%dir_root%');
  80. define('BX_DIRECTORY_PATH_INC', BX_DIRECTORY_PATH_ROOT . 'inc/');
  81. define('BX_DIRECTORY_PATH_BASE', BX_DIRECTORY_PATH_ROOT . 'template/');
  82. define('BX_DIRECTORY_PATH_CACHE', BX_DIRECTORY_PATH_ROOT . 'cache/');
  83. define('BX_DIRECTORY_PATH_CACHE_PUBLIC', BX_DIRECTORY_PATH_ROOT . 'cache_public/');
  84. define('BX_DIRECTORY_PATH_CLASSES', BX_DIRECTORY_PATH_ROOT . 'inc/classes/');
  85. define('BX_DIRECTORY_PATH_PLUGINS', BX_DIRECTORY_PATH_ROOT . 'plugins/');
  86. define('BX_DIRECTORY_PATH_MODULES', BX_DIRECTORY_PATH_ROOT . 'modules/');
  87. define('BX_DIRECTORY_STORAGE', BX_DIRECTORY_PATH_ROOT . 'storage/');
  88. //--- DB Connection ---//
  89. define('BX_DATABASE_HOST', '%db_host%');
  90. define('BX_DATABASE_SOCK', '%db_sock%');
  91. define('BX_DATABASE_PORT', '%db_port%');
  92. define('BX_DATABASE_USER', '%db_user%');
  93. define('BX_DATABASE_PASS', '%db_password%');
  94. define('BX_DATABASE_NAME', '%db_name%');
  95. //--- System settings ---//
  96. define('BX_SYSTEM_MOGRIFY', '%dir_mogrify%');
  97. define('BX_SYSTEM_CONVERT', '%dir_convert%');
  98. define('BX_SYSTEM_COMPOSITE', '%dir_composite%');
  99. define('BX_SYSTEM_PHPBIN', '%dir_php%');
  100. define('BX_DOL_DIR_RIGHTS', 0777);
  101. define('BX_DOL_FILE_RIGHTS', 0666);
  102. define('BX_DOL_STORAGE_OBJ_IMAGES', 'sys_images');
  103. define('BX_DOL_INT_MAX', 2147483647);
  104. define('BX_DOL_TRANSCODER_OBJ_ICON_APPLE', 'sys_icon_apple');
  105. define('BX_DOL_TRANSCODER_OBJ_ICON_FACEBOOK', 'sys_icon_facebook');
  106. define('BX_DOL_TRANSCODER_OBJ_ICON_FAVICON', 'sys_icon_favicon');
  107. define('BX_DOL_TRANSCODER_OBJ_CMTS_IMAGE_PREVIEW', 'sys_cmts_images_preview');
  108. //--- Module types ---//
  109. define('BX_DOL_MODULE_TYPE_MODULE', 'module');
  110. define('BX_DOL_MODULE_TYPE_LANGUAGE', 'language');
  111. define('BX_DOL_MODULE_TYPE_TEMPLATE', 'template');
  112. //--- Studio settings ---//
  113. define('BX_DOL_STUDIO_FOLDER', 'studio');
  114. define('BX_DOL_URL_STUDIO', BX_DOL_URL_ROOT . BX_DOL_STUDIO_FOLDER . '/');
  115. define('BX_DOL_URL_STUDIO_BASE', BX_DOL_URL_STUDIO . 'template/');
  116. define('BX_DOL_DIR_STUDIO', BX_DIRECTORY_PATH_ROOT . BX_DOL_STUDIO_FOLDER . '/');
  117. define('BX_DOL_DIR_STUDIO_INC', BX_DOL_DIR_STUDIO . 'inc/');
  118. define('BX_DOL_DIR_STUDIO_CLASSES', BX_DOL_DIR_STUDIO . 'classes/');
  119. define('BX_DOL_DIR_STUDIO_BASE', BX_DOL_DIR_STUDIO . 'template/');
  120. //--- BoonEx Unity Settings ---//
  121. define('BX_DOL_UNITY_URL_ROOT', 'http://www.boonex.com/');
  122. define('BX_DOL_UNITY_URL_MARKET', BX_DOL_UNITY_URL_ROOT . 'market/');
  123. define('BX_DOL_UNITY_URL_PRODUCT', BX_DOL_UNITY_URL_ROOT . 'm/');
  124. //--- BoonEx OAuth Settings ---//
  125. define('BX_DOL_OAUTH_URL_REQUEST_TOKEN', BX_DOL_UNITY_URL_ROOT . 'scripts_public/oauth_request_token.php5');
  126. define('BX_DOL_OAUTH_URL_AUTHORIZE', BX_DOL_UNITY_URL_ROOT . 'scripts_public/oauth_authorize.php5');
  127. define('BX_DOL_OAUTH_URL_ACCESS_TOKEN', BX_DOL_UNITY_URL_ROOT . 'scripts_public/oauth_access_token.php5');
  128. define('BX_DOL_OAUTH_URL_FETCH_DATA', BX_DOL_UNITY_URL_ROOT . 'scripts_public/oauth_fetch_data.php5');
  129. //--- User Roles ---//
  130. define('BX_DOL_ROLE_GUEST', 0);
  131. define('BX_DOL_ROLE_MEMBER', 1);
  132. define('BX_DOL_ROLE_ADMIN', 2);
  133. // profile statuses
  134. define('BX_PROFILE_STATUS_SUSPENDED', 'suspended'); ///< profile status - suspended, profile is syspended by admin/moderator and usually can't access the site
  135. define('BX_PROFILE_STATUS_ACTIVE', 'active'); ///< profile status - active, profile is active on the site
  136. define('BX_PROFILE_STATUS_PENDING', 'pending'); ///< profile status - pending, default method of approving is manual approving
  137. define('BX_DOL', 1);
  138. define('BX_DOL_SECRET', 'sdn378vGR35'); // TODO: autogenerate during installation
  139. define('CHECK_DOLPHIN_REQUIREMENTS', 1);
  140. if (defined('CHECK_DOLPHIN_REQUIREMENTS')) {
  141. //check requirements
  142. \$aErrors = array();
  143. \$aErrors[] = (ini_get('register_globals') == 0) ? '' : '<font color="red">register_globals is On (warning, you should have this param in Off state, or your site will unsafe)</font>';
  144. \$aErrors[] = (ini_get('safe_mode') == 0) ? '' : '<font color="red">safe_mode is On, disable it</font>';
  145. //\$aErrors[] = (ini_get('allow_url_fopen') == 0) ? 'Off (warning, better keep this parameter in On to able register Dolphin' : '';
  146. \$aErrors[] = (version_compare(PHP_VERSION, '5.2.0', '<')) ? '<font color="red">PHP version too old, please update to PHP 5.2.0 at least</font>' : '';
  147. \$aErrors[] = (! extension_loaded( 'mbstring')) ? '<font color="red">mbstring extension not installed. <b>Warning!</b> Dolphin cannot work without <b>mbstring</b> extension.</font>' : '';
  148. if (version_compare(phpversion(), "5.2", ">") == 1) {
  149. \$aErrors[] = (ini_get('allow_url_include') == 0) ? '' : '<font color="red">allow_url_include is On (warning, you should have this param in Off state, or your site will unsafe)</font>';
  150. };
  151. \$aErrors = array_diff(\$aErrors, array('')); //delete empty
  152. if (count(\$aErrors)) {
  153. \$sErrors = implode(" <br /> ", \$aErrors);
  154. echo <<<EOF
  155. {\$sErrors} <br />
  156. Please go to the <br />
  157. <a href="http://www.boonex.com/trac/dolphin/wiki/GenDolTShooter">Dolphin Troubleshooter</a> <br />
  158. and solve the problem.
  159. EOF;
  160. exit;
  161. }
  162. }
  163. //check correct hostname
  164. \$aUrl = parse_url( BX_DOL_URL_ROOT );
  165. if( isset(\$_SERVER['HTTP_HOST']) and 0 != strcasecmp(\$_SERVER['HTTP_HOST'], \$aUrl['host']) and 0 != strcasecmp(\$_SERVER['HTTP_HOST'], \$aUrl['host'] . ':80') ) {
  166. header( "Location:http://{\$aUrl['host']}{\$_SERVER['REQUEST_URI']}" );
  167. exit;
  168. }
  169. // check if install folder exists
  170. /**
  171. * Uncomment for live version
  172. *
  173. if ( !defined ('BX_SKIP_INSTALL_CHECK') && file_exists( BX_DIRECTORY_PATH_ROOT . 'install' ) ) {
  174. \$ret = <<<EOJ
  175. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  176. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
  177. <head>
  178. <title>Dolphin Smart Community Builder Installed</title>
  179. <link href="install/general.css" rel="stylesheet" type="text/css" />
  180. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  181. </head>
  182. <body>
  183. <div id="main">
  184. <div id="header">
  185. <img src="install/images/boonex-logo.png" alt="" /></div>
  186. <div id="content">
  187. <div class="installed_pic">
  188. <img alt="Dolphin Installed" src="install/images/dolphin_installed.jpg" />
  189. </div>
  190. <div class="installed_text">
  191. Please, remove INSTALL directory from your server and reload this page to activate your community site.
  192. </div>
  193. <div class="installed_text">
  194. NOTE: Once you remove this page you can safely <a href="administration/modules.php">install modules via Admin Panel</a>.
  195. </div>
  196. </body>
  197. </html>
  198. EOJ;
  199. echo \$ret;
  200. exit();
  201. }
  202. */
  203. // set error reporting level
  204. error_reporting(E_ALL);
  205. ini_set('magic_quotes_sybase', 0);
  206. // set default encoding for multibyte functions
  207. mb_internal_encoding('UTF-8');
  208. mb_regex_encoding('UTF-8');
  209. require_once(BX_DIRECTORY_PATH_CLASSES . "BxDol.php");
  210. require_once(BX_DIRECTORY_PATH_INC . "security.inc.php");
  211. require_once(BX_DIRECTORY_PATH_INC . "utils.inc.php");
  212. require_once(BX_DIRECTORY_PATH_INC . "db.inc.php");
  213. require_once(BX_DIRECTORY_PATH_INC . "profiles.inc.php");
  214. bx_import('BxDolConfig');
  215. bx_import('BxDolService');
  216. bx_import('BxDolAlerts');
  217. \$oZ = new BxDolAlerts('system', 'begin', 0);
  218. \$oZ->alert();
  219. EOS;
  220. $aConf['periodicTempl'] = <<<EOS
  221. MAILTO=%site_email%<br />
  222. * * * * * cd %dir_root%periodic; %dir_php% -q cron.php<br />
  223. EOS;
  224. $confFirst = array();
  225. $confFirst['site_url'] = array(
  226. name => "Site URL",
  227. ex => "http://www.mydomain.com/path/",
  228. desc => "Your site URL here (backslash at the end required)",
  229. def => "http://",
  230. def_exp => '
  231. $str = "http://".$_SERVER[\'HTTP_HOST\'].$_SERVER[\'PHP_SELF\'];
  232. return preg_replace("/install\/(index\.php$)/","",$str);',
  233. check => 'return strlen($arg0) >= 10 ? true : false;'
  234. );
  235. $confFirst['dir_root'] = array(
  236. name => "Directory root",
  237. ex => "/path/to/your/script/files/",
  238. desc => "Path to directory where your php script files stored.",
  239. def_exp => '
  240. $str = rtrim($_SERVER[\'DOCUMENT_ROOT\'], \'/\').$_SERVER[\'PHP_SELF\'];
  241. return preg_replace("/install\/(index\.php$)/","",$str);',
  242. check => 'return strlen($arg0) >= 1 ? true : false;'
  243. );
  244. $confFirst['dir_php'] = array(
  245. name => "Path to php binary",
  246. ex => "/usr/local/bin/php",
  247. desc => "You should specify full path to your PHP interpreter here.",
  248. def => "/usr/local/bin/php",
  249. def_exp => "
  250. if ( file_exists(\"/usr/local/bin/php\") ) return \"/usr/local/bin/php\";
  251. \$fp = popen ( \"whereis php\", \"r\");
  252. if ( \$fp )
  253. {
  254. \$s = fgets(\$fp);
  255. \$s = sscanf(\$s, \"php: %s\");
  256. if ( file_exists(\"\$s[0]\") ) return \"\$s[0]\";
  257. }
  258. return '';",
  259. check => 'return strlen($arg0) >= 7 ? true : false;'
  260. );
  261. $confFirst['dir_mogrify'] = array(
  262. name => "Path to mogrify",
  263. ex => "/usr/local/bin/mogrify",
  264. desc => "If mogrify binary doesn't exist please install <a href='http://www.imagemagick.org/'>ImageMagick</a>",
  265. def => "/usr/local/bin/mogrify",
  266. def_exp => "
  267. if ( file_exists(\"/usr/X11R6/bin/mogrify\") ) return \"/usr/X11R6/bin/mogrify\";
  268. if ( file_exists(\"/usr/local/bin/mogrify\") ) return \"/usr/local/bin/mogrify\";
  269. if ( file_exists(\"/usr/bin/mogrify\") ) return \"/usr/bin/mogrify\";
  270. if ( file_exists(\"/usr/local/X11R6/bin/mogrify\") ) return \"/usr/local/X11R6/bin/mogrify\";
  271. if ( file_exists(\"/usr/bin/X11/mogrify\") ) return \"/usr/bin/X11/mogrify\";
  272. return '';",
  273. check => 'return strlen($arg0) >= 7 ? true : false;'
  274. );
  275. $confFirst['dir_convert'] = array(
  276. name => "Path to convert",
  277. ex => "/usr/local/bin/convert",
  278. desc => "If convert binary doesn't exist please install <a href='http://www.imagemagick.org/'>ImageMagick</a>",
  279. def => "/usr/local/bin/convert",
  280. def_exp => "
  281. if ( file_exists(\"/usr/X11R6/bin/convert\") ) return \"/usr/X11R6/bin/convert\";
  282. if ( file_exists(\"/usr/local/bin/convert\") ) return \"/usr/local/bin/convert\";
  283. if ( file_exists(\"/usr/bin/convert\") ) return \"/usr/bin/convert\";
  284. if ( file_exists(\"/usr/local/X11R6/bin/convert\") ) return \"/usr/local/X11R6/bin/convert\";
  285. if ( file_exists(\"/usr/bin/X11/convert\") ) return \"/usr/bin/X11/convert\";
  286. return '';",
  287. check => 'return strlen($arg0) >= 7 ? true : false;'
  288. );
  289. $confFirst['dir_composite'] = array(
  290. name => "Path to composite",
  291. ex => "/usr/local/bin/composite",
  292. desc => "If composite binary doesn't exist please install <a href='http://www.imagemagick.org/'>ImageMagick</a>",
  293. def => "/usr/local/bin/composite",
  294. def_exp => "
  295. if ( file_exists(\"/usr/X11R6/bin/composite\") ) return \"/usr/X11R6/bin/composite\";
  296. if ( file_exists(\"/usr/local/bin/composite\") ) return \"/usr/local/bin/composite\";
  297. if ( file_exists(\"/usr/bin/composite\") ) return \"/usr/bin/composite\";
  298. if ( file_exists(\"/usr/local/X11R6/bin/composite\") ) return \"/usr/local/X11R6/bin/composite\";
  299. if ( file_exists(\"/usr/bin/X11/composite\") ) return \"/usr/bin/X11/composite\";
  300. return '';",
  301. check => 'return strlen($arg0) >= 7 ? true : false;'
  302. );
  303. $aDbConf = array();
  304. $aDbConf['sql_file'] = array(
  305. name => "SQL file",
  306. ex => "/home/dolphin/public_html/install/sql/vXX.sql",
  307. desc => "SQL file location",
  308. def => "./sql/vXX.sql",
  309. def_exp => '
  310. if ( !( $dir = opendir( "sql/" ) ) )
  311. return "";
  312. while (false !== ($file = readdir($dir)))
  313. {
  314. if ( substr($file,-3) != \'sql\' ) continue;
  315. closedir( $dir );
  316. return "./sql/$file";
  317. }
  318. closedir( $dir );
  319. return "";',
  320. check => 'return strlen($arg0) >= 4 ? true : false;'
  321. );
  322. $aDbConf['db_host'] = array(
  323. name => "Database host name",
  324. ex => "localhost",
  325. desc => "Your MySQL database host name here.",
  326. def => "localhost",
  327. check => 'return strlen($arg0) >= 1 ? true : false;'
  328. );
  329. $aDbConf['db_port'] = array(
  330. name => "Database host port number",
  331. ex => "5506",
  332. desc => "Leave blank or specify MySQL Database host port number.",
  333. def => "",
  334. check => ''
  335. );
  336. $aDbConf['db_sock'] = array(
  337. name => "Database socket path",
  338. ex => "/tmp/mysql50.sock",
  339. desc => "Leave blank or specify MySQL Database socket path.",
  340. def => "",
  341. check => ''
  342. );
  343. $aDbConf['db_name'] = array(
  344. name => "Database name",
  345. ex => "YourDatabaseName",
  346. desc => "Your MySQL database name here.",
  347. check => 'return strlen($arg0) >= 1 ? true : false;'
  348. );
  349. $aDbConf['db_user'] = array(
  350. name => "Database user",
  351. ex => "YourName",
  352. desc => "Your MySQL database read/write user name here.",
  353. check => 'return strlen($arg0) >= 1 ? true : false;'
  354. );
  355. $aDbConf['db_password'] = array(
  356. name => "Database password",
  357. ex => "YourPassword",
  358. desc => "Your MySQL database password here.",
  359. check => 'return strlen($arg0) >= 0 ? true : false;'
  360. );
  361. $aGeneral = array();
  362. $aGeneral['site_title'] = array(
  363. name => "Site Title",
  364. ex => "The Best Community",
  365. desc => "The name of your site",
  366. check => 'return strlen($arg0) >= 1 ? true : false;'
  367. );
  368. $aGeneral['site_desc'] = array(
  369. name => "Site Description",
  370. ex => "The place to find new friends, communicate and have fun.",
  371. desc => "Meta description of your site",
  372. check => 'return strlen($arg0) >= 1 ? true : false;'
  373. );
  374. $aGeneral['site_email'] = array(
  375. name => "Site e-mail",
  376. ex => "your@email.here",
  377. desc => "Your site e-mail.",
  378. check => 'return strlen($arg0) > 0 AND strstr($arg0,"@") ? true : false;'
  379. );
  380. $aGeneral['notify_email'] = array(
  381. name => "Notify e-mail",
  382. ex => "your@email.here",
  383. desc => "Envelope \"From:\" address for notification messages",
  384. check => 'return strlen($arg0) > 0 AND strstr($arg0,"@") ? true : false;'
  385. );
  386. $aGeneral['bug_report_email'] = array(
  387. name => "Bug report email",
  388. ex => "your@email.here",
  389. desc => "Your email for receiving bug reports.",
  390. check => 'return strlen($arg0) > 0 AND strstr($arg0,"@") ? true : false;'
  391. );
  392. $aGeneral['admin_username'] = array(
  393. name => "Admin Username",
  394. ex => "admin",
  395. desc => "Specify the admin name here",
  396. check => 'return strlen($arg0) >= 1 ? true : false;'
  397. );
  398. $aGeneral['admin_password'] = array(
  399. name => "Admin Password",
  400. ex => "dolphin",
  401. desc => "Specify the admin password here",
  402. check => 'return strlen($arg0) >= 1 ? true : false;'
  403. );
  404. $aNonDeletableModules = array(
  405. 'boonex/shared_photo/',
  406. );
  407. $aTemporalityWritableFolders = array(
  408. 'inc',
  409. );
  410. /*----------Vars----------------*/
  411. /*------------------------------*/
  412. $sAction = $_REQUEST['action'];
  413. $sError = '';
  414. define('BX_SKIP_INSTALL_CHECK', true);
  415. // --------------------------------------------
  416. if ($sAction=='step6' || $sAction=='step7' || $sAction=='compile_languages') {
  417. require_once('../inc/header.inc.php' );
  418. require_once( BX_DIRECTORY_PATH_INC . 'db.inc.php' );
  419. require_once( BX_DIRECTORY_PATH_INC . 'design.inc.php' );
  420. } else {
  421. define ('BX_DOL', 1);
  422. require_once('../inc/classes/BxDol.php');
  423. }
  424. // --------------------------------------------
  425. require_once('../inc/classes/BxDolIO.php');
  426. $sInstallPageContent = InstallPageContent( $sError );
  427. mb_internal_encoding('UTF-8');
  428. echo PageHeader( $sAction, $sError );
  429. echo $sInstallPageContent;
  430. echo PageFooter( $sAction );
  431. function InstallPageContent(&$sError) {
  432. global $aConf, $confFirst, $aDbConf, $aGeneral;
  433. $sRet = '';
  434. switch ($_REQUEST['action']) {
  435. case 'compile_languages':
  436. performInstallLanguages();
  437. $sRet .= 'Default Dolphin language was recompiled';
  438. break;
  439. /*case 'step8':
  440. $sRet .= genMainDolphinPage();
  441. break;
  442. case 'step7':
  443. $sInstallLog = '';
  444. if ($_REQUEST['sub_action']=='install_modules') {
  445. if (is_array($_POST['pathes']) && count($_POST['pathes'])>0) {
  446. $oInstallerUi = new BxDolInstallerUi();
  447. $sInstallLog = $oInstallerUi->actionInstall($_POST['pathes']);
  448. }
  449. }
  450. $sRet .= genInstallModulesPage($sInstallLog);
  451. break;*/
  452. case 'step7':
  453. $sRet .= genMainDolphinPage();
  454. break;
  455. case 'step6':
  456. $sErrorMessage = checkPostInstallPermissions($sError);
  457. $sRet .= (strlen($sErrorMessage)) ? genPostInstallPermissionTable($sErrorMessage) : genMainDolphinPage();
  458. break;
  459. case 'step5':
  460. $sRet .= genPostInstallPermissionTable();
  461. break;
  462. case 'step4':
  463. $sErrorMessage = checkConfigArray($aGeneral, $sError);
  464. $sRet .= (strlen($sErrorMessage)) ? genSiteGeneralConfig($sErrorMessage) : genInstallationProcessPage();
  465. break;
  466. case 'step3':
  467. $sErrorMessage = checkConfigArray($aDbConf, $sError);
  468. $sErrorMessage .= CheckSQLParams();
  469. $sRet .= (strlen($sErrorMessage)) ? genDatabaseConfig($sErrorMessage) : genSiteGeneralConfig();
  470. break;
  471. case 'step2':
  472. $sErrorMessage = checkConfigArray($confFirst, $sError);
  473. $sRet .= (strlen($sErrorMessage)) ? genPathCheckingConfig($sErrorMessage) : genDatabaseConfig();
  474. break;
  475. case 'step1':
  476. $sErrorMessage = checkPreInstallPermission($sError);
  477. $sRet .= (strlen($sErrorMessage)) ? genPreInstallPermissionTable($sErrorMessage) : genPathCheckingConfig();
  478. break;
  479. case 'preInstall':
  480. $sRet .= genPreInstallPermissionTable();
  481. break;
  482. default:
  483. $sRet .= StartInstall();
  484. break;
  485. }
  486. return $sRet;
  487. }
  488. function performInstallLanguages() {
  489. db_res("TRUNCATE TABLE `sys_localization_languages`");
  490. db_res("TRUNCATE TABLE `sys_localization_keys`");
  491. db_res("TRUNCATE TABLE `sys_localization_strings`");
  492. if (!($sLangsDir = opendir(BX_DIRECTORY_PATH_ROOT . 'install/langs/')))
  493. return;
  494. while (false !== ($sFilename = readdir($sLangsDir))) {
  495. if (substr($sFilename,-3) == 'php') {
  496. //$sLangName = substr($sFilename,-6, 2);
  497. unset($LANG);
  498. unset($LANG_INFO);
  499. require_once(BX_DIRECTORY_PATH_ROOT . 'install/langs/' . $sFilename);
  500. walkThroughLanguage($LANG, $LANG_INFO);
  501. }
  502. }
  503. closedir ($sLangsDir);
  504. require_once('../inc/languages.inc.php');
  505. compileLanguage();
  506. }
  507. function walkThroughLanguage($aLanguage, $aLangInfo) {
  508. $sLangName = $aLangInfo['Name'];
  509. $sLangFlag = $aLangInfo['Flag'];
  510. $sLangTitle = $aLangInfo['Title'];
  511. $sInsertLanguageSQL = "INSERT INTO `sys_localization_languages` VALUES (NULL, '{$sLangName}', '{$sLangFlag}', '{$sLangTitle}')";
  512. db_res($sInsertLanguageSQL);
  513. $iLangKey = db_last_id();
  514. foreach ($aLanguage as $sKey => $sValue) {
  515. $sDqKey = str_replace("'", "''", $sKey);
  516. $sDqValue = str_replace("'", "''", $sValue);
  517. $iExistedKey = (int)db_value("SELECT `ID` FROM `sys_localization_keys` WHERE `Key`='{$sDqKey}'");
  518. if ($iExistedKey>0) { //Key existed, no need insert key
  519. } else {
  520. $sInsertKeySQL = "INSERT INTO `sys_localization_keys` VALUES(NULL, 1, '{$sDqKey}')";
  521. db_res($sInsertKeySQL);
  522. $iExistedKey = db_last_id();
  523. }
  524. $sInsertValueSQL = "INSERT INTO `sys_localization_strings` VALUES({$iExistedKey}, {$iLangKey}, '{$sDqValue}');";
  525. db_res($sInsertValueSQL);
  526. }
  527. }
  528. function genInstallModulesPage($sErrorMessage = '') {
  529. global $aNonDeletableModules;
  530. $sCurPage = $_SERVER['PHP_SELF'];
  531. if ($_REQUEST['sub_action']!='install_modules') {
  532. performInstallLanguages();
  533. }
  534. $sErrors = printInstallError($sErrorMessage);
  535. $oInstallerUi = new BxDolInstallerUi();
  536. $aAdditionalInputs['hidden_sub_action'] = array(
  537. 'type' => 'hidden',
  538. 'name' => 'sub_action',
  539. 'value' => 'install_modules'
  540. );
  541. $aAdditionalInputs['hidden_action'] = array(
  542. 'type' => 'hidden',
  543. 'name' => 'action',
  544. 'value' => 'step7'
  545. );
  546. $sNotInstalled = $oInstallerUi->getNotInstalled($aAdditionalInputs /*, $aNonDeletableModules*/);
  547. //module_not_install_form
  548. $sSkipStep = '';
  549. if ($_REQUEST['sub_action']=='install_modules') {
  550. $sSkipStep = <<<EOF
  551. <div class="button_area_2">
  552. <form action="{$sCurPage}" method="post">
  553. <input id="button" type="image" src="images/skip.gif" />
  554. <input type="hidden" name="action" value="step8" />
  555. </form>
  556. </div>
  557. EOF;
  558. }
  559. return <<<EOF
  560. <div class="position">Modules.</div>
  561. {$sErrors}
  562. <div class="LeftRight">
  563. <div class="clearBoth"></div>
  564. <div class="left">&nbsp;</div>
  565. <div class="right">
  566. <script type="text/javascript">
  567. <!--
  568. function PerformInstall() {
  569. var oForm = document.getElementById('module_not_install_form');
  570. oForm.submit();
  571. }
  572. -->
  573. </script>
  574. {$sNotInstalled}
  575. <div class="formKeeper1">
  576. <div class="button_area_1">
  577. <form action="{$sCurPage}" method="post">
  578. <input id="button" type="image" src="images/next.gif" onclick="PerformInstall(); return false;" />
  579. <input type="hidden" name="action" value="step8" />
  580. </form>
  581. </div>
  582. {$sSkipStep}
  583. </div>
  584. </div>
  585. <div class="clearBoth"></div>
  586. </div>
  587. EOF;
  588. }
  589. function genInstallationProcessPage($sErrorMessage = '') {
  590. global $aConf, $confFirst, $aDbConf, $aGeneral;
  591. $sAdminName = get_magic_quotes_gpc() ? stripslashes($_REQUEST['admin_username']) : $_REQUEST['admin_username'];
  592. $sAdminPassword = get_magic_quotes_gpc() ? stripslashes($_REQUEST['admin_password']) : $_REQUEST['admin_password'];
  593. $resRunSQL = RunSQL( $sAdminName, $sAdminPassword );
  594. $sForm = '';
  595. if ('done' == $resRunSQL) {
  596. $sForm = '
  597. <div class="formKeeper">
  598. <form action="' . $_SERVER['PHP_SELF'] . '" method="post">
  599. <input type="image" src="images/next.gif" />
  600. <input type="hidden" name="action" value="step5" />
  601. </form>
  602. </div>
  603. <div class="clearBoth"></div>';
  604. } else {
  605. $sForm = $resRunSQL . '
  606. <div class="formKeeper">
  607. <form action="' . $_SERVER['PHP_SELF'] . '" method="post">
  608. <input type="image" src="images/back.gif" />';
  609. foreach ($_POST as $sKey => $sValue) {
  610. if ($sKey != "action")
  611. $sForm .= '<input type="hidden" name="' . $sKey . '" value="' . $sValue . '" />';
  612. }
  613. $sForm .= '<input type="hidden" name="action" value="step2" />
  614. </form>
  615. </div>
  616. <div class="clearBoth"></div>';
  617. return $sForm;
  618. }
  619. foreach ($confFirst as $key => $val) {
  620. $aConf['headerTempl'] = str_replace ("%$key%", $_POST[$key], $aConf['headerTempl']);
  621. }
  622. foreach ($aDbConf as $key => $val) {
  623. $aConf['headerTempl'] = str_replace ("%$key%", $_POST[$key], $aConf['headerTempl']);
  624. }
  625. foreach ($aGeneral as $key => $val) {
  626. $aConf['headerTempl'] = str_replace ("%$key%", $_POST[$key], $aConf['headerTempl']);
  627. }
  628. $aConf['periodicTempl'] = str_replace("%site_email%", $_POST['site_email'], $aConf['periodicTempl']);
  629. $aConf['periodicTempl'] = str_replace("%dir_root%", $_POST['dir_root'], $aConf['periodicTempl']);
  630. $aConf['periodicTempl'] = str_replace("%dir_php%", $_POST['dir_php'], $aConf['periodicTempl']);
  631. $sInnerCode = '';
  632. $fp = fopen($aConf['dolFile'], 'w');
  633. if ($fp) {
  634. fputs($fp, $aConf['headerTempl']);
  635. fclose($fp);
  636. chmod($aConf['dolFile'], 0666);
  637. //$sInnerCode .='Config file was successfully written to <strong>' . $aConf['dolFile'] . '</strong><br />';
  638. } else {
  639. $text = 'Warning!!! can not get write access to config file ' . $aConf['dolFile'] . '. Here is config file</font><br>';
  640. $sInnerCode .= printInstallError($text);
  641. $trans = get_html_translation_table(HTML_ENTITIES);
  642. $templ = strtr($aConf['headerTempl'], $trans);
  643. $sInnerCode .= '<textarea cols="20" rows="10" class="headerTextarea">' . $aConf['headerTempl'] . '</textarea>';
  644. }
  645. $sInnerCode .= <<<EOF
  646. <div class="left">
  647. Please, setup Cron Jobs as specified below. Helpful info about Cron Jobs is <a href="http://www.boonex.com/trac/dolphin/wiki/DetailedInstall#InstallScript-Step5-CronJobs">available here</a>.</div>
  648. <div class="debug">
  649. {$aConf['periodicTempl']}
  650. </div>
  651. EOF;
  652. return <<<EOF
  653. <div class="position">Cron Jobs</div>
  654. <div class="LeftRirght">
  655. {$sInnerCode}{$sForm}
  656. </div>
  657. EOF;
  658. }
  659. function isAdmin() { return false; }
  660. // check of step 5
  661. function checkPostInstallPermissions(&$sError) {
  662. global $aTemporalityWritableFolders;
  663. $sFoldersErr = $sFilesErr = $sErrorMessage = '';
  664. require_once('../studio/classes/BxDolStudioTools.php');
  665. $oAdmTools = new BxDolStudioTools();
  666. $oBxDolIO = new BxDolIO();
  667. $aInstallDirsMerged = array_merge($aTemporalityWritableFolders, $oAdmTools->aPostInstallPermDirs);
  668. foreach ($aInstallDirsMerged as $sFolder) {
  669. if ($oBxDolIO->isWritable($sFolder)) {
  670. $sFoldersErr .= '&nbsp;&nbsp;&nbsp;' . $sFolder . ';<br />';
  671. }
  672. }
  673. if (strlen( $sFoldersErr)) {
  674. $sError = 'error';
  675. $sErrorMessage .= '<strong>Next directories have inappropriate permissions</strong>:<br />' . $sFoldersErr;
  676. }
  677. foreach ($oAdmTools->aPostInstallPermFiles as $sFile) {
  678. if ($oBxDolIO->isWritable($sFile)) {
  679. $sFilesErr .= '&nbsp;&nbsp;&nbsp;' . $sFile . ';<br /> ';
  680. }
  681. }
  682. if (strlen($sFilesErr)) {
  683. $sError = 'error';
  684. $sErrorMessage .= '<strong>Next files have inappropriate permissions</strong>:<br />' . $sFilesErr;
  685. }
  686. return $sErrorMessage;
  687. }
  688. // step 5
  689. function genPostInstallPermissionTable($sErrorMessage = '') {
  690. global $aTemporalityWritableFolders;
  691. $sCurPage = $_SERVER['PHP_SELF'];
  692. $sPostFolders = $sPostFiles = '';
  693. $sErrors = printInstallError($sErrorMessage);
  694. require_once('../studio/classes/BxDolStudioTools.php');
  695. $oAdmTools = new BxDolStudioTools();
  696. $oBxDolIO = new BxDolIO();
  697. $aInstallDirsMerged = array_merge($aTemporalityWritableFolders, $oAdmTools->aPostInstallPermDirs);
  698. $i = 0;
  699. foreach($aInstallDirsMerged as $sFolder) {
  700. $sStyleAdd = ( ($i%2) == 0 ) ? 'background-color:#ede9e9;' : 'background-color:#fff;';
  701. $sEachFolder = ( $oBxDolIO->isWritable($sFolder) )
  702. ? '<span class="unwritable">Writable</span>' : '<span class="writable">Non-writable</span>';
  703. $sPostFolders .= <<<EOF
  704. <tr style="{$sStyleAdd}" class="cont">
  705. <td>{$sFolder}</td>
  706. <td class="span">
  707. {$sEachFolder}
  708. </td>
  709. <td class="span">
  710. <span class="desired">Non-writable</span>
  711. </td>
  712. </tr>
  713. EOF;
  714. $i++;
  715. }
  716. $i = 0;
  717. foreach($oAdmTools->aPostInstallPermFiles as $sFile) {
  718. $str = $_SERVER['DOCUMENT_ROOT'] . $_SERVER['PHP_SELF'];
  719. $sFolder = preg_replace("/install\/(index\.php$)/","",$str);
  720. if (file_exists($sFolder . $sFile)) {
  721. $sStyleAdd = ( ($i%2) == 0 ) ? 'background-color:#ede9e9;' : 'background-color:#fff;';
  722. $sEachFile = ( $oBxDolIO->isWritable($sFile) )
  723. ? '<span class="unwritable">Writable</span>'
  724. : '<span class="writable">Non-writable</span>';
  725. $sPostFiles .= <<<EOF
  726. <tr style="{$sStyleAdd}" class="cont">
  727. <td>{$sFile}</td>
  728. <td class="span">
  729. {$sEachFile}
  730. </td>
  731. <td class="span">
  732. <span class="desired">Non-writable</span>
  733. </td>
  734. </tr>
  735. EOF;
  736. $i++;
  737. }
  738. }
  739. return <<<EOF
  740. <div class="position">Permissions Reversal</div>
  741. {$sErrors}
  742. <div class="LeftRight">
  743. <div class="clearBoth"></div>
  744. <div class="left">Now, when Dolphin completed installation, you should change permissions for some files to keep your site secure. Please, change permissions as specified in the chart below. Helpful info about permissions is <a href="http://www.boonex.com/trac/dolphin/wiki/DetailedInstall#InstallScript-Step1-Permissions" target="_blank">available here</a>.</div>
  745. <div class="right">
  746. <table cellpadding="0" cellspacing="1" width="100%" border="0" style="background-color:silver;">
  747. <tr class="head">
  748. <td>Directories</td>
  749. <td>Current Level</td>
  750. <td>Desired Level</td>
  751. </tr>
  752. {$sPostFolders}
  753. <tr class="head">
  754. <td>Files</td>
  755. <td>Current Level</td>
  756. <td>Desired Level</td>
  757. </tr>
  758. {$sPostFiles}
  759. </table>
  760. <div class="formKeeper1">
  761. <div class="button_area_1">
  762. <form action="{$sCurPage}" method="post">
  763. <input id="button" type="image" src="images/check.gif" />
  764. <input type="hidden" name="action" value="step5" />
  765. </form>
  766. </div>
  767. <div class="button_area_1">
  768. <form action="{$sCurPage}" method="post">
  769. <input id="button" type="image" src="images/next.gif" />
  770. <input type="hidden" name="action" value="step6" />
  771. </form>
  772. </div>
  773. <div class="button_area_2">
  774. <form action="{$sCurPage}" method="post">
  775. <input id="button" type="image" src="images/skip.gif" />
  776. <input type="hidden" name="action" value="step7" />
  777. </form>
  778. </div>
  779. </div>
  780. </div>
  781. <div class="clearBoth"></div>
  782. </div>
  783. EOF;
  784. }
  785. function genSiteGeneralConfig($sErrorMessage = '') {
  786. global $aGeneral;
  787. $sCurPage = $_SERVER['PHP_SELF'];
  788. $sSGParamsTable = createTable($aGeneral);
  789. $sErrors = '';
  790. if (strlen($sErrorMessage)) {
  791. $sErrors = printInstallError($sErrorMessage);
  792. unset($_POST['site_title']);
  793. unset($_POST['site_email']);
  794. unset($_POST['notify_email']);
  795. unset($_POST['bug_report_email']);
  796. }
  797. $sOldDataParams = '';
  798. foreach($_POST as $postKey => $postValue) {
  799. $sOldDataParams .= ('action' == $postKey || isset($aGeneral[$postKey])) ? '' : '<input type="hidden" name="' . $postKey . '" value="' . $postValue . '" />';
  800. }
  801. return <<<EOF
  802. <div class="position">Configuration</div>
  803. {$sErrors}
  804. <div class="LeftRirght">
  805. <div class="clearBoth"></div>
  806. <div class="left"></div>
  807. <div class="right">
  808. <form action="{$sCurPage}" method="post">
  809. <table cellpadding="0" cellspacing="1" width="100%" border="0" style="background-color:silver;">
  810. <tr class="head">
  811. <td>&nbsp;</td>
  812. <td>&nbsp;</td>
  813. </tr>
  814. {$sSGParamsTable}
  815. </table>
  816. <div class="formKeeper">
  817. <input id="button" type="image" src="images/next.gif" />
  818. <input type="hidden" name="action" value="step4" />
  819. {$sOldDataParams}
  820. </div>
  821. </form>
  822. </div>
  823. <div class="clearBoth"></div>
  824. </div>
  825. EOF;
  826. }
  827. // check of config pages steps
  828. function checkConfigArray($aCheckedArray, &$sError) {
  829. //$error_arr //It is like global variable
  830. //$config_arr //It is like global variable, but non used
  831. $sErrorMessage = '';
  832. foreach ($aCheckedArray as $sKey => $sValue) {
  833. if (! strlen($sValue['check'])) continue;
  834. $funcbody = $sValue['check'];
  835. $func = create_function('$arg0', $funcbody);
  836. if (! $func($_POST[$sKey])) {
  837. $sFieldErr = $sValue['name'];
  838. $sErrorMessage .= "Please, input valid data to <b>{$sFieldErr}</b> field<br />";
  839. $error_arr[$sKey] = 1;
  840. unset($_POST[$sKey]);
  841. } else
  842. $error_arr[$sKey] = 0;
  843. //$config_arr[$sKey]['def'] = $_POST[$sKey];
  844. }
  845. if (strlen($sErrorMessage)) {
  846. $sError = 'error';
  847. }
  848. return $sErrorMessage;
  849. }
  850. function genDatabaseConfig($sErrorMessage = '') {
  851. global $aDbConf;
  852. $sCurPage = $_SERVER['PHP_SELF'];
  853. $sDbParamsTable = createTable($aDbConf);
  854. $sErrors = '';
  855. if (strlen($sErrorMessage)) {
  856. $sErrors = printInstallError($sErrorMessage);
  857. unset($_POST['db_name']);
  858. unset($_POST['db_user']);
  859. unset($_POST['db_password']);
  860. }
  861. $sOldDataParams = '';
  862. foreach($_POST as $postKey => $postValue) {
  863. $sOldDataParams .= ('action' == $postKey || isset($aDbConf[$postKey])) ? '' : '<input type="hidden" name="' . $postKey . '" value="' . $postValue . '" />';
  864. }
  865. return <<<EOF
  866. <div class="position">Database</div>
  867. {$sErrors}
  868. <div class="LeftRirght">
  869. <div class="clearBoth"></div>
  870. <div class="left">
  871. Please <a target="_blank" href="http://www.boonex.com/trac/dolphin/wiki/DetailedInstall#Part2:CreateaDatabaseandaUser">create a database</a> and tell Dolphin about it.
  872. </div>
  873. <div class="right">
  874. <form action="{$sCurPage}" method="post">
  875. <table cellpadding="0" cellspacing="1" width="100%" border="0" style="background-color:silver;">
  876. <tr class="head">
  877. <td>&nbsp;</td>
  878. <td>&nbsp;</td>
  879. </tr>
  880. {$sDbParamsTable}
  881. </table>
  882. <div class="formKeeper">
  883. <input id="button" type="image" src="images/next.gif" />
  884. <input type="hidden" name="action" value="step3" />
  885. {$sOldDataParams}
  886. </div>
  887. </form>
  888. </div>
  889. <div class="clearBoth"></div>
  890. </div>
  891. EOF;
  892. }
  893. function genPathCheckingConfig($sErrorMessage = '') {
  894. global $aConf, $confFirst;
  895. $sCurPage = $_SERVER['PHP_SELF'];
  896. $sGDRes = (extension_loaded('gd')) ? '<span class="writable">GD library installed</span>'
  897. : '<span class="unwritable">GD library NOT installed</span>';
  898. $sError = printInstallError( $sErrorMessage );
  899. $sPathsTable = createTable($confFirst);
  900. return <<<EOF
  901. <div class="position">Paths Check</div>
  902. {$sError}
  903. <div class="LeftRirght">
  904. <div class="clearBoth"></div>
  905. <div class="left">
  906. Dolphin checks general script paths.
  907. </div>
  908. <div class="right">
  909. <form action="{$sCurPage}" method="post">
  910. <table cellpadding="0" cellspacing="1" width="100%" border="0" style="background-color:silver;">
  911. <tr class="head">
  912. <td>&nbsp;</td>
  913. <td>&nbsp;</td>
  914. </tr>
  915. {$sPathsTable}
  916. <tr class="cont" style="background-color:#ede9e9;">
  917. <td>
  918. Check GD Installed
  919. </td>
  920. <td>
  921. {$sGDRes}
  922. </td>
  923. </tr>
  924. </table>
  925. <div class="formKeeper">
  926. <input id="button" type="image" src="images/next.gif" />
  927. <input type="hidden" name="action" value="step2" />
  928. </div>
  929. </form>
  930. </div>
  931. <div class="clearBoth"></div>
  932. </div>
  933. EOF;
  934. }
  935. function checkPreInstallPermission(&$sError) {
  936. global $aTemporalityWritableFolders;
  937. $sFoldersErr = $sFilesErr = $sErrorMessage = '';
  938. $oBxDolIO = new BxDolIO();
  939. require_once('../studio/classes/BxDolStudioTools.php');
  940. $oAdmTools = new BxDolStudioTools();
  941. $aInstallDirsMerged = array_merge($aTemporalityWritableFolders, $oAdmTools->aInstallDirs);
  942. foreach ($aInstallDirsMerged as $sFolder) {
  943. if (! $oBxDolIO->isWritable($sFolder)) {
  944. $sFoldersErr .= '&nbsp;&nbsp;&nbsp;' . $sFolder . ';<br />';
  945. }
  946. }
  947. foreach ($oAdmTools->aFlashDirs as $sFolder) {
  948. if (! $oBxDolIO->isWritable($sFolder)) {
  949. $sFoldersErr .= '&nbsp;&nbsp;&nbsp;' . $sFolder . ';<br />';
  950. }
  951. }
  952. if( strlen( $sFoldersErr ) ) {
  953. $sError = 'error';
  954. $sErrorMessage .= '<strong>Next directories have inappropriate permissions</strong>:<br />' . $sFoldersErr;
  955. }
  956. foreach ($oAdmTools->aInstallFiles as $sFile) {
  957. if (! $oBxDolIO->isWritable($sFile)) {
  958. $sFilesErr .= '&nbsp;&nbsp;&nbsp;' . $sFile . ';<br /> ';
  959. }
  960. }
  961. foreach( $oAdmTools->aFlashFiles as $sFile ) {
  962. if (strpos($sFile,'ffmpeg') === false) {
  963. if (! $oBxDolIO->isWritable($sFile)) {
  964. $sFilesErr .= '&nbsp;&nbsp;&nbsp;' . $sFile . ';<br /> ';
  965. }
  966. } else {
  967. if (! $oBxDolIO->isExecutable($sFile)) {
  968. $sFilesErr .= '&nbsp;&nbsp;&nbsp;' . $sFile . ';<br /> ';
  969. }
  970. }
  971. }
  972. if (strlen($sFilesErr)) {
  973. $sError = 'error';
  974. $sErrorMessage .= '<strong>Next files have inappropriate permissions</strong>:<br />' . $sFilesErr;
  975. }
  976. return $sErrorMessage;
  977. }
  978. // pre install
  979. function genPreInstallPermissionTable($sErrorMessage = '') {
  980. global $aTemporalityWritableFolders;
  981. $sCurPage = $_SERVER['PHP_SELF'];
  982. $sErrorMessage .= (ini_get('safe_mode') == 1 || ini_get('safe_mode') == 'On') ? "Please turn off <b>safe_mode</b> in your php.ini file configuration" : '';
  983. $sError = printInstallError($sErrorMessage);
  984. require_once('../studio/classes/BxDolStudioTools.php');
  985. $oAdmTools = new BxDolStudioTools();
  986. $oAdmTools->aInstallDirs = array_merge($aTemporalityWritableFolders, $oAdmTools->aInstallDirs);
  987. $sPermTable = $oAdmTools->GenCommonCode();
  988. $sPermTable .= $oAdmTools->GenPermTable();
  989. return <<<EOF
  990. <div class="position">Permissions</div>
  991. {$sError}
  992. <div class="LeftRirght">
  993. <div class="clearBoth"></div>
  994. <div class="left">
  995. Dolphin needs special access for certain files and directories. Please, change permissions as specified in the chart below. Helpful info about permissions is <a href="http://www.boonex.com/trac/dolphin/wiki/DetailedInstall#InstallScript-Step1-Permissions" target="_blank">available here</a>.
  996. </div>
  997. <div class="clear_both"></div>
  998. <div class="right">
  999. <script src="../plugins/jquery/jquery.js" type="text/javascript" language="javascript"></script>
  1000. {$sPermTable}
  1001. <div class="formKeeper">
  1002. <div class="button_area_1">
  1003. <form action="{$sCurPage}" method="post">
  1004. <input id="button" type="image" src="images/check.gif" />
  1005. <input type="hidden" name="action" value="preInstall" />
  1006. </form>
  1007. </div>
  1008. <div class="button_area_2">
  1009. <form action="{$sCurPage}" method="post">
  1010. <input id="button" type="image" src="images/next.gif" />
  1011. <input type="hidden" name="action" value="step1" />
  1012. </form>
  1013. </div>
  1014. <div class="clearBoth"></div>
  1015. </div>
  1016. </div>
  1017. </div>
  1018. EOF;
  1019. }
  1020. function StartInstall() {
  1021. global $aConf;
  1022. return <<<EOF
  1023. <div class="install_pic">
  1024. Dolphin {$aConf['iVersion']}.{$aConf['iPatch']}
  1025. </div>
  1026. <div class="install_text">
  1027. Thank you for choosing Dolphin Smart Community Builder!<br />
  1028. Click the button below to create your own community.
  1029. </div>
  1030. <div class="install_button">
  1031. <form action="{$_SERVER['PHP_SELF']}" method="post">
  1032. <input id="button" type="image" src="images/install.gif" />
  1033. <input type="hidden" name="action" value="preInstall" />
  1034. </form>
  1035. </div>
  1036. EOF;
  1037. }
  1038. function genMainDolphinPage() {
  1039. //TODO: Forward into Studio -> Store to install Language(s) or install default one automatically.
  1040. //performInstallLanguages();
  1041. /**
  1042. * Register System Transcoders
  1043. */
  1044. $aTranscoders = array(
  1045. BX_DOL_TRANSCODER_OBJ_ICON_APPLE,
  1046. BX_DOL_TRANSCODER_OBJ_ICON_FACEBOOK,
  1047. BX_DOL_TRANSCODER_OBJ_ICON_FAVICON,
  1048. BX_DOL_TRANSCODER_OBJ_CMTS_IMAGE_PREVIEW
  1049. );
  1050. bx_import('BxDolImageTranscoder');
  1051. BxDolImageTranscoder::registerHandlersArray($aTranscoders);
  1052. /**
  1053. * Perform admin login.
  1054. */
  1055. $sExistedAdminPass = db_value("SELECT `password` FROM `sys_accounts` WHERE `id`='1'");
  1056. $aUrl = parse_url($GLOBALS['site']['url']);
  1057. $sPath = isset($aUrl['path']) && !empty($aUrl['path']) ? $aUrl['path'] : '/';
  1058. $sHost = '';
  1059. $iCookieTime = 0;
  1060. setcookie("memberID", 1, $iCookieTime, $sPath, $sHost);
  1061. $_COOKIE['memberID'] = 1;
  1062. setcookie("memberPassword", $sExistedAdminPass, $iCookieTime, $sPath, $sHost, false, true /* http only */);
  1063. $_COOKIE['memberPassword'] = $sExistedAdminPass;
  1064. return <<<EOF
  1065. <script type="text/javascript">
  1066. window.location = "../index.php";
  1067. </script>
  1068. EOF;
  1069. }
  1070. function PageHeader($sAction = '', $sError = '') {
  1071. global $aConf;
  1072. $aActions = array(
  1073. "startInstall" => "Dolphin Installation",
  1074. "preInstall" => "Permissions",
  1075. "step1" => "Paths",
  1076. "step2" => "Database",
  1077. "step3" => "Config",
  1078. "step4" => "Cron Jobs",
  1079. "step5" => "Permissions Reversal",
  1080. "step6" => "Modules"
  1081. );
  1082. if( !strlen( $sAction ) )
  1083. $sAction = "startInstall";
  1084. $sActiveStyle = ($sAction == "step6") ? 'Active' : 'Inactive';
  1085. $iCounterCurrent = 1;
  1086. $iCounterActive = 1;
  1087. foreach ($aActions as $sActionKey => $sActionValue) {
  1088. if ($sAction != $sActionKey) {
  1089. $iCounterActive++;
  1090. } else
  1091. break;
  1092. }
  1093. if (strlen($sError))
  1094. $iCounterActive--;
  1095. $sSubActions = '';
  1096. foreach ($aActions as $sActionKey => $sActionValue) {
  1097. if ($iCounterActive == $iCounterCurrent) {
  1098. $sSubActions .= '<div id="topActive">' . $sActionValue . '</div>';
  1099. } elseif (($iCounterActive - $iCounterCurrent) == -1) {
  1100. $sSubActions .= '<img src="images/active_inactive.gif" /><div id="topInactive">' . $sActionValue . '</div><img src="images/inactive_inactive.gif" />';
  1101. } elseif (($iCounterActive - $iCounterCurrent) == 1) {
  1102. $sSubActions .= '<div id="topInactive">' . $sActionValue . '</div><img src="images/inactive_active.gif" />';
  1103. } else {
  1104. $sSubActions .= '<div id="topInactive">' . $sActionValue . '</div>';
  1105. if ($sActionKey != "step6")
  1106. $sSubActions .= '<img src="images/inactive_inactive.gif" />';
  1107. }
  1108. $iCounterCurrent++;
  1109. }
  1110. return <<<EOF
  1111. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  1112. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
  1113. <head>
  1114. <title>Dolphin Smart Community Builder Installation Script</title>
  1115. <link href="general.css" rel="stylesheet" type="text/css" />
  1116. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  1117. <script src="../inc/js/functions.js" type="text/javascript" language="javascript"></script>
  1118. <!--[if lt IE 7.]>
  1119. <script defer type="text/javascript" src="../inc/js/pngfix.js"></script>
  1120. <![endif]-->
  1121. </head>
  1122. <body>
  1123. <div id="main">
  1124. <div id="topMenu{$sActiveStyle}">
  1125. {$sSubActions}
  1126. </div>
  1127. <div id="header">
  1128. <img src="images/boonex-logo.png" alt="" /></div>
  1129. <div id="content">
  1130. EOF;
  1131. }
  1132. function PageFooter($sAction) {
  1133. $sAdminAdd = ($sAction) ? '<div id="footer"><img src="images/dolphin_transparent.jpg" alt="" /></div>' : '';
  1134. return <<<EOF
  1135. </div>
  1136. {$sAdminAdd}
  1137. </div>
  1138. </body>
  1139. </html>
  1140. EOF;
  1141. }
  1142. function printInstallError($sText) {
  1143. $sRet = (strlen($sText)) ? '<div class="error">' . $sText . '</div>' : '';
  1144. return $sRet;
  1145. }
  1146. function createTable($arr) {
  1147. $ret = '';
  1148. $i = '';
  1149. foreach($arr as $key => $value) {
  1150. $sStyleAdd = (($i%2) == 0) ? 'background-color:#ede9e9;' : 'background-color:#fff;';
  1151. $def_exp_text = "";
  1152. if (strlen($value['def_exp'])) {
  1153. $funcbody = $value['def_exp'];
  1154. $func = create_function("", $funcbody);
  1155. $def_exp = $func();
  1156. if (strlen($def_exp)) {
  1157. $def_exp_text = "&nbsp;<font color=green>found</font>";
  1158. $value['def'] = $def_exp;
  1159. } else {
  1160. $def_exp_text = "&nbsp;<font color=red>not found</font>";
  1161. }
  1162. }
  1163. $st_err = ($error_arr[$key] == 1) ? ' style="background-color:#FFDDDD;" ' : '';
  1164. $ret .= <<<EOF
  1165. <tr class="cont" style="{$sStyleAdd}">
  1166. <td>
  1167. <div>{$value['name']}</div>
  1168. <div>Description:</div>
  1169. <div>Example:</div>
  1170. </td>
  1171. <td>
  1172. <div><input {$st_err} size="30" name="{$key}" value="{$value['def']}" /> {$def_exp_text}</div>
  1173. <div>{$value['desc']}</div>
  1174. <div style="font-style:italic;">{$value['ex']}</div>
  1175. </td>
  1176. </tr>
  1177. EOF;
  1178. $i ++;
  1179. }
  1180. return $ret;
  1181. }
  1182. function rewriteFile($sCode, $sReplace, $sFile) {
  1183. $ret = '';
  1184. $fs = filesize($sFile);
  1185. $fp = fopen($sFile, 'r');
  1186. if ($fp) {
  1187. $fcontent = fread($fp, $fs);
  1188. $fcontent = str_replace($sCode, $sReplace, $fcontent);
  1189. fclose($fp);
  1190. $fp = fopen($sFile, 'w');
  1191. if ($fp) {
  1192. if (fputs($fp, $fcontent)) {
  1193. $ret .= true;
  1194. } else {
  1195. $ret .= false;
  1196. }
  1197. fclose ( $fp );
  1198. } else {
  1199. $ret .= false;
  1200. }
  1201. } else {
  1202. $ret .= false;
  1203. }
  1204. return $ret;
  1205. }
  1206. function RunSQL($sAdminName, $sAdminPassword) {
  1207. $aDbConf['host'] = $_POST['db_host'];
  1208. $aDbConf['sock'] = $_POST['db_sock'];
  1209. $aDbConf['port'] = $_POST['db_port'];
  1210. $aDbConf['user'] = $_POST['db_user'];
  1211. $aDbConf['passwd'] = $_POST['db_password'];
  1212. $aDbConf['db'] = $_POST['db_name'];
  1213. $aDbConf['host'] .= ( $aDbConf['port'] ? ":{$aDbConf['port']}" : '' ) . ( $aDbConf['sock'] ? ":{$aDbConf['sock']}" : '' );
  1214. $pass = true;
  1215. $errorMes = '';
  1216. $filename = $_POST['sql_file'];
  1217. $vLink = @mysql_connect($aDbConf['host'], $aDbConf['user'], $aDbConf['passwd']);
  1218. if( !$vLink )
  1219. return printInstallError( mysql_error() );
  1220. if (!mysql_select_db ($aDbConf['db'], $vLink))
  1221. return printInstallError( $aDbConf['db'] . ': ' . mysql_error() );
  1222. mysql_query ("SET sql_mode = ''", $vLink);
  1223. if (! ($f = fopen ( $filename, "r" )))
  1224. return printInstallError( 'Could not open file with sql instructions:' . $filename );
  1225. //Begin SQL script executing
  1226. $s_sql = "";
  1227. while ($s = fgets ( $f, 10240)) {
  1228. $s = trim( $s ); //Utf with BOM only
  1229. if (! strlen($s)) continue;
  1230. if (mb_substr($s, 0, 1) == '#') continue; //pass comments
  1231. if (mb_substr($s, 0, 2) == '--') continue;
  1232. if (substr($s, 0, 5) == "\xEF\xBB\xBF\x2D\x2D") continue;
  1233. $s_sql .= $s;
  1234. if (mb_substr($s, -1) != ';') continue;
  1235. $res = mysql_query($s_sql, $vLink);
  1236. if (!$res)
  1237. $errorMes .= 'Error while executing: ' . $s_sql . '<br />' . mysql_error($vLink) . '<hr />';
  1238. $s_sql = '';
  1239. }
  1240. fclose($f);
  1241. $sAdminNameDB = DbEscape($sAdminName, false);
  1242. $sSiteEmail = DbEscape($_POST['site_email']);
  1243. $sSaltDB = base64_encode(substr(md5(microtime()), 2, 6));
  1244. $sAdminPasswordDB = sha1(md5($sAdminPassword) . $sSaltDB); // encryptUserPwd
  1245. $sAdminQuery = "
  1246. INSERT INTO `sys_accounts`
  1247. (`name`, `email`, `email_confirmed`, `receive_updates`, `receive_news`, `password`, `salt`, `role`, `added`)
  1248. VALUES
  1249. ('{$sAdminNameDB}', '{$sSiteEmail}', 1, 1, 1, '{$sAdminPasswordDB}', '{$sSaltDB}', 3, '" . time() . "')
  1250. ";
  1251. if (!mysql_query($sAdminQuery, $vLink)) {
  1252. $errorMes .= 'Error while executing: ' . $sAdminQuery . '<br />' . mysql_error($vLink) . '<hr />';
  1253. } else {
  1254. $iAccontId = mysql_insert_id($vLink);
  1255. $sAdminQuery = "
  1256. INSERT INTO `sys_profiles`
  1257. (`account_id`, `type`, `content_id`, `status`)
  1258. VALUES
  1259. ($iAccontId, 'system', $iAccontId, 'active')
  1260. ";
  1261. if (!mysql_query($sAdminQuery, $vLink))
  1262. $errorMes .= 'Error while executing: ' . $sAdminQuery . '<br />' . mysql_error($vLink) . '<hr />';
  1263. }
  1264. $enable_gd_value = extension_loaded('gd') ? 'on' : '';
  1265. if (!(mysql_query ("UPDATE `sys_options` SET `VALUE`='{$enable_gd_value}' WHERE `Name`='enable_gd'", $vLink)))
  1266. $ret .= "<font color=red><i><b>Error</b>:</i> " . mysql_error($vLink) . "</font><hr>";
  1267. $sSiteTitle = DbEscape($_POST['site_title']);
  1268. $sSiteDesc = DbEscape($_POST['site_desc']);
  1269. $sSiteEmailNotify = DbEscape($_POST['notify_email']);
  1270. $sSiteEmailBugReport = DbEscape($_POST['bug_report_email']);
  1271. if ($sSiteEmail != '' && $sSiteTitle != '' && $sSiteEmailNotify != '') {
  1272. if (! (mysql_query("UPDATE `sys_options` SET `VALUE`='{$sSiteEmail}' WHERE `Name`='site_email'", $vLink)))
  1273. $ret .= "<font color=red><i><b>Error</b>:</i> ".mysql_error($vLink)."</font><hr>";
  1274. if (! (mysql_query("UPDATE `sys_options` SET `VALUE`='{$sSiteTitle}' WHERE `Name`='site_title'", $vLink)))
  1275. $ret .= "<font color=red><i><b>Error</b>:</i> ".mysql_error($vLink)."</font><hr>";
  1276. if (! (mysql_query("UPDATE `sys_options` SET `VALUE`='{$sSiteEmailNotify}' WHERE `Name`='site_email_notify'", $vLink)))
  1277. $ret .= "<font color=red><i><b>Error</b>:</i> ".mysql_error($vLink)."</font><hr>";
  1278. if (! (mysql_query("UPDATE `sys_options` SET `VALUE`='{$sSiteEmailBugReport}' WHERE `Name`='site_email_bug_report'", $vLink)))
  1279. $ret .= "<font color=red><i><b>Error</b>:</i> ".mysql_error($vLink)."</font><hr>";
  1280. if (! (mysql_query("UPDATE `sys_options` SET `VALUE`='{$sSiteDesc}' WHERE `Name`='MetaDescription'", $vLink)))
  1281. $ret .= "<font color=red><i><b>Error</b>:</i> ".mysql_error($vLink)."</font><hr>";
  1282. } else {
  1283. $ret .= "<font color=red><i><b>Error</b>:</i> Don`t received POSTed site_email or site_title or site_email_notify</font><hr>";
  1284. }
  1285. mysql_close($vLink);
  1286. $errorMes .= $ret;
  1287. if (strlen($errorMes)) {
  1288. return printInstallError($errorMes);
  1289. } else {
  1290. return 'done';
  1291. }
  1292. // return $ret."Truncating tables finished.<br>";
  1293. }
  1294. function DbEscape($s, $isDetectMagixQuotes = true) {
  1295. if (get_magic_quotes_gpc() && $isDetectMagixQuotes)
  1296. $s = stripslashes ($s);
  1297. return mysql_real_escape_string($s);
  1298. }
  1299. function CheckSQLParams() {
  1300. $aDbConf['host'] = $_POST['db_host'];
  1301. $aDbConf['sock'] = $_POST['db_sock'];
  1302. $aDbConf['port'] = $_POST['db_port'];
  1303. $aDbConf['user'] = $_POST['db_user'];
  1304. $aDbConf['passwd'] = $_POST['db_password'];
  1305. $aDbConf['db'] = $_POST['db_name'];
  1306. $aDbConf['host'] .= ( $aDbConf['port'] ? ":{$aDbConf['port']}" : '' ) . ( $aDbConf['sock'] ? ":{$aDbConf['sock']}" : '' );
  1307. $vLink = @mysql_connect($aDbConf['host'], $aDbConf['user'], $aDbConf['passwd']);
  1308. if (!$vLink)
  1309. return printInstallError(mysql_error());
  1310. if (!mysql_select_db ($aDbConf['db'], $vLink))
  1311. return printInstallError($aDbConf['db'] . ': ' . mysql_error());
  1312. mysql_close($vLink);
  1313. }
  1314. // set error reporting level
  1315. if (version_compare(phpversion(), "5.3.0", ">=") == 1)
  1316. error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
  1317. else
  1318. error_reporting(E_ALL & ~E_NOTICE);
  1319. ?>