mudzakkir

qtranslate_hooks_final

Dec 30th, 2012
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.27 KB | None | 0 0
  1. <?php
  2.  
  3. // encoding: utf-8
  4.  
  5. /* Copyright 2008Qian Qin(email : [email protected])
  6.  
  7. This program is free software; you can redistribute it and/or modify
  8. it under the terms of the GNU General Public License as published by
  9. the Free Software Foundation; either version 2 of the License, or
  10. (at your option) any later version.
  11.  
  12. This program is distributed in the hope that it will be useful,
  13. but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
  15. GNU General Public License for more details.
  16.  
  17. You should have received a copy of the GNU General Public License
  18. along with this program; if not, write to the Free Software
  19. Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA02110-1301USA
  20. */
  21.  
  22. /* qTranslate Hooks */
  23.  
  24. function qtrans_header() {
  25. global $q_config;
  26. echo "\n<meta http-equiv=\"Content-Language\" content=\"" . str_replace('_', '-', $q_config['locale'][$q_config['language']]) . "\" />\n";
  27. $css = "<style type=\"text/css\" media=\"screen\">\n";
  28. $css .=".qtrans_flag span { display:none }\n";
  29. $css .=".qtrans_flag { height:12px; width:18px; display:block }\n";
  30. $css .=".qtrans_flag_and_text { padding-left:20px }\n";
  31. $baseurl = WP_CONTENT_URL;
  32. if (isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == '1' || $_SERVER['HTTPS'] == 'on')) {
  33. $baseurl = preg_replace('#^http://#', 'https://', $baseurl);
  34. }
  35. foreach ($q_config['enabled_languages'] as $language) {
  36. $css .=".qtrans_flag_" . $language . " { background:url(" . $baseurl . '/' . $q_config['flag_location'] . $q_config['flag'][$language] . ") no-repeat }\n";
  37. }
  38. $css .="</style>\n";
  39. echo apply_filters('qtranslate_header_css', $css);
  40. // skip the rest if 404
  41. if (is_404())
  42. return;
  43. // set links to translations of current page
  44. foreach ($q_config['enabled_languages'] as $language) {
  45. if ($language != qtrans_getLanguage())
  46. echo '<link hreflang="' . $language . '" href="' . qtrans_convertURL('', $language) . '" rel="alternate" />' . "\n";
  47. }
  48. }
  49.  
  50. function qtrans_localeForCurrentLanguage($locale) {
  51. global $q_config;
  52. // try to figure out the correct locale
  53. $locale = array();
  54. $locale[] = $q_config['locale'][$q_config['language']] . ".utf8";
  55. $locale[] = $q_config['locale'][$q_config['language']] . "@euro";
  56. $locale[] = $q_config['locale'][$q_config['language']];
  57. $locale[] = $q_config['windows_locale'][$q_config['language']];
  58. $locale[] = $q_config['language'];
  59.  
  60. // return the correct locale and most importantly set it (wordpress doesn't, which is bad)
  61. // only set LC_TIME as everyhing else doesn't seem to work with windows
  62. setlocale(LC_TIME, $locale);
  63.  
  64. return $q_config['locale'][$q_config['language']];
  65. }
  66.  
  67. function qtrans_optionFilter($do = 'enable') {
  68. $options = array('option_widget_pages',
  69. 'option_widget_archives',
  70. 'option_widget_meta',
  71. 'option_widget_calendar',
  72. 'option_widget_text',
  73. 'option_widget_categories',
  74. 'option_widget_recent_entries',
  75. 'option_widget_recent_comments',
  76. 'option_widget_rss',
  77. 'option_widget_tag_cloud'
  78. );
  79. foreach ($options as $option) {
  80. if ($do != 'disable') {
  81. add_filter($option, 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0);
  82. } else {
  83. remove_filter($option, 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage');
  84. }
  85. }
  86. }
  87.  
  88. function qtrans_adminHeader() {
  89. echo "<style type=\"text/css\" media=\"screen\">\n";
  90. echo ".qtrans_title_input { border:0pt none; font-size:1.7em; outline-color:invert; outline-style:none; outline-width:medium; padding:0pt; width:100%; }\n";
  91. echo ".qtrans_title_wrap { border-color:#CCCCCC; border-style:solid; border-width:1px; padding:2px 3px; }\n";
  92. echo "#qtrans_textarea_content { padding:6px; border:0 none; line-height:150%; outline: none; margin:0pt; width:100%; -moz-box-sizing: border-box;";
  93. echo "-webkit-box-sizing: border-box; -khtml-box-sizing: border-box; box-sizing: border-box; }\n";
  94. echo ".qtrans_title { -moz-border-radius: 6px 6px 0 0;";
  95. echo "-webkit-border-top-right-radius: 6px; -webkit-border-top-left-radius: 6px; -khtml-border-top-right-radius: 6px; -khtml-border-top-left-radius: 6px;";
  96. echo "border-top-right-radius: 6px; border-top-left-radius: 6px; }\n";
  97. echo ".hide-if-no-js.wp-switch-editor.switch-tmce { margin-left:6px !important;}";
  98. echo "#qtranslate_debug { width:100%; height:200px }";
  99. echo "#postexcerpt textarea { height:4em; margin:0; width:98% }";
  100. echo ".qtranslate_lang_div { float:right; height:12px; width:18px; padding:6px 5px 8px 5px; cursor:pointer }";
  101. echo ".qtranslate_lang_div.active { background: #DFDFDF; border-left:1px solid #D0D0D0; border-right: 1px solid #F7F7F7; padding:6px 4px 8px 4px }";
  102. do_action('qtranslate_css');
  103. echo "</style>\n";
  104. return qtrans_optionFilter('disable');
  105. }
  106.  
  107. function qtrans_useCurrentLanguageIfNotFoundShowAvailable($content) {
  108. global $q_config;
  109. $result = qtrans_use($q_config['language'], $content, true);
  110. $source = strtolower($result);
  111. $checker = str_replace(array('<br/>', '<br>', '<br />', '<p>', '</p>'), '', $source);
  112. $resultChecker = trim($checker);
  113. if ($resultChecker == "") {
  114. $result = qtrans_use("en", $content, true);
  115. }
  116. return $result;
  117. }
  118.  
  119. function qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage($content) {
  120. global $q_config;
  121. $result = qtrans_use($q_config['language'], $content, false);
  122. // if (trim($result)=="") {
  123. // $result = qtrans_use("en", $content, false);
  124. // }
  125. return $result;
  126. }
  127.  
  128. function qtrans_useDefaultLanguage($content) {
  129. global $q_config;
  130. return qtrans_use($q_config['default_language'], $content, false);
  131. }
  132.  
  133. function qtrans_excludeUntranslatedPosts($where) {
  134. global $q_config, $wpdb;
  135. if ($q_config['hide_untranslated'] && !is_singular()) {
  136. $where .= " AND $wpdb->posts.post_content LIKE '%<!--:" . qtrans_getLanguage() . "-->%'";
  137. }
  138. return $where;
  139. }
  140.  
  141. function qtrans_excludePages($pages) {
  142. global $wpdb, $q_config;
  143. static $exclude = 0;
  144. if (!$q_config['hide_untranslated'])
  145. return $pages;
  146. if (is_array($exclude))
  147. return array_merge($exclude, $pages);
  148. $query = "SELECT id FROM $wpdb->posts WHERE post_type = 'page' AND post_status = 'publish' AND NOT ($wpdb->posts.post_content LIKE '%<!--:" . qtrans_getLanguage() . "-->%')";
  149. $hide_pages = $wpdb->get_results($query);
  150. $exclude = array();
  151. foreach ($hide_pages as $page) {
  152. $exclude[] = $page->id;
  153. }
  154. return array_merge($exclude, $pages);
  155. }
  156.  
  157. function qtrans_postsFilter($posts) {
  158. if (is_array($posts)) {
  159. foreach ($posts as $post) {
  160. $post->post_content = qtrans_useCurrentLanguageIfNotFoundShowAvailable($post->post_content);
  161. $post = qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage($post);
  162. }
  163. }
  164. return $posts;
  165. }
  166.  
  167. function qtrans_links($links, $file) { // copied from Sociable Plugin
  168. //Static so we don't call plugin_basename on every plugin row.
  169. static $this_plugin;
  170. if (!$this_plugin)
  171. $this_plugin = plugin_basename(dirname(__FILE__) . '/qtranslate.php');
  172.  
  173. if ($file == $this_plugin) {
  174. $settings_link = '<a href="options-general.php?page=qtranslate">' . __('Settings', 'qtranslate') . '</a>';
  175. array_unshift($links, $settings_link); // before other links
  176. }
  177. return $links;
  178. }
  179.  
  180. function qtrans_languageColumnHeader($columns) {
  181. $new_columns = array();
  182. if (isset($columns['cb']))
  183. $new_columns['cb'] = '';
  184. if (isset($columns['title']))
  185. $new_columns['title'] = '';
  186. if (isset($columns['author']))
  187. $new_columns['author'] = '';
  188. if (isset($columns['categories']))
  189. $new_columns['categories'] = '';
  190. if (isset($columns['tags']))
  191. $new_columns['tags'] = '';
  192. $new_columns['language'] = __('Languages', 'qtranslate');
  193. return array_merge($new_columns, $columns);
  194. ;
  195. }
  196.  
  197. function qtrans_languageColumn($column) {
  198. global $q_config, $post;
  199. if ($column == 'language') {
  200. $available_languages = qtrans_getAvailableLanguages($post->post_content);
  201. $missing_languages = array_diff($q_config['enabled_languages'], $available_languages);
  202. $available_languages_name = array();
  203. $missing_languages_name = array();
  204. foreach ($available_languages as $language) {
  205. $available_languages_name[] = $q_config['language_name'][$language];
  206. }
  207. $available_languages_names = join(", ", $available_languages_name);
  208.  
  209. echo apply_filters('qtranslate_available_languages_names', $available_languages_names);
  210. do_action('qtranslate_languageColumn', $available_languages, $missing_languages);
  211. }
  212. return $column;
  213. }
  214.  
  215. function qtrans_versionLocale() {
  216. return 'en_US';
  217. }
  218.  
  219. function qtrans_esc_html($text) {
  220. return qtrans_useDefaultLanguage($text);
  221. }
  222.  
  223. function qtrans_useRawTitle($title, $raw_title = '', $context = 'save') {
  224. if ($raw_title == '')
  225. $raw_title = $title;
  226. if ('save' == $context) {
  227. $raw_title = qtrans_useDefaultLanguage($raw_title);
  228. $title = remove_accents($raw_title);
  229. }
  230. return $title;
  231. }
  232.  
  233. function qtrans_checkCanonical($redirect_url, $requested_url) {
  234. // fix canonical conflicts with language urls
  235. if (qtrans_convertURL($redirect_url) == qtrans_convertURL($requested_url))
  236. return false;
  237. return $redirect_url;
  238. }
  239.  
  240. function qtrans_fixSearchForm($form) {
  241. $form = preg_replace('#action="[^"]*"#', 'action="' . trailingslashit(qtrans_convertURL(get_home_url())) . '"', $form);
  242. return $form;
  243. }
  244.  
  245. function qtrans_fixAdminBar($wp_admin_bar) {
  246. global $wp_admin_bar;
  247. foreach ($wp_admin_bar->get_nodes() as $node) {
  248. $wp_admin_bar->add_node(qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage($node));
  249. }
  250. }
  251.  
  252. // Hooks for Plugin compatibility
  253.  
  254. function wpsupercache_supercache_dir($uri) {
  255. global $q_config;
  256. if (isset($q_config['url_info']['original_url'])) {
  257. $uri = $q_config['url_info']['original_url'];
  258. } else {
  259. $uri = $_SERVER['REQUEST_URI'];
  260. }
  261. $uri = preg_replace('/[ <>\'\"\r\n\t\(\)]/', '', str_replace('/index.php', '/', str_replace('..', '', preg_replace("/(\?.*)?$/", '', $uri))));
  262. $uri = str_replace('\\', '', $uri);
  263. $uri = strtolower(preg_replace('/:.*$/', '', $_SERVER["HTTP_HOST"])) . $uri; // To avoid XSS attacs
  264. return $uri;
  265. }
  266.  
  267. add_filter('supercache_dir', 'wpsupercache_supercache_dir', 0);
  268.  
  269. // Hooks (Actions)
  270. add_action('wp_head', 'qtrans_header');
  271. add_action('category_edit_form', 'qtrans_modifyTermFormFor');
  272. add_action('post_tag_edit_form', 'qtrans_modifyTermFormFor');
  273. add_action('link_category_edit_form', 'qtrans_modifyTermFormFor');
  274. add_action('category_add_form', 'qtrans_modifyTermFormFor');
  275. add_action('post_tag_add_form', 'qtrans_modifyTermFormFor');
  276. add_action('link_category_add_form', 'qtrans_modifyTermFormFor');
  277. add_action('widgets_init', 'qtrans_widget_init');
  278. add_action('plugins_loaded', 'qtrans_init', 2);
  279. add_action('admin_head', 'qtrans_adminHeader');
  280. add_action('admin_menu', 'qtrans_adminMenu');
  281. add_action('wp_before_admin_bar_render', 'qtrans_fixAdminBar');
  282.  
  283. // Hooks (execution time critical filters)
  284. add_filter('the_content', 'qtrans_useCurrentLanguageIfNotFoundShowAvailable', 0);
  285. add_filter('the_excerpt', 'qtrans_useCurrentLanguageIfNotFoundShowAvailable', 0);
  286. add_filter('the_excerpt_rss', 'qtrans_useCurrentLanguageIfNotFoundShowAvailable', 0);
  287. add_filter('sanitize_title', 'qtrans_useRawTitle', 0, 3);
  288. add_filter('comment_moderation_subject', 'qtrans_useDefaultLanguage', 0);
  289. add_filter('comment_moderation_text', 'qtrans_useDefaultLanguage', 0);
  290. add_filter('get_comment_date', 'qtrans_dateFromCommentForCurrentLanguage', 0, 2);
  291. add_filter('get_comment_time', 'qtrans_timeFromCommentForCurrentLanguage', 0, 4);
  292. add_filter('get_post_modified_time', 'qtrans_timeModifiedFromPostForCurrentLanguage', 0, 3);
  293. add_filter('get_the_time', 'qtrans_timeFromPostForCurrentLanguage', 0, 3);
  294. add_filter('get_the_date', 'qtrans_dateFromPostForCurrentLanguage', 0, 4);
  295. add_filter('locale', 'qtrans_localeForCurrentLanguage', 99);
  296. add_filter('the_title', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0);
  297. add_filter('term_name', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0);
  298. add_filter('tag_rows', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0);
  299. add_filter('list_cats', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0);
  300. add_filter('wp_list_categories', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0);
  301. add_filter('wp_dropdown_cats', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0);
  302. add_filter('wp_title', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0);
  303. add_filter('single_post_title', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0);
  304. add_filter('bloginfo', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0);
  305. add_filter('get_others_drafts', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0);
  306. add_filter('get_bloginfo_rss', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0);
  307. add_filter('get_wp_title_rss', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0);
  308. add_filter('wp_title_rss', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0);
  309. add_filter('the_title_rss', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0);
  310. add_filter('the_content_rss', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0);
  311. add_filter('gettext', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0);
  312. add_filter('get_pages', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0);
  313. add_filter('category_description', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0);
  314. add_filter('bloginfo_rss', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0);
  315. add_filter('the_category_rss', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0);
  316. add_filter('wp_generate_tag_cloud', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0);
  317. add_filter('term_links-post_tag', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0);
  318. add_filter('link_name', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0);
  319. add_filter('link_description', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0);
  320. add_filter('pre_option_rss_language', 'qtrans_getLanguage', 0);
  321. add_filter('the_author', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0);
  322. add_filter("_wp_post_revision_field_post_title", 'qtrans_showAllSeperated', 0);
  323. add_filter("_wp_post_revision_field_post_content", 'qtrans_showAllSeperated', 0);
  324. add_filter("_wp_post_revision_field_post_excerpt", 'qtrans_showAllSeperated', 0);
  325.  
  326. // Hooks (execution time non-critical filters)
  327. add_filter('author_feed_link', 'qtrans_convertURL');
  328. add_filter('author_link', 'qtrans_convertURL');
  329. add_filter('author_feed_link', 'qtrans_convertURL');
  330. add_filter('day_link', 'qtrans_convertURL');
  331. add_filter('get_comment_author_url_link', 'qtrans_convertURL');
  332. add_filter('month_link', 'qtrans_convertURL');
  333. add_filter('page_link', 'qtrans_convertURL');
  334. add_filter('post_link', 'qtrans_convertURL');
  335. add_filter('year_link', 'qtrans_convertURL');
  336. add_filter('category_feed_link', 'qtrans_convertURL');
  337. add_filter('category_link', 'qtrans_convertURL');
  338. add_filter('tag_link', 'qtrans_convertURL');
  339. add_filter('term_link', 'qtrans_convertURL');
  340. add_filter('the_permalink', 'qtrans_convertURL');
  341. add_filter('feed_link', 'qtrans_convertURL');
  342. add_filter('post_comments_feed_link', 'qtrans_convertURL');
  343. add_filter('tag_feed_link', 'qtrans_convertURL');
  344. add_filter('get_pagenum_link', 'qtrans_convertURL');
  345. add_filter('get_search_form', 'qtrans_fixSearchForm', 10, 1);
  346. add_filter('manage_posts_columns', 'qtrans_languageColumnHeader');
  347. add_filter('manage_posts_custom_column', 'qtrans_languageColumn');
  348. add_filter('manage_pages_columns', 'qtrans_languageColumnHeader');
  349. add_filter('manage_pages_custom_column', 'qtrans_languageColumn');
  350. add_filter('wp_list_pages_excludes', 'qtrans_excludePages');
  351. add_filter('comment_notification_text', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage');
  352. add_filter('comment_notification_headers', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage');
  353. add_filter('comment_notification_subject', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage');
  354.  
  355. add_filter('the_editor', 'qtrans_modifyRichEditor');
  356. add_filter('admin_footer', 'qtrans_modifyExcerpt');
  357. add_filter('bloginfo_url', 'qtrans_convertBlogInfoURL', 10, 2);
  358. add_filter('plugin_action_links', 'qtrans_links', 10, 2);
  359. add_filter('manage_language_columns', 'qtrans_language_columns');
  360. add_filter('core_version_check_locale', 'qtrans_versionLocale');
  361. add_filter('redirect_canonical', 'qtrans_checkCanonical', 10, 2);
  362. // skip this filters if on backend
  363. if (!defined('WP_ADMIN')) {
  364. add_filter('the_posts', 'qtrans_postsFilter');
  365. add_filter('wp_setup_nav_menu_item', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage');
  366.  
  367. // Compability with Default Widgets
  368. qtrans_optionFilter();
  369. add_filter('widget_title', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0);
  370. add_filter('widget_text', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0);
  371.  
  372. // filter options
  373. add_filter('esc_html', 'qtrans_esc_html', 0);
  374. // don't filter untranslated posts in admin
  375. add_filter('posts_where_request', 'qtrans_excludeUntranslatedPosts');
  376.  
  377. // leave terms in default language
  378. add_filter('cat_row', 'qtrans_useTermLib', 0);
  379. add_filter('cat_rows', 'qtrans_useTermLib', 0);
  380. add_filter('wp_get_object_terms', 'qtrans_useTermLib', 0);
  381. add_filter('single_tag_title', 'qtrans_useTermLib', 0);
  382. add_filter('single_cat_title', 'qtrans_useTermLib', 0);
  383. add_filter('the_category', 'qtrans_useTermLib', 0);
  384. add_filter('get_term', 'qtrans_useTermLib', 0);
  385. add_filter('get_terms', 'qtrans_useTermLib', 0);
  386. add_filter('get_category', 'qtrans_useTermLib', 0);
  387. add_filter('get_comment_author', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0);
  388. add_filter('the_author', 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage', 0);
  389. }
  390. ?>
Advertisement
Add Comment
Please, Sign In to add comment