PageRenderTime 42ms CodeModel.GetById 14ms RepoModel.GetById 1ms app.codeStats 0ms

/install/rpc.php

https://github.com/snowbird/oscommerce
PHP | 355 lines | 269 code | 57 blank | 29 comment | 70 complexity | cb599d3c48b387dc3f0e1730cdf67dd9 MD5 | raw file
  1. <?php
  2. /*
  3. $Id: $
  4. osCommerce, Open Source E-Commerce Solutions
  5. http://www.oscommerce.com
  6. Copyright (c) 2007 osCommerce
  7. This program is free software; you can redistribute it and/or modify
  8. it under the terms of the GNU General Public License v2 (1991)
  9. as published by the Free Software Foundation.
  10. */
  11. header('Cache-Control: no-cache, must-revalidate');
  12. header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
  13. require('includes/application.php');
  14. $dir_fs_www_root = dirname(__FILE__);
  15. if (isset($_GET['action']) && !empty($_GET['action'])) {
  16. switch ($_GET['action']) {
  17. case 'dbCheck':
  18. $db = array('DB_SERVER' => trim(urldecode($_GET['server'])),
  19. 'DB_SERVER_USERNAME' => trim(urldecode($_GET['username'])),
  20. 'DB_SERVER_PASSWORD' => trim(urldecode($_GET['password'])),
  21. 'DB_DATABASE' => trim(urldecode($_GET['name'])),
  22. 'DB_DATABASE_CLASS' => trim(urldecode($_GET['class']))
  23. );
  24. $osC_Database = osC_Database::connect($db['DB_SERVER'], $db['DB_SERVER_USERNAME'], $db['DB_SERVER_PASSWORD'], $db['DB_DATABASE_CLASS']);
  25. if ($osC_Database->isError() === false) {
  26. $osC_Database->selectDatabase($db['DB_DATABASE']);
  27. }
  28. if ($osC_Database->isError()) {
  29. echo '[[0|' . $osC_Database->getError() . ']]';
  30. } else {
  31. echo '[[1]]';
  32. }
  33. exit;
  34. break;
  35. case 'dbImport':
  36. $db = array('DB_SERVER' => trim(urldecode($_GET['server'])),
  37. 'DB_SERVER_USERNAME' => trim(urldecode($_GET['username'])),
  38. 'DB_SERVER_PASSWORD' => trim(urldecode($_GET['password'])),
  39. 'DB_DATABASE' => trim(urldecode($_GET['name'])),
  40. 'DB_DATABASE_CLASS' => trim(urldecode($_GET['class'])),
  41. 'DB_INSERT_SAMPLE_DATA' => ((trim(urldecode($_GET['import'])) == '1') ? 'true' : 'false'),
  42. 'DB_TABLE_PREFIX' => trim(urldecode($_GET['prefix']))
  43. );
  44. $osC_Database = osC_Database::connect($db['DB_SERVER'], $db['DB_SERVER_USERNAME'], $db['DB_SERVER_PASSWORD'], $db['DB_DATABASE_CLASS']);
  45. if ($osC_Database->isError() === false) {
  46. $osC_Database->selectDatabase($db['DB_DATABASE']);
  47. }
  48. if ($osC_Database->isError() === false) {
  49. $sql_file = $dir_fs_www_root . '/oscommerce.sql';
  50. $osC_Database->importSQL($sql_file, $db['DB_DATABASE'], $db['DB_TABLE_PREFIX']);
  51. }
  52. if ( ($osC_Database->isError() === false) && ($db['DB_INSERT_SAMPLE_DATA'] == 'true') ) {
  53. $sql_file = $dir_fs_www_root . '/oscommerce_sample_data.sql';
  54. $osC_Database->importSQL($sql_file, $db['DB_DATABASE'], $db['DB_TABLE_PREFIX']);
  55. }
  56. if ($osC_Database->isError() === false) {
  57. foreach ($osC_Language->extractDefinitions('en_US.xml') as $def) {
  58. $Qdef = $osC_Database->query('insert into :table_languages_definitions (languages_id, content_group, definition_key, definition_value) values (:languages_id, :content_group, :definition_key, :definition_value)');
  59. $Qdef->bindTable(':table_languages_definitions', $db['DB_TABLE_PREFIX'] . 'languages_definitions');
  60. $Qdef->bindInt(':languages_id', 1);
  61. $Qdef->bindValue(':content_group', $def['group']);
  62. $Qdef->bindValue(':definition_key', $def['key']);
  63. $Qdef->bindValue(':definition_value', $def['value']);
  64. $Qdef->execute();
  65. }
  66. $osC_DirectoryListing = new osC_DirectoryListing('../includes/languages/en_US');
  67. $osC_DirectoryListing->setRecursive(true);
  68. $osC_DirectoryListing->setIncludeDirectories(false);
  69. $osC_DirectoryListing->setAddDirectoryToFilename(true);
  70. $osC_DirectoryListing->setCheckExtension('xml');
  71. foreach ($osC_DirectoryListing->getFiles() as $files) {
  72. foreach ($osC_Language->extractDefinitions('en_US/' . $files['name']) as $def) {
  73. $Qdef = $osC_Database->query('insert into :table_languages_definitions (languages_id, content_group, definition_key, definition_value) values (:languages_id, :content_group, :definition_key, :definition_value)');
  74. $Qdef->bindTable(':table_languages_definitions', $db['DB_TABLE_PREFIX'] . 'languages_definitions');
  75. $Qdef->bindInt(':languages_id', 1);
  76. $Qdef->bindValue(':content_group', $def['group']);
  77. $Qdef->bindValue(':definition_key', $def['key']);
  78. $Qdef->bindValue(':definition_value', $def['value']);
  79. $Qdef->execute();
  80. }
  81. }
  82. }
  83. if ($osC_Database->isError() === false) {
  84. define('DB_TABLE_PREFIX', $db['DB_TABLE_PREFIX']);
  85. include('../includes/database_tables.php');
  86. /* HPDL
  87. $services = array('banner',
  88. 'breadcrumb',
  89. 'category_path',
  90. 'core',
  91. 'currencies',
  92. 'debug',
  93. 'language',
  94. 'output_compression',
  95. 'recently_visited',
  96. 'reviews',
  97. 'session',
  98. 'simple_counter',
  99. 'specials',
  100. 'whos_online');
  101. */
  102. $services = array('output_compression',
  103. 'session',
  104. 'language',
  105. 'debug',
  106. 'currencies',
  107. 'core',
  108. 'simple_counter',
  109. 'category_path',
  110. 'breadcrumb',
  111. 'whos_online',
  112. // 'banner',
  113. 'specials',
  114. 'reviews',
  115. 'recently_visited');
  116. $installed = array();
  117. foreach ($services as $service) {
  118. include('../admin/includes/modules/services/' . $service . '.php');
  119. $class = 'osC_Services_' . $service . '_Admin';
  120. $module = new $class();
  121. $module->install();
  122. if (isset($module->depends)) {
  123. if (is_string($module->depends) && (($key = array_search($module->depends, $installed)) !== false)) {
  124. if (isset($installed[$key+1])) {
  125. array_splice($installed, $key+1, 0, $service);
  126. } else {
  127. $installed[] = $service;
  128. }
  129. } elseif (is_array($module->depends)) {
  130. foreach ($module->depends as $depends_module) {
  131. if (($key = array_search($depends_module, $installed)) !== false) {
  132. if (!isset($array_position) || ($key > $array_position)) {
  133. $array_position = $key;
  134. }
  135. }
  136. }
  137. if (isset($array_position)) {
  138. array_splice($installed, $array_position+1, 0, $service);
  139. } else {
  140. $installed[] = $service;
  141. }
  142. }
  143. } elseif (isset($module->precedes)) {
  144. if (is_string($module->precedes)) {
  145. if ((($key = array_search($module->precedes, $installed)) !== false)) {
  146. array_splice($installed, $key, 0, $service);
  147. } else {
  148. $installed[] = $service;
  149. }
  150. } elseif (is_array($module->precedes)) {
  151. foreach ($module->precedes as $precedes_module) {
  152. if (($key = array_search($precedes_module, $installed)) !== false) {
  153. if (!isset($array_position) || ($key < $array_position)) {
  154. $array_position = $key;
  155. }
  156. }
  157. }
  158. if (isset($array_position)) {
  159. array_splice($installed, $array_position, 0, $service);
  160. } else {
  161. $installed[] = $service;
  162. }
  163. }
  164. } else {
  165. $installed[] = $service;
  166. }
  167. unset($array_position);
  168. }
  169. $Qs = $osC_Database->query('insert into :table_configuration (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) VALUES ("Service Modules", "MODULE_SERVICES_INSTALLED", :configuration_value, "Installed services modules", "6", "0", now())');
  170. $Qs->bindTable(':table_configuration', TABLE_CONFIGURATION);
  171. $Qs->bindValue(':configuration_value', implode(';', $installed));
  172. $Qs->execute();
  173. include('includes/classes/payment.php');
  174. include('includes/classes/shipping.php');
  175. include('includes/classes/order_total.php');
  176. include('../admin/includes/modules/payment/cod.php');
  177. $module = new osC_Payment_cod();
  178. $module->install();
  179. $Qupdate = $osC_Database->query('update :table_configuration set configuration_value = 1 where configuration_key = :configuration_key');
  180. $Qupdate->bindTable(':table_configuration', TABLE_CONFIGURATION);
  181. $Qupdate->bindValue(':configuration_key', 'MODULE_PAYMENT_COD_STATUS');
  182. $Qupdate->execute();
  183. include('../admin/includes/modules/shipping/flat.php');
  184. $module = new osC_Shipping_flat();
  185. $module->install();
  186. include('../admin/includes/modules/order_total/sub_total.php');
  187. $module = new osC_OrderTotal_sub_total();
  188. $module->install();
  189. include('../admin/includes/modules/order_total/shipping.php');
  190. $module = new osC_OrderTotal_shipping();
  191. $module->install();
  192. include('../admin/includes/modules/order_total/tax.php');
  193. $module = new osC_OrderTotal_tax();
  194. $module->install();
  195. include('../admin/includes/modules/order_total/total.php');
  196. $module = new osC_OrderTotal_total();
  197. $module->install();
  198. }
  199. if ( ($osC_Database->isError() === false) && ($db['DB_DATABASE_CLASS'] == 'mysqli_innodb') ) {
  200. $Qinno = $osC_Database->query('show variables like "have_innodb"');
  201. if (($Qinno->numberOfRows() === 1) && (strtolower($Qinno->value('Value')) == 'yes')) {
  202. $database_tables = array('address_book', 'categories', 'categories_description', 'customers', 'manufacturers', 'manufacturers_info', 'orders', 'orders_products', 'orders_status', 'orders_status_history', 'orders_products_attributes', 'orders_products_download', 'orders_total', 'products', 'products_attributes', 'products_attributes_download', 'products_description', 'products_options', 'products_options_values', 'products_options_values_to_products_options', 'products_to_categories', 'reviews', 'shopping_carts', 'shopping_carts_custom_variants_values', 'weight_classes', 'weight_classes_rules');
  203. foreach ($database_tables as $table) {
  204. $osC_Database->simpleQuery('alter table ' . $db['DB_TABLE_PREFIX'] . $table . ' type = innodb');
  205. }
  206. }
  207. }
  208. if ($osC_Database->isError()) {
  209. echo '[[0|' . $osC_Database->getError() . ']]';
  210. } else {
  211. echo '[[1]]';
  212. }
  213. exit;
  214. break;
  215. case 'dbImportSample':
  216. $db = array('DB_SERVER' => trim(urldecode($_GET['server'])),
  217. 'DB_SERVER_USERNAME' => trim(urldecode($_GET['username'])),
  218. 'DB_SERVER_PASSWORD' => trim(urldecode($_GET['password'])),
  219. 'DB_DATABASE' => trim(urldecode($_GET['name'])),
  220. 'DB_DATABASE_CLASS' => trim(urldecode($_GET['class'])),
  221. 'DB_TABLE_PREFIX' => trim(urldecode($_GET['prefix']))
  222. );
  223. $osC_Database = osC_Database::connect($db['DB_SERVER'], $db['DB_SERVER_USERNAME'], $db['DB_SERVER_PASSWORD'], $db['DB_DATABASE_CLASS']);
  224. if ($osC_Database->isError() === false) {
  225. $osC_Database->selectDatabase($db['DB_DATABASE']);
  226. }
  227. if ($osC_Database->isError() === false) {
  228. $sql_file = $dir_fs_www_root . '/oscommerce_sample_data.sql';
  229. $osC_Database->importSQL($sql_file, $db['DB_DATABASE'], $db['DB_TABLE_PREFIX']);
  230. }
  231. if ($osC_Database->isError()) {
  232. echo '[[0|' . $osC_Database->getError() . ']]';
  233. } else {
  234. echo '[[1]]';
  235. }
  236. exit;
  237. break;
  238. case 'checkWorkDir':
  239. $directory = trim(urldecode($_GET['dir']));
  240. if (file_exists($directory)) {
  241. if (is_writeable($directory)) {
  242. if (file_exists($directory . '/.htaccess') === false) {
  243. if ($fp = @fopen($directory . '/.htaccess', 'w')) {
  244. flock($fp, 2); // LOCK_EX
  245. fputs($fp, "<Files *>\nOrder Deny,Allow\nDeny from all\n</Files>");
  246. flock($fp, 3); // LOCK_UN
  247. fclose($fp);
  248. }
  249. }
  250. echo '[[1]]';
  251. } else {
  252. echo '[[0|' . $directory . ']]';
  253. }
  254. } else {
  255. echo '[[-1|' . $directory . ']]';
  256. }
  257. exit;
  258. break;
  259. case 'getDirectoryPath':
  260. $directory = trim(urldecode($_GET['dir']));
  261. if (!is_dir($directory) || (false === $fh = @opendir($directory))) {
  262. $query = basename($directory);
  263. $directory = dirname($directory);
  264. if ($fh = @opendir($directory)) {
  265. $dirs = array();
  266. while (false !== ($dir = readdir($fh))) {
  267. if ( ($dir != '.') && ($dir != '..') && (substr($dir, 0, 1) != '.') && is_dir($directory . '/' . $dir)) {
  268. if (strlen($query) > 1) {
  269. if (substr($dir, 0, strlen($query)) == $query) {
  270. $dirs[] = $directory . '/' . $dir;
  271. }
  272. } else {
  273. $dirs[] = $directory . '/' . $dir;
  274. }
  275. }
  276. }
  277. closedir($fh);
  278. if (sizeof($dirs) > 0) {
  279. sort($dirs);
  280. echo '[[0|' . implode(';', $dirs) . ']]';
  281. } else {
  282. echo '[[-1|invalidPath]]';
  283. }
  284. } else {
  285. echo '[[-1|invalidPath]]';
  286. }
  287. } else {
  288. echo '[[1|' . $directory . ']]';
  289. }
  290. exit;
  291. break;
  292. }
  293. }
  294. echo '[[-100|noActionError]]';
  295. ?>