Prevents profile's subitems to be more public than the item they belong to (client...
authorStéphane Jacob <sj@m4x.org>
Wed, 8 Dec 2010 10:42:49 +0000 (11:42 +0100)
committerStéphane Jacob <sj@m4x.org>
Wed, 8 Dec 2010 12:32:46 +0000 (13:32 +0100)
Signed-off-by: Stéphane Jacob <sj@m4x.org>
htdocs/javascript/profile.js
modules/profile.php
templates/include/emails.combobox.tpl
templates/include/flags.radio.tpl
templates/profile/adresses.address.tpl
templates/profile/general.tpl
templates/profile/jobs.job.tpl
templates/profile/phone.tpl

index dcd3fec..a173e4b 100644 (file)
@@ -45,7 +45,7 @@ function wizPage_onLoad(id)
         }
         break;
       case 'emploi':
-        if ($('#job_0').find("[name='jobs[0][name]']").val() == '') {
+        if ($('#jobs_0').find("[name='jobs[0][name]']").val() == '') {
             registerEnterpriseAutocomplete(0);
         }
         break;
@@ -58,6 +58,12 @@ var educationDegreeName;
 var subgrades;
 var names;
 
+// Publicity follows the following ordering: private < ax < public.
+var publicity = [];
+publicity['private'] = 0;
+publicity['ax']      = 1;
+publicity['public']  = 2;
+
 // Names {{{1
 
 function toggleNamesAdvanced()
@@ -339,7 +345,7 @@ function validGeoloc(prefid, id, geoloc)
 
 // {{{1 Phones
 
-function addTel(prefid, prefname)
+function addTel(prefid, prefname, subField, mainField, mainId)
 {
     var i = 0;
     var prefix  = prefid + '_';
@@ -347,7 +353,7 @@ function addTel(prefid, prefname)
         i++;
     }
     $('#' + prefix + 'add').before('<div id="' + prefix + i + '" style="clear: both; padding-top: 4px; padding-bottom: 4px"></div>');
-    Ajax.update_html(prefix + i, 'profile/ajax/tel/' + prefid + '/' + prefname + '/' + i);
+    Ajax.update_html(prefix + i, 'profile/ajax/tel/' + prefid + '/' + prefname + '/' + i + '/' + subField + '/' + mainField + '/' + mainId);
 }
 
 function removeTel(prefname, prefid, id)
@@ -519,7 +525,7 @@ function makeAddJob(id)
 function addJob()
 {
     var i = 0;
-    while ($('#job_' + i).length != 0) {
+    while ($('#jobs_' + i).length != 0) {
         ++i;
     }
     $.get(platal_baseurl + 'profile/ajax/job/' + i, makeAddJob(i));
@@ -547,23 +553,23 @@ function addJobTerm(jobid, jtid, full_name)
         jobid = '';
         formvarname = 'terms';
     } else {
-        parentpath = '#job_'+jobid+' ';
+        parentpath = '#jobs_'+jobid+' ';
         formvarname = 'jobs['+jobid+'][terms]';
     }
-    var lastJobTerm = $(parentpath + '.job_term:last');
+    var lastJobTerm = $(parentpath + '.jobs_term:last');
     if (lastJobTerm.length != 0) {
         termid = parseInt(lastJobTerm.children('input').attr('name').replace(/^(jobs\[[0-9]+\]\[terms\]|terms)\[([0-9]+)\]\[jtid\]/, '$2')) + 1;
         if ($('#job'+jobid+'_term'+jtid).length > 0) {
             return false;
         }
     }
-    var newdiv = '<div class="job_term" id="job'+jobid+'_term'+jtid+'">'+
+    var newdiv = '<div class="jobs_term" id="job'+jobid+'_term'+jtid+'">'+
         '<span>'+full_name+'</span>'+
         '<input type="hidden" name="'+formvarname+'['+termid+'][jtid]" value="'+jtid+'" />'+
         '<img title="Retirer ce mot-clef" alt="retirer" src="images/icons/cross.gif" />'+
         '</div>';
     if (lastJobTerm.length == 0) {
-        $(parentpath + '.job_terms').prepend(newdiv);
+        $(parentpath + '.jobs_terms').prepend(newdiv);
     } else {
         lastJobTerm.after(newdiv);
     }
@@ -611,7 +617,7 @@ function selectJobTerm(li)
     if (jobid < 0) {
         search_input = $('.term_search')[0];
     } else {
-        search_input = $('#job_'+jobid+' .term_search')[0];
+        search_input = $('#jobs_'+jobid+' .term_search')[0];
     }
     if (li.extra[0] >= 0) {
         search_input.value = '';
@@ -632,7 +638,7 @@ function toggleJobTermsTree(jobid, textfilter)
     if (jobid < 0) {
         treepath = '';
     } else {
-        treepath = '#job_'+jobid+' ';
+        treepath = '#jobs_'+jobid+' ';
     }
     treepath += '.term_tree';
     if ($(treepath + ' ul').length > 0) {
@@ -733,4 +739,42 @@ function removeElement(cat, id)
     updateElement(cat);
 }
 
+function updateSubPublicity(subFieldId, name, mainPub)
+{
+    var subPub = $(subFieldId).find("[name='" + name + "']:checked").val();
+    if (publicity[subPub] > publicity[mainPub]) {
+        $(subFieldId).find("[name='" + name + "']:checked").removeAttr('checked');
+        $(subFieldId).find('[value=' + mainPub + ']').attr('checked', 'checked');
+    }
+}
+
+function updatePublicity(mainField, mainId, subField, subId)
+{
+    var mainFieldId = '#' + mainField + '_' + mainId;
+    var mainPub = $(mainFieldId).find("[name='" + mainField + "[" + mainId + "][pub]']:checked").val();
+    if (subId == -1) {
+        var subFields = subField.split(',');
+        for (var i =0; i < subFields.length; ++i) {
+            var subFieldBaseId = mainFieldId + '_' + subFields[i];
+            var name = mainField + '[' + mainId + '][' + subFields[i] + ']';
+            if ($(subFieldBaseId).length != 0) {
+                updateSubPublicity(subFieldBaseId, name + '[pub]', mainPub);
+                updateSubPublicity(subFieldBaseId, mainField + '[' + mainId + '][' + subFields[i] + '_pub]', mainPub);
+            }
+            subId = 0;
+            while ($(subFieldBaseId + '_' + subId).length != 0) {
+                updateSubPublicity(subFieldBaseId + '_' + subId, name + '[' + subId + '][pub]', mainPub);
+                ++subId;
+            }
+        }
+    } else {
+        if (subId == '') {
+            updateSubPublicity(mainFieldId + '_' + subField, mainField + '[' + mainId + '][' + subField + '_pub]', mainPub);
+            updateSubPublicity(mainFieldId + '_' + subField, mainField + '[' + mainId + '][' + subField + '][pub]', mainPub);
+        } else {
+            updateSubPublicity(mainFieldId + '_' + subField + '_' + subId, mainField + '[' + mainId + '][' + subField + '][' + subId + '][pub]', mainPub);
+        }
+    }
+}
+
 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
index 1c1d61a..5a23f80 100644 (file)
@@ -401,7 +401,7 @@ class ProfileModule extends PLModule
         $page->assign('address', array());
     }
 
-    function handler_ajax_tel(&$page, $prefid, $prefname, $telid)
+    function handler_ajax_tel(&$page, $prefid, $prefname, $telid, $subField, $mainField, $mainId)
     {
         pl_content_headers("text/html");
         $page->changeTpl('profile/phone.tpl', NO_SKIN);
@@ -410,6 +410,11 @@ class ProfileModule extends PLModule
         $page->assign('telid', $telid);
         $phone = new Phone();
         $page->assign('tel', $phone->toFormArray());
+        if ($mainField) {
+            $page->assign('subField', $subField);
+            $page->assign('mainField', $mainField);
+            $page->assign('mainId', $mainId);
+        }
     }
 
     function handler_ajax_edu(&$page, $eduid, $class)
index f0b1067..518bda8 100644 (file)
@@ -22,7 +22,7 @@
 
 {assign var=new value="new"|cat:$i}
 {assign var=combobox value="combobox"|cat:$i}
-<tr {if $class}class="{$class}"{/if}>
+<tr{if $class} class="{$class}"{/if}{if t($divId)} id="{$divId}"{/if}>
   <td class="titre">
   {if $name eq "email_directory"}
     Email&nbsp;annuaire&nbsp;AX
       <input type="checkbox" disabled="disabled" checked="checked"/>
       {icon name="flag_orange" title="Visible sur l'annuaire"}
     {elseif $name neq "email"}
+    {if t($mainField)}
+    {include file="include/flags.radio.tpl" name="`$jobpref`[`$prefix`email_pub]" val=$pub
+             mainField=$mainField mainId=$mainId subField=$subField subId=$subId}
+    {else}
     {include file="include/flags.radio.tpl" name="`$jobpref`[`$prefix`email_pub]" val=$pub}
     {/if}
+    {/if}
     </div>
     {/if}
   </td>
index 0cbd313..6059b43 100644 (file)
 {/if}
 {if !t($val)}{assign var=val value='ax'}{/if}
 <label><input type="radio" name="{$name}" value="public"{if $val eq 'public'} checked="checked"{/if}
-       {if t($disabled)}disabled="disabled"{/if}{if t($onchange)} onchange="{$onchange}('{$id}', '{$subId}')"{/if} />
+       {if t($disabled)}disabled="disabled"{/if}{if t($mainField)} onchange="updatePublicity('{$mainField}','{$mainId}','{$subField}','{$subId}')"{/if} />
 {icon name="flag_green" title="site public"}
 {if t($withtext)}<span class="texte">site public</span>{/if}</label>
 <label><input type="radio" name="{$name}" value="ax"{if $val eq 'ax'} checked="checked"{/if}
-       {if t($disabled)}disabled="disabled"{/if}{if t($onchange)} onchange="{$onchange}('{$id}', '{$subId}')"{/if} />
+       {if t($disabled)}disabled="disabled"{/if}{if t($mainField)} onchange="updatePublicity('{$mainField}','{$mainId}','{$subField}','{$subId}')"{/if} />
 {icon name="flag_orange" title="transmis à l'AX"}
 {if t($withtext)}<span class="texte">transmis à l'AX</span>{/if}</label>
 <label><input type="radio" name="{$name}" value="private"{if $val eq 'private'} checked="checked"{/if}
-       {if t($disabled)}disabled="disabled"{/if}{if t($onchange)} onchange="{$onchange}('{$id}', '{$subId}')"{/if} />
+       {if t($disabled)}disabled="disabled"{/if}{if t($mainField)} onchange="updatePublicity('{$mainField}','{$mainId}','{$subField}','{$subId}')"{/if} />
 {icon name="flag_red" title="privé"}
 {if t($withtext)}<span class="texte">privé</span>{/if}</label>
 {* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *}
index 207b1e0..69ebf09 100644 (file)
@@ -59,7 +59,7 @@
   <tr {if $hiddenaddr}style="display: none"{/if}>
     <td>
       <div style="margin-bottom: 0.2em" class="flags">
-        {include file="include/flags.radio.tpl" name="`$prefname`[pub]" val=$address.pub}
+        {include file="include/flags.radio.tpl" name="`$prefname`[pub]" val=$address.pub mainField='addresses' mainId=$i subField='phones' subId=-1}
       </div>
       <div style="clear: both"></div>
       <div style="float: left">
   <tr class="pair" {if $hiddenaddr}style="display: none"{/if}>
     <td>
       {foreach from=$address.phones key=t item=tel}
-        <div id="{"`$prefid`_tel_`$t`"}" style="clear: both">
-          {include file="profile/phone.tpl" prefname="`$prefname`[phones]"
-                   prefid="`$prefid`_tel" telid=$t tel=$tel}
+        <div id="{"`$prefid`_phones_`$t`"}" style="clear: both">
+          {include file="profile/phone.tpl" prefname="`$prefname`[phones]" prefid="`$prefid`_phones" telid=$t tel=$tel
+                   subField='phones' mainField='addresses' mainId=$i}
         </div>
       {/foreach}
       {if $address.phones|@count eq 0}
-        <div id="{"`$prefid`_tel_0"}" style="clear: both">
-          {include file="profile/phone.tpl" prefname="`$prefname`[phones]" prefid="`$prefid`_tel" telid=0 tel=0}
+        <div id="{"`$prefid`_phones_0"}" style="clear: both">
+          {include file="profile/phone.tpl" prefname="`$prefname`[phones]" prefid="`$prefid`_phones" telid=0 tel=0
+                   subField='phones' mainField='addresses' mainId=$i}
         </div>
       {/if}
-      <div id="{$prefid}_tel_add" class="center" style="clear: both; padding-top: 4px">
-        <a href="javascript:addTel('{$prefid}_tel','{$prefname}[phones]')">
+      <div id="{$prefid}_phones_add" class="center" style="clear: both; padding-top: 4px">
+        <a href="javascript:addTel('{$prefid}_phones','{$prefname}[phones]','phones','addresses','{$i}')">
           {icon name=add title="Ajouter un numéro de téléphone"} Ajouter un numéro de téléphone
         </a>
       </div>
index 38beb25..5636c15 100644 (file)
         </div>
       {/if}
       <div id="tels_add" class="center" style="clear: both; padding-top: 4px;">
-        <a href="javascript:addTel('tels','tels');">
+        <a href="javascript:addTel('tels','tels',null,null,null);">
           {icon name=add title="Ajouter un téléphone"} Ajouter un téléphone
         </a>
       </div>
index 0fbb748..a1836c8 100644 (file)
@@ -22,7 +22,7 @@
 
 
 <script type="text/javascript" src="javascript/jquery.jstree.js"></script>
-{assign var=jobid value="job_"|cat:$i}
+{assign var=jobid value="jobs_"|cat:$i}
 {assign var=jobpref value="jobs[`$i`]"}
 {assign var=sector_text value="sector_text_"|cat:$i}
 {assign var=sector value="sector_"|cat:$i}
@@ -52,7 +52,8 @@
     <tr>
       <th colspan="2" style="text-align: right">
         <div class="flags" style="float: left; text-align: left">
-          {include file="include/flags.radio.tpl" name="`$jobpref`[pub]" val=$job.pub disabled=$hiddenjob}
+          {include file="include/flags.radio.tpl" name="`$jobpref`[pub]" val=$job.pub disabled=$hiddenjob
+                   mainField='jobs' mainId=$i subField='w_address,w_email,w_phone' subId=-1}
         </div>
         Entreprise n°{$i+1}&nbsp;:
         {if $hiddenjob}
     </tr>
     <tr class="pair" id="{$sector_text}" {if $hiddenjob}style="display: none"{/if}>
       <td class="titre">Mots-clefs</td>
-      <td class="job_terms">
+      <td class="jobs_terms">
         <input type="text" class="term_search" size="35"/>
         <a href="javascript:toggleJobTermsTree({$i})">{icon name="table" title="Tous les mots-clefs"}</a>
         <script type="text/javascript">
           {foreach from=$job.terms item=term}
           addJobTerm("{$i}", "{$term.jtid}", "{$term.full_name|replace:'"':'\\"'}");
           {/foreach}
-          $('#job_{$i} .term_search').autocomplete(platal_baseurl + 'profile/jobterms',
+          $('#jobs_{$i} .term_search').autocomplete(platal_baseurl + 'profile/jobterms',
             {ldelim}
               "formatItem" : displayJobTerm,
               "extraParams" : {ldelim} "jobid" : "{$i}" {rdelim},
-              "width" : $('#job_{$i} .term_search').width()*2,
+              "width" : $('#jobs_{$i} .term_search').width()*2,
               "onItemSelect" : selectJobTerm,
               "matchSubset" : false
             {rdelim});
                  name="{$jobpref}[w_url]" value="{$job.w_url}" />
       </td>
     </tr>
-    <tr class="pair" {if $hiddenjob}style="display: none"{/if}>
+    <tr id="{$jobid}_w_address" class="pair" {if $hiddenjob}style="display: none"{/if}>
       <td colspan="2">
         <div style="float: left">
           <div class="titre">Adresse</div>
           <div class="flags">
-            {include file="include/flags.radio.tpl" name="`$jobpref`[w_address][pub]" val=$job.w_address.pub}
+            {include file="include/flags.radio.tpl" name="`$jobpref`[w_address][pub]" val=$job.w_address.pub
+                     subField='w_address' mainField='jobs' mainId=$i subId=''}
           </div>
           <div style="margin-top: 20px; clear: both">
             {include file="geoloc/form.address.tpl" prefname="`$jobpref`[w_address]"
     </tr>
     {else}
     {include file="include/emails.combobox.tpl" name=$jobpref|cat:'[w_email]' val=$job.w_email
-             class="pair" i=$i error=$job.w_email_error prefix="w_" pub=$job.w_email_pub id=$i}
+             class="pair" divId="`$jobid`_w_email" i=$i error=$job.w_email_error prefix="w_" pub=$job.w_email_pub id=$i
+             subField='w_email' mainField='jobs' mainId=$i subId=''}
     {/if}
     <tr class="pair" {if $hiddenjob}style="display: none"{/if}>
       <td colspan="2">
         {foreach from=$job.w_phone key=t item=phone}
           <div id="{"`$jobid`_w_phone_`$t`"}" style="clear: both">
-            {include file="profile/phone.tpl" prefname="`$jobpref`[w_phone]" prefid="`$jobid`_w_phone" telid=$t tel=$phone}
+            {include file="profile/phone.tpl" prefname="`$jobpref`[w_phone]" prefid="`$jobid`_w_phone" telid=$t tel=$phone
+                     subField='w_phone' mainField='jobs' mainId=$i}
           </div>
         {/foreach}
         {if $job.w_phone|@count eq 0}
           <div id="{"`$jobid`_w_phone_0"}" style="clear: both">
-            {include file="profile/phone.tpl" prefname="`$jobpref`[w_phone]" prefid="`$jobid`_w_phone" telid=0 tel=0}
+            {include file="profile/phone.tpl" prefname="`$jobpref`[w_phone]" prefid="`$jobid`_w_phone" telid=0 tel=0
+                     subField='w_phone' mainField='jobs' mainId=$i}
           </div>
         {/if}
         <div id="{$jobid}_w_phone_add" class="center" style="clear: both; padding-top: 4px;">
-          <a href="javascript:addTel('{$jobid}_w_phone','{$jobpref}[w_phone]')">
+          <a href="javascript:addTel('{$jobid}_w_phone','{$jobpref}[w_phone]','w_phone','jobs','{$i}')">
             {icon name=add title="Ajouter un numéro de téléphone"} Ajouter un numéro de téléphone
           </a>
         </div>
index 767e3d1..376b956 100644 (file)
   </a>
 </div>
 <div style="float: right" class="flags">
-  {include file="include/flags.radio.tpl" name="`$telpref`[pub]"
-           val=$tel.pub disabled=$hiddentel}
+  {if t($mainField)}
+  {include file="include/flags.radio.tpl" name="`$telpref`[pub]" val=$tel.pub disabled=$hiddentel
+           mainField=$mainField mainId=$mainId subField=$subField subId=$telid}
+  {else}
+  {include file="include/flags.radio.tpl" name="`$telpref`[pub]" val=$tel.pub disabled=$hiddentel}
+  {/if}
 </div>
 <div id="{$id}_comment" style="clear: both;{if $tel.comment eq ''} display:none{/if}">
   Commentaire :