Plugin Directory

Changeset 1073922


Ignore:
Timestamp:
01/23/2015 07:37:04 AM (11 years ago)
Author:
chsxf
Message:

[Working draft] User-level lang protection

  • Added partial support for user-level lang protection under new

workflow

Location:
mqtranslate/trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • mqtranslate/trunk/mqtranslate.js

    r1073918 r1073922  
    680680    var langSwitchWrap=qtrans_ce('ul', {className: 'qtrans-lang-switch-wrap wp-ui-primary'});
    681681    {
    682         //var header=w.getElementsByTagName('h2')[0];
    683         //header.parentNode.insertBefore(langSwitchWrap, header.nextElementSibling);
    684682        var w=document.getElementsByClassName('wrap')[0];
    685683        var f=w.getElementsByTagName('form')[0];
     
    694692{
    695693    var langs=qTranslateConfig.enabled_languages, langNames=qTranslateConfig.language_name, activeLanguage=initial_language;
     694    var editableLangs = qTranslateConfig.editable_languages || langs;
     695    var visibleLangs = qTranslateConfig.visible_languages || new Array();
    696696    var tabSwitches={};
    697697    var onTabSwitch=[];
     
    718718    for(var i=0; i<langs.length; ++i)
    719719    {
     720        var lang=langs[i];
     721       
     722        var langName = langNames[lang];
     723        var editableIndex = editableLangs.indexOf(lang);
     724        if (editableIndex < 0) {
     725            if (visibleLangs.indexOf(lang) < 0)
     726                continue;
     727            langName += ' (Read Only)';
     728        }
     729       
    720730        //var flags_location=qTranslateConfig.WP_CONTENT_URL+qTranslateConfig.flag_location;
    721731        var flag_location=qTranslateConfig.flag_location;
    722         var lang=langs[i];
    723732        var tabSwitch=qtrans_ce ('li', {lang: lang, className: 'qtrans-lang-switch', onclick: switchTab }, target );
    724733        qtrans_ce('img', {src: flag_location+qTranslateConfig.flag[lang]}, tabSwitch);
    725         qtrans_ce('span', {innerHTML: langNames[lang]}, tabSwitch);
     734        qtrans_ce('span', {innerHTML: langName}, tabSwitch);
    726735        tabSwitches[lang]=tabSwitch;
    727736        if ( activeLanguage == lang )
  • mqtranslate/trunk/mqtranslate.php

    r1073918 r1073922  
    502502
    503503// User-level language protection
    504 $q_config['ul_lang_protection'] = 1;
     504$q_config['ul_lang_protection'] = 0;
    505505
    506506// Custom post types modification
  • mqtranslate/trunk/mqtranslate_configuration.php

    r1073918 r1073922  
    8585        }
    8686    }
     87   
     88    $config = apply_filters('pre_qtranslate_js', $config);
    8789?>
    8890    <script type="text/javascript">
  • mqtranslate/trunk/mqtranslate_core.php

    r1073921 r1073922  
    983983*/
    984984
    985 function qtrans_split($text, $quicktags = true) {
     985function qtrans_split($text, $quicktags = true, array &$languageMap = NULL) {
    986986    global $q_config;
    987987    $split_regex = "#(<!--:[a-z]{2}-->|<!--:-->|\[:[a-z]{2}\])#ism";
     
    995995    foreach($blocks as $block) {
    996996        # detect language tags
    997         if(preg_match("#^<!--:([a-z]{2})-->$#ism", $block, $matches)) {
    998             $current_language = $matches[1];
    999             if(!qtrans_isEnabled($current_language)) $current_language = false;
     997        if (preg_match("#^<!--:([a-z]{2})-->$#ism", $block, $matches)) {
     998            if (qtrans_isEnabled($matches[1])) {
     999                $current_language = $matches[1];
     1000                if ($languageMap !== NULL)
     1001                    $languageMap[$current_language] = false;
     1002            }
     1003            else
     1004                $current_language = false;
    10001005            continue;
    10011006        // detect quicktags
    10021007        } elseif($quicktags && preg_match("#^\[:([a-z]{2})\]$#ism", $block, $matches)) {
    1003             $current_language = $matches[1];
    1004             if(!qtrans_isEnabled($current_language)) $current_language = false;
     1008            if (qtrans_isEnabled($matches[1])) {
     1009                $current_language = $matches[1];
     1010                if ($languageMap !== NULL)
     1011                    $languageMap[$current_language] = true;
     1012            }
     1013            else
     1014                $current_language = false;
    10051015            continue;
    10061016        // detect ending tags
    1007         } elseif(preg_match("#^<!--:-->$#ism", $block, $matches)) {
     1017        }
     1018        elseif (preg_match("#^<!--:-->$#ism", $block, $matches)) {
    10081019            $current_language = false;
    10091020            continue;
    10101021        }
     1022       
    10111023        // correctly categorize text block
    1012         if($current_language){
     1024        if ($current_language) {
    10131025            $result[$current_language] .= $block;
    10141026            $current_language = false;
    1015         }else{
    1016             foreach($q_config['enabled_languages'] as $language) {
     1027        }
     1028        else {
     1029            foreach ($q_config['enabled_languages'] as $language)
    10171030                $result[$language] .= $block;
    1018             }
    10191031        }
    10201032    }
  • mqtranslate/trunk/mqtranslate_xhaleera_addons.php

    r1073916 r1073922  
    161161        return;
    162162   
    163     $titleMap = array();
    164     $contentMap = array();
     163    $fields = array('title', 'content', 'excerpt');
     164   
     165    $containers = array();
     166    $maps = array();
    165167   
    166168    $cu = wp_get_current_user();
    167169    if ($cu->has_cap('edit_users') || empty($q_config['ul_lang_protection']))
    168170    {
    169         $title = qtrans_split($after->post_title, true, $titleMap);
    170         foreach ($title as $k => $v) {
    171             if (qtrans_isEmptyContent($v))
    172                 unset($title[$k]);
    173         }
    174         $content = qtrans_split($after->post_content, true, $contentMap);
    175         foreach ($content as $k => $v) {
    176             if (qtrans_isEmptyContent($v))
    177                 unset($content[$k]);
    178         }
    179     }
    180     else
    181     {
    182         $titleBeforeMap = array();
    183         $titleBefore = qtrans_split($before->post_title, true, $titleBeforeMap);
    184         $titleAfter = qtrans_split($after->post_title, true, $titleMap);
    185         foreach ($titleAfter as $k => $v) {
    186             if (!mqtrans_currentUserCanEdit($k))
    187                 unset($titleAfter[$k], $titleMap[$k]);
    188         }
    189         $title = array_merge($titleBefore, $titleAfter);
    190         $titleMap = array_merge($titleBeforeMap, $titleMap);
    191 
    192         $contentBeforeMap = array();
    193         $contentBefore = qtrans_split($before->post_content, true, $contentBeforeMap);
    194         $contentAfter = qtrans_split($after->post_content, true, $contentMap);
    195         foreach ($contentAfter as $k => $v) {
    196             if (qtrans_isEmptyContent($v) || !mqtrans_currentUserCanEdit($k))
    197                 unset($contentAfter[$k], $contentMap[$k]);
    198         }
    199         $content = array_merge($contentBefore, $contentAfter);
    200         $contentMap = array_merge($contentBeforeMap, $contentMap);
    201     }
    202    
    203     $data = array('post_title' => qtrans_join($title, $titleMap), 'post_content' => qtrans_join($content, $contentMap));
     171        foreach ($fields as $f) {
     172            $containers[$f] = qtrans_split($after->{"post_{$f}"}, true, $maps[$f]);
     173            foreach ($containers[$f] as $k => $v) {
     174                if (qtrans_isEmptyContent($v))
     175                    unset($containers[$f]);
     176            }
     177        }
     178    }
     179    else
     180    {
     181        foreach ($fields as $f) {
     182            $beforeMap = array();
     183            $before = qtrans_split($before->{"post_{$f}"}, true, $beforeMap);
     184            $after = qtrans_split($after->{"post_{$f}"}, true, $maps[$f]);
     185            foreach ($after as $k => $v) {
     186                if (!mqtrans_currentUserCanEdit($k))
     187                    unset($after[$k], $maps[$f][$k]);
     188            }
     189            $containers[$f] = array_merge($before, $after);
     190            $maps[$f] = array_merge($beforeMap, $maps[$f]);
     191        }
     192    }
     193   
     194    $data = array();
     195    foreach ($fields as $f)
     196        $data["post_{$f}"] = qtrans_join($containers[$f], $maps[$f]);
    204197    if (get_magic_quotes_gpc())
    205198        $data = stripslashes_deep($data);
     
    247240                    <label for="ul_lang_protection"><input type="checkbox" name="ul_lang_protection" id="ul_lang_protection" value="1"<?php echo ($q_config['ul_lang_protection'])?' checked="checked"':''; ?>/> <?php _e('Enable user-level language protection', 'mqtranslate'); ?></label>
    248241                    <br />
    249                     <small><?php _e('When enabled, this option allows you to select which language is editable on a user-level account basis.', 'mqtranslate') ?></small>
     242                    <small><?php _e('When enabled, this option allows you to select which language is editable on a user-level account basis. NOTE: Only post title, content and excerpt are supported at this time.', 'mqtranslate') ?></small>
    250243                </td>
    251244            </tr>
     
    268261}
    269262
     263function mqtrans_preConfigJS($config) {
     264    global $q_config;
     265   
     266    if (empty($q_config['ul_lang_protection']) || current_user_can('edit_users'))
     267        return $config;
     268   
     269    $config['editable_languages'] = array();
     270    $config['visible_languages'] = array();
     271    foreach ($config['enabled_languages'] as $lang) {
     272        if (mqtrans_currentUserCanEdit($lang))
     273            $config['editable_languages'][] = $lang;
     274        else if (mqtrans_currentUserCanView($lang))
     275            $config['visible_languages'][] = $lang;
     276    }
     277   
     278    return $config;
     279}
     280
    270281if (!defined('WP_ADMIN'))
    271282    add_filter('get_post_metadata', 'mqtrans_filterPostMetaData', 10, 4);
     283
     284add_filter('pre_qtranslate_js',             'mqtrans_preConfigJS');
    272285
    273286add_action('edit_user_profile',             'mqtrans_userProfile');
Note: See TracChangeset for help on using the changeset viewer.