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

/wp-content/plugins/qtranslate/qtranslate_wphacks.php

https://gitlab.com/Blueprint-Marketing/interoccupy.net
PHP | 351 lines | 322 code | 6 blank | 23 comment | 8 complexity | f6f8fcb1193b590a9072ca65affa7c3d MD5 | raw file
  1. <?php // encoding: utf-8
  2. /* Copyright 2008 Qian Qin (email : mail@qianqin.de)
  3. This program is free software; you can redistribute it and/or modify
  4. it under the terms of the GNU General Public License as published by
  5. the Free Software Foundation; either version 2 of the License, or
  6. (at your option) any later version.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU General Public License for more details.
  11. You should have received a copy of the GNU General Public License
  12. along with this program; if not, write to the Free Software
  13. Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  14. */
  15. /* Modifications Hacks to get Wordpress work the way it should */
  16. // modifys term form to support multilingual content
  17. function qtrans_modifyTermForm($id, $name, $term) {
  18. global $q_config;
  19. echo "<script type=\"text/javascript\">\n// <![CDATA[\r\n";
  20. // ' workaround
  21. if(is_object($term)&&isset($term->name)) {
  22. $termname = $term->name;
  23. } else {
  24. $termname = "";
  25. }
  26. // create input fields for each language
  27. foreach($q_config['enabled_languages'] as $language) {
  28. if(isset($_GET['action']) && $_GET['action']=='edit') {
  29. echo qtrans_insertTermInput2($id, $name, $termname, $language);
  30. } else {
  31. echo qtrans_insertTermInput($id, $name, $termname, $language);
  32. }
  33. }
  34. // hide real category text
  35. echo "ins.style.display='none';\n";
  36. echo "// ]]>\n</script>\n";
  37. }
  38. function qtrans_modifyTermFormFor($term) {
  39. qtrans_modifyTermForm('name', __('Name'), $term);
  40. qtrans_modifyTermForm('tag-name', __('Name'), $term);
  41. }
  42. // Modifys TinyMCE to edit multilingual content
  43. function qtrans_modifyRichEditor($old_content) {
  44. global $q_config;
  45. $init_editor = true;
  46. if($GLOBALS['wp_version'] != QT_SUPPORTED_WP_VERSION) {
  47. if(!(isset($_REQUEST['qtranslateincompatiblemessage'])&&$_REQUEST['qtranslateincompatiblemessage']=="shown")) {
  48. echo '<div class="updated" id="qtrans_imsg">'.__('The qTranslate Editor has disabled itself because it hasn\'t been tested with your Wordpress version yet. This is done to prevent Wordpress from malfunctioning. You can reenable it by <a href="javascript:qtrans_editorInit();" title="Activate qTranslate" id="qtrans_imsg_link">clicking here</a> (may cause <b>data loss</b>! Use at own risk!). To remove this message permanently, please update qTranslate to the <a href="http://www.qianqin.de/qtranslate/download/">corresponding version</a>.', 'qtranslate').'</div>';
  49. }
  50. $init_editor = false;
  51. }
  52. // save callback hook
  53. preg_match("/<textarea[^>]*id=\"([^']+)\"/",$old_content,$matches);
  54. $id = $matches[1];
  55. preg_match("/cols=\"([^\"]+)\"/",$old_content,$matches);
  56. $cols = $matches[1];
  57. // don't do anything if not editing the content
  58. if($id!="content") return $old_content;
  59. // don't do anything to the editor if it's not rich
  60. if(!user_can_richedit()) {
  61. //echo '<p class="updated">'.__('The qTranslate Editor could not be loaded because WYSIWYG/TinyMCE is not activated in your profile.').'</p>';
  62. return $old_content;
  63. }
  64. // remove wpautop
  65. if('html' != wp_default_editor()) {
  66. remove_filter('the_editor_content', 'wp_richedit_pre');
  67. }
  68. $content = "";
  69. $content_append = "";
  70. // create editing field for selected languages
  71. $qt_textarea = '<textarea id="qtrans_textarea_'.$id.'" name="qtrans_textarea_'.$id.'" tabindex="2" cols="'.$cols.'" style="display:none" onblur="qtrans_save(this.value);"></textarea>';
  72. $old_content = preg_replace('#(<textarea[^>]*>.*</textarea>)#', '$1'.$qt_textarea, $old_content);
  73. // do some crazy js to alter the admin view
  74. $content .="<script type=\"text/javascript\">\n// <![CDATA[\n";
  75. // include needed js functions
  76. $content .= $q_config['js']['qtrans_is_array'];
  77. $content .= $q_config['js']['qtrans_xsplit'];
  78. $content .= $q_config['js']['qtrans_split'];
  79. $content .= $q_config['js']['qtrans_integrate'];
  80. $content .= $q_config['js']['qtrans_use'];
  81. $content .= $q_config['js']['qtrans_assign'];
  82. $content .= $q_config['js']['qtrans_save'];
  83. $content .= $q_config['js']['qtrans_integrate_title'];
  84. $content .= $q_config['js']['qtrans_get_active_language'];
  85. $content .= $q_config['js']['qtrans_hook_on_tinyMCE'];
  86. $content .="function qtrans_editorInit1() {\n";
  87. $content .= $q_config['js']['qtrans_switch'];
  88. // insert language, visual and html buttons
  89. $el = qtrans_getSortedLanguages();
  90. foreach($el as $language) {
  91. $content .= qtrans_insertTitleInput($language);
  92. }
  93. $el = qtrans_getSortedLanguages(true);
  94. foreach($el as $language) {
  95. $content .= qtrans_createEditorToolbarButton($language, $id);
  96. }
  97. $content = apply_filters('qtranslate_toolbar', $content);
  98. // hide old title bar
  99. $content .= "document.getElementById('titlediv').style.display='none';\n";
  100. $content .="}\n";
  101. $content .="// ]]>\n</script>\n";
  102. $content_append .="<script type=\"text/javascript\">\n// <![CDATA[\n";
  103. $content_append .="function qtrans_editorInit2() {\n";
  104. // show default language tab
  105. $content_append .="document.getElementById('qtrans_select_".$q_config['default_language']."').className='wp-switch-editor switch-tmce switch-html';\n";
  106. // show default language
  107. $content_append .="var text = document.getElementById('".$id."').value;\n";
  108. $content_append .="qtrans_assign('qtrans_textarea_".$id."',qtrans_use('".$q_config['default_language']."',text));\n";
  109. $content_append .="}\n";
  110. $content_append .="function qtrans_editorInit3() {\n";
  111. // make tinyMCE and mediauploader get the correct data
  112. $content_append .=$q_config['js']['qtrans_tinyMCEOverload'];
  113. $content_append .=$q_config['js']['qtrans_wpActiveEditorOverload'];
  114. $content_append .="}\n";
  115. $content_append .=$q_config['js']['qtrans_editorInit'];
  116. if($init_editor) {
  117. $content_append .=$q_config['js']['qtrans_wpOnload'];
  118. } else {
  119. $content_append .="var qtmsg = document.getElementById('qtrans_imsg');\n";
  120. $content_append .="var et = document.getElementById('wp-".$id."-editor-tools');\n";
  121. $content_append .="et.parentNode.insertBefore(qtmsg, et);\n";
  122. }
  123. $content_append = apply_filters('qtranslate_modify_editor_js', $content_append);
  124. $content_append .="// ]]>\n</script>\n";
  125. return $content.$old_content.$content_append;
  126. }
  127. function qtrans_modifyExcerpt() {
  128. global $q_config;
  129. echo "<script type=\"text/javascript\">\n// <![CDATA[\n";
  130. echo "if(jQuery('#excerpt').size()>0) {";
  131. echo $q_config['js']['qtrans_is_array'];
  132. echo $q_config['js']['qtrans_xsplit'];
  133. echo $q_config['js']['qtrans_split'];
  134. echo $q_config['js']['qtrans_integrate'];
  135. echo $q_config['js']['qtrans_switch_postbox'];
  136. echo $q_config['js']['qtrans_use'];
  137. $el = qtrans_getSortedLanguages();
  138. foreach($el as $language) {
  139. echo qtrans_createTitlebarButton('postexcerpt', $language, 'excerpt', 'qtrans_switcher_postexcerpt_'.$language);
  140. echo qtrans_createTextArea('postexcerpt', $language, 'excerpt', 'qtrans_switcher_postexcerpt_'.$language);
  141. }
  142. echo "qtrans_switch_postbox('postexcerpt','excerpt','".$q_config['default_language']."');";
  143. echo "jQuery('#excerpt').hide();";
  144. echo "}";
  145. echo "// ]]>\n</script>\n";
  146. }
  147. function qtrans_createTitlebarButton($parent, $language, $target, $id) {
  148. global $q_config;
  149. $html = "
  150. jQuery('#".$parent." .handlediv').after('<div class=\"qtranslate_lang_div\" id=\"".$id."\"><img alt=\"".$language."\" title=\"".$q_config['language_name'][$language]."\" src=\"".WP_CONTENT_URL.'/'.$q_config['flag_location'].$q_config['flag'][$language]."\" /></div>');
  151. jQuery('#".$id."').click(function() {qtrans_switch_postbox('".$parent."','".$target."','".$language."');});
  152. ";
  153. return $html;
  154. }
  155. function qtrans_createTextArea($parent, $language, $target, $id) {
  156. global $q_config;
  157. $html = "
  158. jQuery('#".$target."').after('<textarea name=\"qtrans_textarea_".$target."_".$language."\" id=\"qtrans_textarea_".$target."_".$language."\"></textarea>');
  159. jQuery('#qtrans_textarea_".$target."_".$language."').attr('cols', jQuery('#".$target."').attr('cols'));
  160. jQuery('#qtrans_textarea_".$target."_".$language."').attr('rows', jQuery('#".$target."').attr('rows'));
  161. jQuery('#qtrans_textarea_".$target."_".$language."').attr('tabindex', jQuery('#".$target."').attr('tabindex'));
  162. jQuery('#qtrans_textarea_".$target."_".$language."').blur(function() {qtrans_switch_postbox('".$parent."','".$target."',false);});
  163. jQuery('#qtrans_textarea_".$target."_".$language."').val(qtrans_use('".$language."',jQuery('#".$target."').val()));
  164. ";
  165. return $html;
  166. }
  167. function qtrans_insertTermInput($id,$name,$term,$language){
  168. global $q_config;
  169. $html ="
  170. var il = document.getElementsByTagName('input');
  171. var d = document.createElement('div');
  172. var l = document.createTextNode('".$name." (".$q_config['language_name'][$language].")');
  173. var ll = document.createElement('label');
  174. var i = document.createElement('input');
  175. var ins = null;
  176. for(var j = 0; j < il.length; j++) {
  177. if(il[j].id=='".$id."') {
  178. ins = il[j];
  179. break;
  180. }
  181. }
  182. i.type = 'text';
  183. i.id = i.name = ll.htmlFor ='qtrans_term_".$language."';
  184. ";
  185. if(isset($q_config['term_name'][$term][$language])) {
  186. $html .="
  187. i.value = '".addslashes(htmlspecialchars_decode($q_config['term_name'][$term][$language], ENT_NOQUOTES))."';
  188. ";
  189. } else {
  190. $html .="
  191. i.value = ins.value;
  192. ";
  193. }
  194. if($language == $q_config['default_language']) {
  195. $html .="
  196. i.onchange = function() {
  197. var il = document.getElementsByTagName('input');
  198. var ins = null;
  199. for(var j = 0; j < il.length; j++) {
  200. if(il[j].id=='".$id."') {
  201. ins = il[j];
  202. break;
  203. }
  204. }
  205. ins.value = document.getElementById('qtrans_term_".$language."').value;
  206. };
  207. ";
  208. }
  209. $html .="
  210. ins = ins.parentNode;
  211. d.className = 'form-field form-required';
  212. ll.appendChild(l);
  213. d.appendChild(ll);
  214. d.appendChild(i);
  215. ins.parentNode.insertBefore(d,ins);
  216. ";
  217. return $html;
  218. }
  219. function qtrans_insertTermInput2($id,$name,$term,$language){
  220. global $q_config;
  221. $html ="
  222. var tr = document.createElement('tr');
  223. var th = document.createElement('th');
  224. var ll = document.createElement('label');
  225. var l = document.createTextNode('".$name." (".$q_config['language_name'][$language].")');
  226. var td = document.createElement('td');
  227. var i = document.createElement('input');
  228. var ins = document.getElementById('".$id."');
  229. i.type = 'text';
  230. i.id = i.name = ll.htmlFor ='qtrans_term_".$language."';
  231. ";
  232. if(isset($q_config['term_name'][$term][$language])) {
  233. $html .="
  234. i.value = '".addslashes(htmlspecialchars_decode($q_config['term_name'][$term][$language], ENT_QUOTES))."';
  235. ";
  236. } else {
  237. $html .="
  238. i.value = ins.value;
  239. ";
  240. }
  241. if($language == $q_config['default_language']) {
  242. $html .="
  243. i.onchange = function() {
  244. var il = document.getElementsByTagName('input');
  245. var ins = null;
  246. for(var j = 0; j < il.length; j++) {
  247. if(il[j].id=='".$id."') {
  248. ins = il[j];
  249. break;
  250. }
  251. }
  252. ins.value = document.getElementById('qtrans_term_".$language."').value;
  253. };
  254. ";
  255. }
  256. $html .="
  257. ins = ins.parentNode.parentNode;
  258. tr.className = 'form-field form-required';
  259. th.scope = 'row';
  260. th.vAlign = 'top';
  261. ll.appendChild(l);
  262. th.appendChild(ll);
  263. tr.appendChild(th);
  264. td.appendChild(i);
  265. tr.appendChild(td);
  266. ins.parentNode.insertBefore(tr,ins);
  267. ";
  268. return $html;
  269. }
  270. function qtrans_insertTitleInput($language){
  271. global $q_config;
  272. $html ="
  273. var td = document.getElementById('titlediv');
  274. var qtd = document.createElement('div');
  275. var h = document.createElement('h3');
  276. var l = document.createTextNode('".__("Title", 'qtranslate')." (".$q_config['language_name'][$language].")');
  277. var tw = document.createElement('div');
  278. var ti = document.createElement('input');
  279. var slug = document.getElementById('edit-slug-box');
  280. ti.type = 'text';
  281. ti.id = 'qtrans_title_".$language."';
  282. ti.tabIndex = '1';
  283. ti.value = qtrans_use('".$language."', document.getElementById('title').value);
  284. ti.onchange = qtrans_integrate_title;
  285. ti.className = 'qtrans_title_input';
  286. h.className = 'qtrans_title';
  287. tw.className = 'qtrans_title_wrap';
  288. qtd.className = 'postarea';
  289. h.appendChild(l);
  290. tw.appendChild(ti);
  291. qtd.appendChild(h);
  292. qtd.appendChild(tw);";
  293. if($q_config['default_language'] == $language)
  294. $html.="if(slug) qtd.appendChild(slug);";
  295. $html.="
  296. td.parentNode.insertBefore(qtd,td);
  297. ";
  298. return $html;
  299. }
  300. function qtrans_createEditorToolbarButton($language, $id, $js_function = 'switchEditors.go', $label = ''){
  301. global $q_config;
  302. $html = "
  303. var bc = document.getElementById('wp-".$id."-editor-tools');
  304. var mb = document.getElementById('wp-".$id."-media-buttons');
  305. var ls = document.createElement('a');
  306. var l = document.createTextNode('".(($label==='')?$q_config['language_name'][$language]:$label)."');
  307. ls.id = 'qtrans_select_".$language."';
  308. ls.className = 'wp-switch-editor';
  309. ls.onclick = function() { ".$js_function."('".$id."','".$language."'); };
  310. ls.appendChild(l);
  311. bc.insertBefore(ls,mb);
  312. ";
  313. return $html;
  314. }
  315. ?>