WordPress.org

Plugin Directory

Changeset 349882


Ignore:
Timestamp:
02/23/11 17:19:36 (3 years ago)
Author:
leogermani
Message:

filtering posts on the front end!

Location:
multi-language-framework/trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • multi-language-framework/trunk/config.php

    r291814 r349882  
    239239    ); 
    240240     
     241    $mlf_config['hide_default_language'] = true; 
     242     
    241243    $mlf_config['default_language'] =  "pt"; 
     244     
     245    $mlf_config['url_mode'] =  "path"; 
    242246 
    243247    foreach ($mlf_config as $name => $value){ 
  • multi-language-framework/trunk/core-functions.php

    r289539 r349882  
    163163 
    164164 
     165function mlf_convertURL($url='', $lang='', $forceadmin = false) { 
     166    global $mlf_config; 
     167     
     168    // invalid language 
     169    if($url=='') $url = esc_url($mlf_config['url_info']['url']); 
     170    if($lang=='') $lang = $mlf_config['language']; 
     171    if(defined('WP_ADMIN')&&!$forceadmin) return $url; 
     172    if(!mlf_isEnabled($lang)) return ""; 
     173     
     174    // & workaround 
     175    $url = str_replace('&','&',$url); 
     176    $url = str_replace('&','&',$url); 
     177     
     178    // check for trailing slash 
     179    $nottrailing = (strpos($url,'?')===false && strpos($url,'#')===false && substr($url,-1,1)!='/'); 
     180     
     181    // check if it's an external link 
     182    $urlinfo = mlf_parseURL($url); 
     183    $home = rtrim(get_option('home'),"/"); 
     184    if($urlinfo['host']!='') { 
     185        // check for already existing pre-domain language information 
     186        if($mlf_config['url_mode'] == 'subdomain' && preg_match("#^([a-z]{2}).#i",$urlinfo['host'],$match)) { 
     187            if(mlf_isEnabled($match[1])) { 
     188                // found language information, remove it 
     189                $url = preg_replace("/".$match[1]."\./i","",$url, 1); 
     190                // reparse url 
     191                $urlinfo = mlf_parseURL($url); 
     192            } 
     193        } 
     194        if(substr($url,0,strlen($home))!=$home) { 
     195            return $url; 
     196        } 
     197        // strip home path 
     198        $url = substr($url,strlen($home)); 
     199    } else { 
     200        // relative url, strip home path 
     201        $homeinfo = mlf_parseURL($home); 
     202        if($homeinfo['path']==substr($url,0,strlen($homeinfo['path']))) { 
     203            $url = substr($url,strlen($homeinfo['path'])); 
     204        } 
     205    } 
     206     
     207    // check for query language information and remove if found 
     208    if(preg_match("#(&|\?)lang=([^&\#]+)#i",$url,$match) && mlf_isEnabled($match[2])) { 
     209        $url = preg_replace("#(&|\?)lang=".$match[2]."&?#i","$1",$url); 
     210    } 
     211     
     212    // remove any slashes out front 
     213    $url = ltrim($url,"/"); 
     214     
     215    // remove any useless trailing characters 
     216    $url = rtrim($url,"?&"); 
     217     
     218    // reparse url without home path 
     219    $urlinfo = mlf_parseURL($url); 
     220     
     221    // check if its a link to an ignored file type 
     222    $ignore_file_types = preg_split('/\s*,\s*/', strtolower($mlf_config['ignore_file_types'])); 
     223    $pathinfo = pathinfo($urlinfo['path']); 
     224    if(isset($pathinfo['extension']) && in_array(strtolower($pathinfo['extension']), $ignore_file_types)) { 
     225        return $home."/".$url; 
     226    } 
     227     
     228    // dirty hack for wp-login.php 
     229    if(strpos($url,"wp-login.php")!==false) { 
     230        return $home."/".$url; 
     231    } 
     232     
     233    switch($mlf_config['url_mode']) { 
     234        case 'path':    // pre url 
     235            // might already have language information 
     236            if(preg_match("#^([a-z]{2})/#i",$url,$match)) { 
     237                if(mlf_isEnabled($match[1])) { 
     238                    // found language information, remove it 
     239                    $url = substr($url, 3); 
     240                } 
     241            } 
     242            if(!$mlf_config['hide_default_language']||$lang!=$mlf_config['default_language']) $url = $lang."/".$url; 
     243            break; 
     244        case 'subdomain':   // pre domain  
     245            if(!$mlf_config['hide_default_language']||$lang!=$mlf_config['default_language']) $home = preg_replace("#//#","//".$lang.".",$home,1); 
     246            break; 
     247        default: // query 
     248            if(!$mlf_config['hide_default_language']||$lang!=$mlf_config['default_language']){ 
     249                if(strpos($url,'?')===false) { 
     250                    $url .= '?'; 
     251                } else { 
     252                    $url .= '&'; 
     253                } 
     254                $url .= "lang=".$lang; 
     255            } 
     256    } 
     257     
     258    // see if cookies are activated 
     259    if(!$mlf_config['cookie_enabled'] && !$mlf_config['url_info']['internal_referer'] && $urlinfo['path'] == '' && $lang == $mlf_config['default_language'] && $mlf_config['language'] != $mlf_config['default_language'] && $mlf_config['hide_default_language']) { 
     260        // :( now we have to make unpretty URLs 
     261        $url = preg_replace("#(&|\?)lang=".$match[2]."&?#i","$1",$url); 
     262        if(strpos($url,'?')===false) { 
     263            $url .= '?'; 
     264        } else { 
     265            $url .= '&'; 
     266        } 
     267        $url .= "lang=".$lang; 
     268    } 
     269     
     270    // & workaround 
     271    $complete = str_replace('&','&',$home."/".$url); 
     272 
     273    // remove trailing slash if there wasn't one to begin with 
     274    if($nottrailing && strpos($complete,'?')===false && strpos($complete,'#')===false && substr($complete,-1,1)=='/') 
     275        $complete = substr($complete,0,-1); 
     276     
     277    return $complete; 
     278} 
     279 
     280 
     281add_filter('redirect_canonical',            'mlf_checkCanonical', 10, 2); 
     282 
     283function mlf_checkCanonical($redirect_url, $requested_url) { 
     284    // fix canonical conflicts with language urls 
     285     
     286    //var_dump(mlf_convertURL($redirect_url),mlf_convertURL($requested_url)); die; 
     287    if(mlf_convertURL($redirect_url)==mlf_convertURL($requested_url))  
     288        return false; 
     289    return $redirect_url; 
     290} 
     291 
     292add_filter('the_content', 'mlf_add_link_to_other_languages'); 
     293 
     294function mlf_add_link_to_other_languages($content) { 
     295 
     296    global $post, $mlf_config; 
     297     
     298    $other_languages = mlf_get_tranlsations_ids($post->ID, $post->post_type); 
     299     
     300    // We have to temporarily change the language to retrieve unflitered permalinks 
     301    $currentLanguage = $mlf_config['language']; 
     302    $mlf_config['language'] = $mlf_config['default_language']; 
     303     
     304    foreach($other_languages as $l) { 
     305     
     306        if ($l) { 
     307             
     308            $r .= "<a href='" . get_permalink($l) . "'>" . get_permalink($l) . "</a>"; 
     309         
     310        } 
     311     
     312    } 
     313     
     314    //restore language 
     315    $mlf_config['language'] = $currentLanguage; 
     316     
     317    return $content . $r; 
     318 
     319} 
     320 
    165321?> 
  • multi-language-framework/trunk/edit_screen.php

    r304246 r349882  
    5757            'labels' => $labels, 
    5858            'public' => true, 
    59             'rewrite' => false, 
     59            'rewrite' => array('slug' => $l), 
    6060            'capability_type' => 'post', 
    6161            'hierarchical' => false, 
  • multi-language-framework/trunk/multi-language-framework.php

    r298083 r349882  
    2626 
    2727function mlf_init() { 
    28     global $admin_language; 
    29      
     28    global $admin_language, $mlf_config; 
     29     
     30    // só fazer isso depois q existir as opções para não dar problema ao ativar o plugin... 
     31    if (mlf_get_option('url_mode')) {  
     32         
     33        $mlf_config['url_mode'] = mlf_get_option('url_mode'); 
     34        $mlf_config['auto_update_mo'] = mlf_get_option('auto_update_mo'); 
     35        $mlf_config['default_language'] = mlf_get_option('default_language'); 
     36        $mlf_config['enabled_languages'] = mlf_get_option('enabled_languages'); 
     37        $mlf_config['hide_default_language'] = mlf_get_option('hide_default_language'); 
     38    } 
    3039    // extract url information 
    31     $url_info = mlf_extractURL($_SERVER['REQUEST_URI'], $_SERVER["HTTP_HOST"], isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''); 
    32     $default_language = mlf_get_option('default_language'); 
    33     $auto_update_mo = mlf_get_option('auto_update_mo'); 
     40    $mlf_config['url_info'] = mlf_extractURL($_SERVER['REQUEST_URI'], $_SERVER["HTTP_HOST"], isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''); 
    3441     
    3542    // check cookies for admin 
    3643    if(defined('WP_ADMIN')) { 
    3744        if(isset($_GET['lang']) && mlf_isEnabled($_GET['lang'])) { 
    38             $admin_language  = $url_info['language']; 
    39             setcookie('mlf_admin_language', $admin_language, time()+60*60*24*30); 
     45             $mlf_config['language'] = $mlf_config['url_info']['language']; 
     46            setcookie('mlf_admin_language', $mlf_config['language'], time()+60*60*24*30); 
    4047        } elseif(isset($_COOKIE['mlf_admin_language']) && mlf_isEnabled($_COOKIE['mlf_admin_language'])) { 
    41             $admin_language = $_COOKIE['mlf_admin_language']; 
     48            $mlf_config['language'] = $_COOKIE['mlf_admin_language']; 
    4249        } else { 
    43             $admin_language = $default_language; 
     50            $mlf_config['language'] = $mlf_config['default_language']; 
    4451        } 
    4552    } else { 
    46         $admin_language = $url_info['language']; 
     53        $mlf_config['language'] = $mlf_config['url_info']['language']; 
    4754    } 
    4855     
    4956    // load plugin translations 
    50     load_plugin_textdomain('mlf', false, dirname(plugin_basename( __FILE__ )).'/languages'); 
     57    //load_plugin_textdomain('mlf', false, dirname(plugin_basename( __FILE__ )).'/languages'); 
    5158     
    5259    // register plugin javascript files 
     
    6067        mlf_updateGettextDatabases();     
    6168    } 
     69     
     70    // remove traces of language (or better not?) 
     71    //unset($_GET['lang']); 
     72    //var_dump($_SERVER['REQUEST_URI'], $_SERVER['HTTP_HOST']); 
     73     
     74    $_SERVER['REQUEST_URI'] = $mlf_config['url_info']['url']; 
     75    $_SERVER['HTTP_HOST'] = $mlf_config['url_info']['host']; 
     76    //var_dump($_SERVER['REQUEST_URI'], $_SERVER['HTTP_HOST']); die; 
     77    // fix url to prevent xss 
     78    //print_r($mlf_config['url_info']); die; 
     79    $mlf_config['url_info']['url'] = mlf_convertURL(add_query_arg('lang',$mlf_config['default_language'],$mlf_config['url_info']['url'])); 
     80     
    6281} 
    6382 
     
    84103    $language_name = mlf_get_option('language_name'); 
    85104    $enabled_languages = mlf_get_option('enabled_languages'); 
     105     
    86106    $flag = mlf_get_option('flag'); 
    87107    $flag_location = mlf_get_option('flag_location'); 
     
    120140 
    121141function mlf_register_settings(){ 
    122     global $plugin_prefix; 
    123      
    124      $options = array ('default_language', 'url_mode'); 
    125      
    126     foreach($options as $option) {     
    127         register_setting('multi-language-settings-group', $plugin_prefix . $option); 
    128     } 
    129  
     142     
     143    register_setting('multi-language-settings-group', 'mlf_config'); 
     144     
    130145}     
    131146    
     
    145160add_action('plugins_loaded','mlf_init'); 
    146161 
     162 
     163 
     164 
     165 
     166 
     167add_filter('author_feed_link',              'mlf_convertURL'); 
     168add_filter('author_link',                   'mlf_convertURL'); 
     169add_filter('author_feed_link',              'mlf_convertURL'); 
     170add_filter('day_link',                      'mlf_convertURL'); 
     171add_filter('get_comment_author_url_link',   'mlf_convertURL'); 
     172add_filter('month_link',                    'mlf_convertURL'); 
     173add_filter('page_link',                     'mlf_convertURL'); 
     174add_filter('post_link',                     'mlf_convertURL'); 
     175add_filter('year_link',                     'mlf_convertURL'); 
     176add_filter('category_feed_link',            'mlf_convertURL'); 
     177add_filter('category_link',                 'mlf_convertURL'); 
     178add_filter('tag_link',                      'mlf_convertURL'); 
     179add_filter('term_link',                     'mlf_convertURL'); 
     180add_filter('the_permalink',                 'mlf_convertURL'); 
     181add_filter('feed_link',                     'mlf_convertURL'); 
     182add_filter('post_comments_feed_link',       'mlf_convertURL'); 
     183add_filter('tag_feed_link',                 'mlf_convertURL'); 
     184add_filter('clean_url',                     'mlf_convertURL'); 
     185 
     186add_action('pre_get_posts', 'mlf_parse_query'); 
     187 
     188function mlf_parse_query($wp_query) { 
     189 
     190    global $mlf_config; 
     191     
     192    //var_dump(mlf_get_option('default_language') , $mlf_config['language']);  
     193    $default_language = mlf_get_option('default_language'); 
     194     
     195    //echo '<pre>'; print_r($wp_query); 
     196     
     197    if ($default_language == $mlf_config['language']) 
     198        return; 
     199     
     200     
     201     
     202    if ($wp_query->is_singular != 1) { 
     203     
     204        $post_type = $wp_query->query_vars['post_type'] ? $wp_query->query_vars['post_type'] : 'post'; 
     205                 
     206        $wp_query->query_vars['post_type'] = $post_type . '_translations_' . $mlf_config['language']; 
     207 
     208             
     209     
     210    } else { 
     211         
     212        // We are querying a custom post type, we have to help wordPress to know that, 
     213        // because we changed the REQUEST_URI so it doesnt know 
     214        if ($wp_query->query_vars['pagename']) { 
     215             
     216            $post_type = $wp_query->query_vars['post_type'] ? $wp_query->query_vars['post_type'] : 'post'; 
     217             
     218            $wp_query->query_vars['post_type'] = $post_type . '_translations_' . $mlf_config['language']; 
     219            $wp_query->query_vars['name'] = $wp_query->query_vars['pagename']; 
     220            $wp_query->query_vars[$wp_query->query_vars['post_type']] =  $wp_query->query_vars['name']; 
     221            $wp_query->query_vars['pagename'] = '';             
     222 
     223 
     224            $wp_query->query = array( 
     225             
     226                'post_type' => $post_type . '_translations_' . $mlf_config['language'], 
     227                'name' => $wp_query->query_vars['pagename'], 
     228                $wp_query->query_vars['post_type'] => $wp_query->query_vars['name'] 
     229                 
     230            ); 
     231             
     232             
     233        } 
     234         
     235        // We dont have the post ID here, so lets do this in another action 
     236        add_action('template_redirect', 'mlf_single_translation'); 
     237     
     238    } 
     239     
     240} 
     241 
     242function mlf_single_translation() { 
     243 
     244    global $wp_query; 
     245    $default_language = mlf_get_option('default_language'); 
     246     
     247    if (is_object($wp_query->post) && isset($wp_query->post->ID)) { 
     248     
     249        global $wpdb, $mlf_config; 
     250        $post = $wp_query->post; 
     251        $post_type = preg_replace('/(.+)_translations_([a-zA-Z]{2})/', "$1", $post->post_type); 
     252         
     253        $post_type_search = $default_language == $mlf_config['language'] ? $post_type : $post_type . "_translations_" . $mlf_config['language']; 
     254         
     255        $query = "select * from $wpdb->posts join $wpdb->postmeta on ID = post_id WHERE post_type = '$post_type_search'  
     256                AND meta_key = '_translation_of' AND meta_value = $post->ID"; 
     257                 
     258        $translation = $wpdb->get_row($query); 
     259         
     260        if ($translation) { 
     261            $wp_query->post = $translation; 
     262            $wp_query->posts[0] = $translation; 
     263        } else { 
     264            add_filter('the_content', 'mlf_add_not_available_message'); 
     265        } 
     266    } 
     267     
     268    //echo '<pre>'; print_r($wp_query); 
     269 
     270} 
     271 
     272 
     273function mlf_add_not_available_message($content) { 
     274 
     275    return "Post nao disponivel nesse idioma <br/><br /> $content"; 
     276 
     277} 
     278 
    147279?> 
  • multi-language-framework/trunk/settings.php

    r297777 r349882  
    3838            "id" => $plugin_prefix."url_mode", 
    3939            "type" => "radio", 
    40             "options" => array("query" => "Use Query Mode (?lang=en)", "path" => "Use Path Mode (puts /en/ in front of URL)"), 
     40            "options" => array("query" => "Use Query Mode (?lang=en)", "path" => "Use Path Mode (puts /en/ in front of URL)", "subdomain" => "Use subdomains (en.yoursite.com)"), 
    4141            "std" => "Choose a category"), 
    4242             
     
    4545    
    4646    $i=0; 
     47    global $mlf_config; 
    4748?> 
     49    <h1>No settings page yet</h1> 
     50    Default settings: 
     51     
     52    <pre> 
     53    <?php print_r($mlf_config); ?> 
     54    </pre> 
     55    <!-- 
    4856    <div class="wrap mlf_wrap"> 
    4957        <h2><?php echo $plugin_name; ?> Settings</h2> 
     
    181189            </form>   
    182190        </div>  
    183  
     191        --> 
    184192<?php 
    185193} 
  • multi-language-framework/trunk/utils.php

    r289539 r349882  
    3131} 
    3232 
     33function mlf_get_tranlsations_ids($post_id, $post_type = 'post') { 
     34 
     35    if (!is_numeric($post_id)) 
     36        return false; 
     37     
     38    global $wpdb; 
     39     
     40    $post_type_base = preg_replace('/(.+)_translations_([a-zA-Z]{2})/', "$1", $post_type); 
     41     
     42    $enabled_languages = mlf_get_option('enabled_languages'); 
     43    $default_language = mlf_get_option('default_language'); 
     44    $result = array(); 
     45     
     46    foreach ($enabled_languages as $lang) { 
     47             
     48        $translation_id = false; 
     49        $p_type = $post_type_base . '_translations_' . $lang;             
     50         
     51        if ($p_type == $post_type_base . '_translations_' . $default_language) 
     52            $p_type = $post_type_base; 
     53 
     54        if ( $post_type == $p_type ) { 
     55            continue; 
     56        } 
     57         
     58        $result[$lang] = $wpdb->get_var("SELECT ID FROM $wpdb->posts p JOIN $wpdb->postmeta pm ON post_id = p.ID WHERE post_status <> 'trash' AND post_type='$p_type' AND meta_key='_translation_of' AND meta_value=$post_id "); 
     59         
     60    } 
     61     
     62    return $result; 
     63     
     64} 
    3365 
    3466?> 
Note: See TracChangeset for help on using the changeset viewer.