Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

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