PageRenderTime 106ms CodeModel.GetById 28ms RepoModel.GetById 1ms app.codeStats 0ms

/wp/wp-content/plugins/wp-carousel/update_db.php

https://github.com/amoro119/nbneptune.com
PHP | 420 lines | 273 code | 114 blank | 33 comment | 53 complexity | 6dbe5acc8116cc82c49d1021a9e77417 MD5 | raw file
  1. <?php
  2. define('WP_CAROUSEL_WP_BLOG_HEADER_FILE', 'wp-blog-header.php');
  3. /* Esta variable almacenara si se ha producido un error o no */
  4. $wp_carousel_error = false;
  5. $had_backup = false; // Y esta si se ha realizado una copia de seguridad o no
  6. /* Primero creamos la nueva martriz a guardar */
  7. if (!isset($_POST['carousel_id'])) // Los cambios deben aplicarse a algún carrusel
  8. {
  9. $wp_carousel_error = true;
  10. ?>
  11. <div class="error">
  12. <p>
  13. <?php echo 'There was an error, please, report it in the forum and attach this error message:'; ?>
  14. </p>
  15. <p>
  16. <?php printf('%s', base64_encode(serialize($_POST)).' (file: update_db.php - '.__LINE__.' - '. $folder_path . WP_CAROUSEL_WP_BLOG_HEADER_FILE .' )'); ?>
  17. </p>
  18. </div>
  19. <?php
  20. exit;
  21. }
  22. $carousel_id = $_POST['carousel_id'];
  23. $action_to_perform = $_POST['action'];
  24. $should_save_a_backup = false;
  25. switch (true): // Vamos a ver la acción que debemos realizar
  26. case ($_POST['action'] == 'updateSortableContent'): // Actualizar los elementos del carrusel
  27. if (!isset($_POST['must_backup'])) // ¿Debemos hacer una copia de seguridad? Por defecto sólo la haremos si se ha guardado manualmente el contenido, es decir, haciendo clic en el botón "Guardar" en lugar de arrastrando y soltando elementos. Para evitar excesivas copias de seguridad, más que nada
  28. {
  29. $_POST['must_backup'] = 'no';
  30. $should_save_a_backup = false;
  31. }
  32. foreach ($_POST as $key => $value) // Iteramos sobre el contenido recibido
  33. {
  34. if (($key != 'action' && $key != 'internal_type' && $key != 'carousel_id' && $key != 'must_backup') && $_POST['internal_type'] == 'serialized') // No es el campo de accion y el indicador es de serializado
  35. {
  36. $temp_printable = base64_decode($_POST[$key]); // Primer paso de la decodificación de los parámetros enviados
  37. $temp_printable = explode('&', $temp_printable); // Segundo paso, ahora tenemos todos los nuevos elementos en una matriz
  38. foreach ($temp_printable as $temp_key => $temp_value) // Iteramos sobre el nuevo contenido del carrusel
  39. {
  40. $temp_value = explode('=', $temp_value); // Separamos campos y valores (originalmente CAMPO=VALOR, ahora matriz[0]=CAMPO, matriz[1]=VALOR
  41. $array_keys = array('category_id', 'posts_order', 'posts_number', 'show_in_loop', 'order', 'type', 'post_title', 'desc', 'url_image', 'url_video', 'url_link', 'wp_carousel_ei_url', 'wp_carousel_ei_id'); // Los nombres de los campos del formulario enviado, es decir, los valores de CAMPO
  42. $array_names = array('ID', 'POSTS_ORDER', 'POSTS_NUMBER', 'SHOW', 'ORDER', 'TYPE', 'TITLE', 'DESC', 'IMAGE_URL', 'VIDEO_URL', 'LINK_URL', 'WP_CAROUSEL_EI_URL', 'WP_CAROUSEL_EI_ID'); // Los nombres de los identificadores que se guardarán en la Base de Datos y que utiliza WP Carousel para crear los carruseles
  43. $temp_value[0] = str_replace($array_keys, $array_names, $temp_value[0]); // Cambiamos los nombres originales de los formularios por los identificadores correctos de WP Carousel
  44. $temp_printable[$temp_value[0]] = urldecode($temp_value[1]); // Establecemos los valores de los campos
  45. unset($temp_printable[$temp_key]); // Eliminamos de la matriz contenido sobrante
  46. }
  47. if (!isset($temp_printable['POSTS_NUMBER'])) $temp_printable['POSTS_NUMBER'] = 0; // Establecemos valor por defecto
  48. if (!isset($temp_printable['SHOW'])) $temp_printable['SHOW'] = 0; // Idem que la línea anterior
  49. unset($_POST[$key]); // Eliminamos contenido innecesario
  50. $key_exploded = explode('_', $key); // Analizamos el identificador interno del contenido del carrusel
  51. $key = $key_exploded[1].'_'.$temp_printable['ID'].'_'.$temp_printable['TYPE']; // Lo modificamos para adaptarlo al sistema de identificación que utiliza WP Carousel.
  52. $_POST[$key] = $temp_printable; // Reemplazamos el valor anterior (sin adaptar) por el valor adaptado
  53. }
  54. }
  55. $new_content = $_POST; // Creamos la matriz que contiene el nuevo contenido del carrusel
  56. unset($_POST); // Eliminamos contenido innecesario
  57. unset($new_content['action']); // Eliminamos contenido innecesario
  58. unset($new_content['internal_type']); // Eliminamos contenido innecesario
  59. unset($new_content['carousel_id']); // Eliminamos contenido innecesario
  60. unset($new_content['must_backup']); // Eliminamos contenido innecesario
  61. $updated_content = $new_content; // Guardamos el nuevo contenido en la matriz general de nuevos contenidos
  62. break;
  63. // FIN DEL CASO updateSortableContent
  64. case ($_POST['action'] == 'updateStandardOptions'): // Actualizar las opciones estándar del carrusel (es decir, las dependientes directamente de WP Carousel y no del theme)
  65. $_POST['must_backup'] = 'yes'; // Por defecto guardamos SIEMPRE una copia de seguridad al guardar cambios en las opciones, ya que el guardado manual es el único modo de guardado
  66. $should_save_a_backup = true;
  67. $config = array();
  68. $new_config = base64_decode($_POST['content']); // Primera fase de la descodificar los nuevos valores
  69. $new_config_exploded = explode('&', $new_config); // Segunda fase, ahora tenemos una matriz
  70. if (array_search('use_jcarousel=yes', $new_config_exploded) === false)
  71. {
  72. $new_config_exploded[] = 'use_jcarousel=no'; // Establecemos un valor por defecto
  73. }
  74. if (array_search('vertical_mode=yes', $new_config_exploded) === false)
  75. {
  76. $new_config_exploded[] = 'vertical_mode=no'; // Establecemos un valor por defecto
  77. }
  78. if (array_search('show_arrows=yes', $new_config_exploded) === false)
  79. {
  80. $new_config_exploded[] = 'show_arrows=no'; // Establecemos un valor por defecto
  81. }
  82. if (array_search('loop_mode=yes', $new_config_exploded) === false)
  83. {
  84. $new_config_exploded[] = 'loop_mode=no'; // Establecemos un valor por defecto
  85. }
  86. if (array_search('enable_pagination=yes', $new_config_exploded) === false)
  87. {
  88. $new_config_exploded[] = 'enable_pagination=no'; // Establecemos un valor por defecto
  89. }
  90. foreach ($new_config_exploded as $key => $value) // Iteramos sobre las nuevas opciones
  91. {
  92. $new_option_exploded = explode('=', $value); // Separamos valor y campo
  93. if ($new_option_exploded[1] == 'yes')
  94. {
  95. $new_option_exploded[1] = 1; // Un 'yes' se almacena como un 1
  96. }
  97. if ($new_option_exploded[1] == 'no')
  98. {
  99. $new_option_exploded[1] = 0; // Un 'no' se almacena como un 0
  100. }
  101. $config[strtoupper($new_option_exploded[0])] = urldecode($new_option_exploded[1]); // Guardamos los nuevos valores en la matriz
  102. }
  103. $new_config = $config; // Guardamos la nueva configuración en una nueva matriz
  104. $updated_content = $new_config; // Guardamos el nuevo contenido en la matriz general de nuevos contenidos
  105. unset($config); // Eliminamos contenido innecesario
  106. break;
  107. // FIN DEL CASO updateStandardOptions
  108. case ($_POST['action'] == 'updateThemeOptions'): // Actualizamos las opciones dependientes de cada theme
  109. $_POST['must_backup'] = 'yes'; // Por defecto crearemos una copia de seguridad
  110. $should_save_a_backup = true;
  111. $config = array();
  112. $new_config = base64_decode($_POST['content']); // Primera fase de la descodificación
  113. $new_config_exploded = explode('&', $new_config); // Segunda fase de la descodificación, ahora tenemos una matriz
  114. foreach ($new_config_exploded as $key => $value) // Iteramos sobre los nuevos valores
  115. {
  116. $new_option_exploded = explode('=', $value); // Separamos valor y campo
  117. if (isset($new_option_exploded[0]) && isset($new_option_exploded[1]))
  118. {
  119. if ($new_option_exploded[1] == 'yes')
  120. {
  121. $new_option_exploded[1] = 1; // Un 'yes' equivale a 1
  122. }
  123. $config[strtoupper($new_option_exploded[0])] = urldecode($new_option_exploded[1]); // Guardamos los nuevos valores en la matriz
  124. }
  125. }
  126. $new_theme_config = $config; // Guardamos las nuevas opciones en la matriz correspondiente
  127. $updated_content = $new_theme_config; // Guardamos el nuevo contenido en la matriz general de nuevos contenidos
  128. unset($config); // Eliminamos contenido innecesario
  129. unset($new_config); // Eliminamos la variable $new_config, que ya hemos utilizado, para evitar conflictos con el guardado de opciones estándar
  130. break;
  131. // FIN DEL CASO updateThemeOptions
  132. default: // ERROR, CASO NO RECONOCIDO
  133. ?>
  134. <div class="error">
  135. <p><?php printf('Action can\'t be performed because a correct action indicator has not been sent: update_db.php:%s', __LINE__); ?></p>
  136. </div>
  137. <?php
  138. exit;
  139. break;
  140. endswitch;
  141. /* Calculamos la ruta al archivo wp-blog-header.php */
  142. require_once('wp-carousel-blog-header-loader.php');
  143. /* Comprobamos si podemos cargar el archivo */
  144. if (!is_readable($folder_path . WP_CAROUSEL_WP_BLOG_HEADER_FILE))
  145. {
  146. $wp_carousel_error = true;
  147. ?>
  148. <div class="error">
  149. <p><?php printf('File <code>%s</code> can\'t be read!', $folder_path . WP_CAROUSEL_WP_BLOG_HEADER_FILE); ?></p>
  150. </div>
  151. <?php
  152. $action_sended = 'SAVE-NO-AJAX:'.base64_encode(serialize($updated_content)).':'.$carousel_id;
  153. ?>
  154. <div class="updated fade blue-message">
  155. <p>Click <a href="admin.php?page=edit-carousel-<?php echo $carousel_id; ?>&action=<?php echo $action_sended; ?>&in_mode=<?php echo $action_to_perform; ?>">here</a> to save changes.</p>
  156. </div>
  157. <?php
  158. exit;
  159. }
  160. /* Cargamos el archivo */
  161. echo '<p style="display:none;">';
  162. require_once($folder_path . WP_CAROUSEL_WP_BLOG_HEADER_FILE);
  163. echo '</p>';
  164. /*
  165. Cargamos los archivos del idioma correspondiente
  166. */
  167. $currentLocale = get_locale();
  168. if(!empty($currentLocale))
  169. {
  170. $moFile = dirname(__FILE__) . "/language/" . $currentLocale . ".mo";
  171. if(@file_exists($moFile) && is_readable($moFile)) load_textdomain('wp_carousel', $moFile);
  172. }
  173. /*
  174. Comprobamos que el usuario tiene permisos suficientes para guardar los cambios
  175. */
  176. if (!current_user_can('manage_options'))
  177. {
  178. ?>
  179. <div class="error">
  180. <p>
  181. <?php _e('WP Carousel can\'t confirm that you have an admin account. You are not allowed to perform modifications in the Database for security reasons.', 'wp_carousel'); ?>
  182. </p>
  183. </div>
  184. <?php
  185. exit;
  186. }
  187. /*
  188. Comprobamos que existe una ID del carrusel y alertamos de problemas en caso contrario
  189. */
  190. if (!isset($carousel_id) && isset($_POST['carousel_id']))
  191. {
  192. $carousel_id = $_POST['carousel_id'];
  193. }
  194. if (!isset($carousel_id))
  195. {
  196. $wp_carousel_error = true;
  197. ?>
  198. <div class="error">
  199. <p>
  200. <?php printf(__('There was an error, please, report it in the forum and attach this error message:', 'wp_carousel'), $folder_path . WP_CAROUSEL_WP_BLOG_HEADER_FILE); ?>
  201. </p>
  202. <p>
  203. <?php printf('%s', base64_encode(serialize($_POST)).' (file: update_db.php - '.__LINE__.')'); ?>
  204. </p>
  205. </div>
  206. <?php
  207. exit;
  208. }
  209. /*
  210. Cargamos el contenido original del carrusel
  211. */
  212. $wp_carousel_content = maybe_unserialize(get_option(WP_CAROUSEL_ITEMS_TABLE)); // Obtenemos el contenido de todos los carruseles
  213. $carousel_content = $wp_carousel_content[$carousel_id]; // Centramos el contenido en el del carrusel actual
  214. $wp_carousel_config = maybe_unserialize(get_option(WP_CAROUSEL_CONFIG_TABLE)); // Obtenemos la configuración de todos los carruseles
  215. $carousel_config = $wp_carousel_config[$carousel_id]; // Centramos la configuración en la del carrusel actual
  216. /*
  217. Actualizamos las matrices para que reemplacen el contenido antiguo por el nuevo y mantengan el viejo contenido no actualizado intacto
  218. */
  219. switch (true):
  220. case (isset($new_config)): // Se han actualizado las opciones estándar
  221. $final_config = $carousel_config; // Guardamos las opciones previas en una nueva matriz que manipularemos y convertiremos en las opciones antiguas actualizadas
  222. foreach ($final_config as $fc_key => $fc_value) // Iteramos sobre todos los índices de las opciones antiguas
  223. {
  224. if (isset($new_config[$fc_key]))
  225. {
  226. $final_config[$fc_key] = $new_config[$fc_key];
  227. }
  228. }
  229. foreach ($new_config as $nc_key => $nc_value) // Hacemos lo mismo que antes, sólo que con las opciones nuevas, por si hemos dejado algo por modificar
  230. {
  231. if (!isset($final_config[$nc_key]))
  232. {
  233. $final_config[$nc_key] = $nc_value;
  234. }
  235. }
  236. break;
  237. case (isset($new_theme_config)): // En el caso de las opciones del theme, éstas siempre reemplazan a las anteriores
  238. $final_config = $carousel_config;
  239. $final_config['THEME_SETTINGS'] = $new_theme_config;
  240. break;
  241. default: // No se ha hecho nada de nada, es decir, ha habido un error
  242. case (isset($new_content)): // Se ha actualizado el contenido, no es necesario hacer nada en este caso
  243. break;
  244. endswitch;
  245. /*
  246. Generamos el backup, si es necesario
  247. */
  248. if ($should_save_a_backup && WP_CAROUSEL_AUTOSAVE_BACKUPS) // Comprobamos que tenemos que hacer una copia de seguridad
  249. {
  250. $backup_structure = maybe_unserialize(get_option(WP_CAROUSEL_BACKUP_TABLE)); // Obtenemos la matriz de copias de seguridad
  251. if (!isset($backup_structure[$carousel_id])) // Si no hay ningún backup anterior del carrusel actual, creamos la matriz correspondiente a este carrusel
  252. {
  253. $backup_structure[$carousel_id] = array();
  254. }
  255. $backup_structure_current_carousel = $backup_structure[$carousel_id]; // Nos centramos en el carrusel actual
  256. // Creamos una nueva copia de seguridad
  257. switch (true):
  258. case (isset($new_content)): // Se ha actualizado el contenido, respaldamos sólo eso
  259. $backup_structure_current_carousel[time()] = array(
  260. 'items' => serialize($new_content),
  261. 'config' => serialize($carousel_config)
  262. );
  263. break;
  264. case (isset($new_config) && isset($final_config)): // Se han actualizado las opciones estándar, respaldamos sólo eso
  265. case (isset($new_theme_config) && isset($final_config)): // Se han actualizado las opciones del theme, respaldamos sólo eso
  266. $backup_structure_current_carousel[time()] = array(
  267. 'items' => serialize($carousel_content),
  268. 'config' => serialize($final_config)
  269. );
  270. break;
  271. endswitch;
  272. $backup_structure[$carousel_id] = $backup_structure_current_carousel;
  273. update_option(WP_CAROUSEL_BACKUP_TABLE, serialize($backup_structure));
  274. $had_backup = true;
  275. }
  276. /*
  277. Ahora guardamos los cambios
  278. */
  279. switch (true):
  280. case (isset($new_content)): // Se ha actualizado el contenido, guardamos sólo eso
  281. $wp_carousel_content[$carousel_id] = $new_content; // Reemplazamos el contenido anterior por el nuevo contenido
  282. update_option(WP_CAROUSEL_ITEMS_TABLE, serialize($wp_carousel_content));
  283. break;
  284. case (isset($new_config) && isset($final_config)): // Se han actualizado las opciones estándar, guardamos sólo eso
  285. case (isset($new_theme_config) && isset($final_config)): // Se han actualizado las opciones del theme, guardamos sólo eso
  286. $wp_carousel_config[$carousel_id] = $final_config;
  287. update_option(WP_CAROUSEL_CONFIG_TABLE, serialize($wp_carousel_config));
  288. break;
  289. endswitch;
  290. /*
  291. Comprobamos errores y mostramos mensajes finales
  292. */
  293. if (!$wp_carousel_error)
  294. {
  295. ?><div class="updated changes_saved green-message"><p><?php _e('Changes saved', 'wp_carousel'); ?></p></div><?php
  296. if ($had_backup)
  297. {
  298. ?><div class="updated changes_saved green-message"><p><?php _e('A Backup has been saved', 'wp_carousel'); ?></p></div><?php
  299. }
  300. }
  301. else
  302. {
  303. ?><div class="error"><p><?php _e('There was an error!', 'wp_carousel'); ?></p></div><?php
  304. }
  305. exit;
  306. ?>