PageRenderTime 39ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/htdocs/wp-content/plugins/sitepress-multilingual-cms/inc/upgrade-functions/upgrade-2.0.0.php

https://bitbucket.org/dkrzos/phc
PHP | 266 lines | 205 code | 44 blank | 17 comment | 29 complexity | 747688f1aa9a844cac03a1864cf1acac MD5 | raw file
Possible License(s): GPL-2.0
  1. <?php
  2. function icl_upgrade_2_0_0_steps($step, $stepper){
  3. global $wpdb, $sitepress, $wp_post_types, $sitepress_settings;
  4. if(!isset($sitepress)) $sitepress = new SitePress;
  5. $TranslationManagement = new TranslationManagement;
  6. define('ICL_TM_DISABLE_ALL_NOTIFICATIONS', true); // make sure no notifications are being sent
  7. //if(defined('icl_upgrade_2_0_0_runonce')){
  8. // return;
  9. //}
  10. //define('icl_upgrade_2_0_0_runonce', true);
  11. // fix source_language_code
  12. // assume that the lowest element_id is the source language
  13. ini_set('max_execution_time', 300);
  14. $post_types = array_keys($wp_post_types);
  15. foreach($post_types as $pt){
  16. $types[] = 'post_' . $pt;
  17. }
  18. $temp_upgrade_data = get_option('icl_temp_upgrade_data',
  19. array('step' => 0, 'offset' => 0));
  20. switch($step) {
  21. case 1:
  22. // if the tables are missing, call the plugin activation routine
  23. $table_name = $wpdb->prefix.'icl_translation_status';
  24. if($wpdb->get_var("SHOW TABLES LIKE '{$table_name}'") != $table_name){
  25. icl_sitepress_activate();
  26. }
  27. $wpdb->query("ALTER TABLE `{$wpdb->prefix}icl_translations` CHANGE `element_type` `element_type` VARCHAR( 32 ) NOT NULL DEFAULT 'post_post'");
  28. $wpdb->query("ALTER TABLE `{$wpdb->prefix}icl_translations` CHANGE `element_id` `element_id` BIGINT( 20 ) NULL DEFAULT NULL ");
  29. // fix source_language_code
  30. // all source documents must have null
  31. $wpdb->query($wpdb->prepare("UPDATE {$wpdb->prefix}icl_translations SET source_language_code = NULL
  32. WHERE element_type IN('".join("','", $types)."') AND source_language_code = '' AND language_code='%s'", $sitepress->get_default_language()));
  33. // get translated documents with missing source language
  34. $res = $wpdb->get_results($wpdb->prepare("
  35. SELECT translation_id, trid, language_code
  36. FROM {$wpdb->prefix}icl_translations
  37. WHERE (source_language_code = '' OR source_language_code IS NULL)
  38. AND element_type IN('".join("','", $types)."')
  39. AND language_code <> %s
  40. ", $sitepress->get_default_language()
  41. ));
  42. foreach($res as $row){
  43. $wpdb->query($wpdb->prepare("UPDATE {$wpdb->prefix}icl_translations SET source_language_code = '%s' WHERE translation_id=%d", $sitepress->get_default_language(), $row->translation_id));
  44. }
  45. $temp_upgrade_data['step'] = 2;
  46. update_option('icl_temp_upgrade_data', $temp_upgrade_data);
  47. return array('message' => __('Processing translations...', 'sitepress'));
  48. break;
  49. case 2:
  50. $limit = 100;
  51. $offset = $temp_upgrade_data['offset'];
  52. $processing = FALSE;
  53. //loop existing translations
  54. $res = mysql_query("SELECT * FROM {$wpdb->prefix}icl_translations WHERE element_type IN('".join("','", $types)."') AND source_language_code IS NULL LIMIT " . $limit . " OFFSET " . $offset);
  55. while($row = mysql_fetch_object($res)){
  56. $processing = TRUE;
  57. // grab translations
  58. $translations = $sitepress->get_element_translations($row->trid, $row->element_type);
  59. $md5 = 0;
  60. $table_name = $wpdb->prefix.'icl_node';
  61. if($wpdb->get_var("SHOW TABLES LIKE '{$table_name}'") == $table_name){
  62. list($md5, $links_fixed) = $wpdb->get_row($wpdb->prepare("
  63. SELECT md5, links_fixed FROM {$wpdb->prefix}icl_node
  64. WHERE nid = %d
  65. ", $row->element_id), ARRAY_N);
  66. }
  67. if(!$md5){
  68. $md5 = $TranslationManagement->post_md5($row->element_id);
  69. }
  70. $translation_package = $TranslationManagement->create_translation_package($row->element_id);
  71. foreach($translations as $lang => $t){
  72. if(!$t->original){
  73. // determine service and status
  74. $service = 'local';
  75. $status = 10;
  76. $needs_update = 0;
  77. list($rid, $status, $current_md5) = $wpdb->get_row($wpdb->prepare("
  78. SELECT c.rid, n.status , c.md5
  79. FROM {$wpdb->prefix}icl_content_status c
  80. JOIN {$wpdb->prefix}icl_core_status n ON c.rid = n.rid
  81. WHERE c.nid = %d AND target = %s
  82. ORDER BY rid DESC
  83. LIMIT 1
  84. ", $row->element_id, $lang), ARRAY_N);
  85. if($rid){
  86. if($current_md5 != $md5){
  87. $needs_update = 1;
  88. }
  89. if($status == 3){
  90. $status = 10;
  91. }else{
  92. $status = 2;
  93. }
  94. $service = 'icanlocalize';
  95. foreach($sitepress_settings['icl_lang_status'] as $lpair){
  96. if($lpair['from'] == $row->language_code && $lpair['to'] == $lang && isset($lpair['translators'][0]['id'])){
  97. $translator_id = $lpair['translators'][0]['id'];
  98. break;
  99. }
  100. }
  101. }else{
  102. $status = 10;
  103. $translator_id = $wpdb->get_var($wpdb->prepare("SELECT post_author FROM {$wpdb->posts} WHERE ID=%d", $t->element_id));
  104. $tlp = get_user_meta($translator_id, $wpdb->prefix.'language_pairs', true);
  105. $tlp[$row->language_code][$lang] = 1;
  106. $TranslationManagement->edit_translator($translator_id, $tlp);
  107. }
  108. // add translation_status record
  109. list($newrid, $update) = $TranslationManagement->update_translation_status(array(
  110. 'translation_id' => $t->translation_id,
  111. 'status' => $status,
  112. 'translator_id' => $translator_id,
  113. 'needs_update' => $needs_update,
  114. 'md5' => $md5,
  115. 'translation_service' => $service,
  116. 'translation_package' => serialize($translation_package),
  117. 'links_fixed' => intval($links_fixed)
  118. ));
  119. $job_id = $TranslationManagement->add_translation_job($newrid, $translator_id , $translation_package);
  120. if($status == 10){
  121. $post = get_post($t->element_id);
  122. $TranslationManagement->save_job_fields_from_post($job_id, $post);
  123. }
  124. }
  125. }
  126. }
  127. if ($processing) {
  128. update_option('icl_temp_upgrade_data', array('step' => 2, 'offset' => intval($offset+100)));
  129. $stepper->setNextStep(2);
  130. } else {
  131. update_option('icl_temp_upgrade_data', array('step' => 3, 'offset' => 99999999999999999999));
  132. }
  133. $message = $processing ? __('Processing translations...', 'sitepress') : __('Finalizing upgrade...', 'sitepress');
  134. return array('message' => $message);
  135. break;
  136. case 3:
  137. // removing the plugins text table; importing data into a Sitepress setting
  138. $results = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}icl_plugins_texts");
  139. if(!empty($results)){
  140. foreach($results as $row){
  141. $cft[$row->attribute_name] = $row->translate + 1;
  142. }
  143. $iclsettings['translation-management']['custom_fields_translation'] = $cft;
  144. $sitepress->save_settings($iclsettings);
  145. mysql_query("DROP TABLE {$wpdb->prefix}icl_plugins_texts");
  146. }
  147. $iclsettings['language_selector_initialized'] = 1;
  148. if(get_option('_force_mp_post_http')){
  149. $iclsettings['troubleshooting_options']['http_communication'] = intval(get_option('_force_mp_post_http'));
  150. delete_option('_force_mp_post_http');
  151. }
  152. // set default translators
  153. if (isset($sitepress_settings['icl_lang_status'])) {
  154. foreach($sitepress_settings['icl_lang_status'] as $lpair){
  155. if(!empty($lpair['translators'])){
  156. $iclsettings['default_translators'][$lpair['from']][$lpair['to']] = array('id'=>$lpair['translators'][0]['id'], 'type'=>'icanlocalize');
  157. }
  158. }
  159. }
  160. $sitepress->save_settings($iclsettings);
  161. $iclsettings['migrated_2_0_0'] = 1;
  162. $sitepress->save_settings($iclsettings);
  163. delete_option('icl_temp_upgrade_data');
  164. return array('message' => __('Done', 'sitepress'), 'completed' => 1);
  165. break;
  166. default:
  167. return array('error' => __('Missing step', 'sitepress'), 'stop' => 1);
  168. }
  169. }
  170. // $iclsettings defined in upgrade.php
  171. if(empty($iclsettings['migrated_2_0_0'])){
  172. wp_enqueue_script('icl-stepper', ICL_PLUGIN_URL . '/inc/upgrade-functions/2.0.0/stepper.js', array('jquery'));
  173. add_filter('admin_notices', 'icl_migrate_2_0_0');
  174. add_action('icl_ajx_custom_call', 'icl_ajx_upgrade_2_0_0', 1, 2);
  175. }
  176. function icl_migrate_2_0_0() {
  177. $txt = get_option('icl_temp_upgrade_data', FALSE) ? __('Resume Upgrade Process', 'sitepress') : __('Run Upgrade Process', 'sitepress');
  178. echo '<div class="message error" id="icl-migrate"><p><strong>'.__('WPML requires database upgrade', 'sitepress').'</strong></p>'
  179. .'<p>' . __('This normally takes a few seconds, but may last up to several minutes of very large databases.', 'sitepress') . '</p>'
  180. . '<p><a href="index.php?icl_ajx_action=wpml_upgrade_2_0_0" style="" id="icl-migrate-start">' . $txt . '</a></p>'
  181. . '<div id="icl-migrate-progress" style="display:none; margin: 10px 0 20px 0;">'
  182. . '</div></div>';
  183. }
  184. function icl_ajx_upgrade_2_0_0($call, $request){
  185. if($call == 'wpml_upgrade_2_0_0'){
  186. $error = 0;
  187. $completed = 0;
  188. $stop = 0;
  189. $message = __('Starting the upgrade process...', 'sitepress');
  190. include_once ICL_PLUGIN_PATH . '/inc/upgrade-functions/2.0.0/stepper.php';
  191. include_once ICL_PLUGIN_PATH . '/inc/upgrade-functions/upgrade-2.0.0.php';
  192. $temp_upgrade_data = get_option('icl_temp_upgrade_data',
  193. array('step' => 0, 'offset' => 0));
  194. $step = isset($request['step']) ? $request['step'] : $temp_upgrade_data['step'];
  195. $migration = new Icl_Stepper($step);
  196. $migration->registerSteps(
  197. 'icl_upgrade_2_0_0_steps',
  198. 'icl_upgrade_2_0_0_steps',
  199. 'icl_upgrade_2_0_0_steps');
  200. if (isset($request['init'])) {
  201. echo json_encode(array(
  202. 'error' => $error,
  203. 'output' => $migration->render(),
  204. 'step' => $migration->getNextStep(),
  205. 'message' => __('Creating new tables...', 'sitepress'),
  206. 'stop' => $stop,
  207. ));
  208. exit;
  209. }
  210. $data = $migration->init();
  211. @extract($data, EXTR_OVERWRITE);
  212. echo json_encode(array(
  213. 'error' => $error,
  214. 'completed' => $completed,
  215. 'message' => $message,
  216. 'step' => $migration->getNextStep(),
  217. 'barWidth' => $migration->barWidth(),
  218. 'stop' => $stop,
  219. ));
  220. }
  221. }
  222. ?>