List updated fields in carnet notification (only rss and panel for now,
authorFlorent Bruneau <florent.bruneau@polytechnique.org>
Thu, 18 Oct 2007 19:34:34 +0000 (21:34 +0200)
committerFlorent Bruneau <florent.bruneau@polytechnique.org>
Thu, 18 Oct 2007 19:34:34 +0000 (21:34 +0200)
email may come later)
Signed-off-by: Florent Bruneau <florent.bruneau@polytechnique.org>
15 files changed:
ChangeLog
include/notifs.inc.php
include/validations/medals.inc.php
include/validations/nomusage.inc.php
include/validations/photos.inc.php
modules/profile/addresses.inc.php
modules/profile/decos.inc.php
modules/profile/general.inc.php
modules/profile/groups.inc.php
modules/profile/jobs.inc.php
modules/profile/page.inc.php
templates/carnet/panel.tpl
templates/carnet/rss.tpl
upgrade/0.9.16/00_profile.sql [new file with mode: 0644]
upgrade/0.9.16/update.sh [new file with mode: 0755]

index 7447afb..8a290eb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,11 @@
 ================================================================================
 VERSION 0.9.16                                                        XX XX 2007
 
+New:
+
+    * Carnet:
+        - List updated fields in notifications                             -FRU
+
 
 ================================================================================
 VERSION 0.9.15                                                        08 10 2007
index b77bd34..4daeaf6 100644 (file)
@@ -39,9 +39,13 @@ function register_watch_op($uid, $cid, $date='', $info='')
     if (empty($date)) {
         $date = date('Y-m-d');
     };
-    XDB::execute('REPLACE INTO watch_ops (uid,cid,known,date,info) VALUES({?},{?},NOW(),{?},{?})',
-        $uid, $cid, $date, $info);
+    XDB::execute('REPLACE INTO  watch_ops (uid,cid,known,date,info)
+                        VALUES  ({?}, {?}, NOW(), {?}, {?})',
+                 $uid, $cid, $date, $info);
     if($cid == WATCH_FICHE) {
+        if ($info) {
+            register_profile_update($uid, $info);
+        }
         XDB::execute('UPDATE auth_user_md5 SET DATE=NOW() WHERE user_id={?}', $uid);
     } elseif($cid == WATCH_INSCR) {
         XDB::execute('REPLACE INTO  contacts (uid,contact)
@@ -153,6 +157,51 @@ function getNbNotifs()
 }
 
 // }}}
+// {{{
+
+global $prf_desc;
+$prf_desc = array('nom' => 'Son patronyme',
+                  'freetext' => 'Le texte libre',
+                  'mobile' => 'Son numéro de téléphone portable',
+                  'nationalite' => 'Sa nationalité',
+                  'nick' => 'Son surnom',
+                  'web' => 'L\'adresse de son site web',
+                  'appli1' => 'Son école d\'application',
+                  'appli2' => 'Son école de post-application',
+                  'addresses' => 'Ses adresses',
+                  'section' => 'Sa section sportive',
+                  'binets' => 'La liste de ses binets',
+                  'medals' => 'Ses décorations',
+                  'cv' => 'Son Curriculum Vitae',
+                  'jobs' => 'Ses informations professionnelles',
+                  'photo' => 'Sa photographie');
+
+function get_profile_change_details($event, $limit) {
+    global $prf_desc;
+    $res = XDB::iterRow("SELECT  field
+                           FROM  watch_profile
+                          WHERE  uid = {?} AND ts > {?}
+                       ORDER BY  ts DESC",
+                         $event['uid'], $limit);
+    if ($res->total() > 0) {
+        $data = array();
+        while (list($field) = $res->next()) {
+            $data[] .= $prf_desc[$field];
+        }
+        return '<ul><li>' . implode('</li><li>', $data) . '</li></ul>';
+    }
+    return null;
+}
+
+// }}}
+// {{{ function register_profile_update
+
+function register_profile_update($uid, $field) {
+    XDB::execute("REPLACE INTO  watch_profile (uid, ts, field)
+                        VALUES  ({?}, NOW(), {?})",
+                 $uid, $field);
+}
+
 // {{{ class AllNotifs
 
 class AllNotifs
@@ -208,6 +257,9 @@ class Notifs
         // depuis la semaine dernière, meme ceux sans surveillance, ordonnés
         $res = select_notifs(false, $uid, $lastweek);
         while($tmp = $res->next()) {
+            if ($tmp['cid'] == WATCH_FICHE) {
+                $tmp['data'] = get_profile_change_details($tmp, $lastweek);
+            }
             $this->_data[$tmp['cid']][$tmp['promo']][] = $tmp;
         }
 
index 7e65dc5..3331509 100644 (file)
@@ -100,7 +100,11 @@ class MedalReq extends Validate
 
     public function commit ()
     {
-        return XDB::execute('REPLACE INTO profile_medals_sub VALUES({?}, {?}, {?})', $this->uid, $this->mid, $this->gid);
+        require_once 'notifs.inc.php';
+        register_watch_op($this->uid, WATCH_FICHE, 'medals');
+        return XDB::execute('REPLACE INTO  profile_medals_sub
+                                   VALUES  ({?}, {?}, {?})',
+                            $this->uid, $this->mid, $this->gid);
     }
 
     // }}}
index 5c01b0c..ffca658 100644 (file)
@@ -103,6 +103,8 @@ class UsageReq extends Validate
 
     public function commit()
     {
+        require_once 'notifs.inc.php';
+        register_watch_op($this->uid, WATCH_FICHE, 'nom');
         require_once('user.func.inc.php');
         $this->bestalias = set_new_usage($this->uid, $this->nom_usage, $this->alias);
         return true;
index c62cff7..40f2cc1 100644 (file)
@@ -137,11 +137,11 @@ class PhotoReq extends Validate
 
     public function commit()
     {
+        require_once 'notifs.inc.php';
         XDB::execute('REPLACE INTO  photo (uid, attachmime, attach, x, y)
                             VALUES  ({?},{?},{?},{?},{?})',
                      $this->uid, $this->mimetype, $this->data, $this->x, $this->y);
-        require_once('notifs.inc.php');
-        register_watch_op($this->uid, WATCH_FICHE);
+        register_watch_op($this->uid, WATCH_FICHE, 'photo');
         return true;
     }
 
index 0717bb6..d879104 100644 (file)
@@ -172,6 +172,7 @@ class ProfileAddresses extends ProfilePage
     {
         parent::__construct($wiz);
         $this->settings['addresses'] = new ProfileAddress();
+        $this->watched['addresses'] = true;
     }
 
     protected function _fetchData()
index ab1d9fd..de68fd6 100644 (file)
@@ -92,6 +92,7 @@ class ProfileDecos extends ProfilePage
         parent::__construct($wiz);
         $this->settings['medals'] = new ProfileDeco();
         $this->settings['medals_pub'] = new ProfilePub();
+        $this->watched['medals'] = true;
     }
 
     protected function _fetchData()
index f106838..11d3076 100644 (file)
@@ -117,6 +117,8 @@ class ProfileGeneral extends ProfilePage
         $this->settings['appli1']
                                   = $this->settings['appli2']
                                   = new ProfileAppli();
+        $this->watched= array('nom' => true, 'freetext' => true, 'mobile' => true, 'web' => true,
+                       'appli1' => true, 'appli2' => true, 'nationalite' => true, 'nick' => true);
     }
 
     protected function _fetchData()
index 83d89f3..42165ed 100644 (file)
@@ -103,6 +103,7 @@ class ProfileGroups extends ProfilePage
         parent::__construct($wiz);
         $this->settings['section']  = new ProfileSection();
         $this->settings['binets']   = new ProfileGroup('binets', 'user_id', 'binet_id');
+        $this->watched['section'] = $this->watched['binets'] = true;
     }
 
     public function _prepare(PlatalPage &$page, $id)
index e7e4321..1ea4d5d 100644 (file)
@@ -130,6 +130,7 @@ class ProfileJobs extends ProfilePage
         parent::__construct($wiz);
         $this->settings['cv'] = null;
         $this->settings['jobs'] = new ProfileJob();
+        $this->watched['cv'] = $this->watched['jobs'] = true;
     }
 
     protected function _fetchData()
index 96344b8..c11793f 100644 (file)
@@ -201,6 +201,7 @@ abstract class ProfilePage implements PlWizardPage
     protected $settings = array();  // A set ProfileSetting objects
     protected $errors   = array();  // A set of boolean with the value check errors
     protected $changed  = array();  // A set of boolean indicating wether the value has been changed
+    protected $watched  = array();  // A set of boolean indicating the fields that are watched
 
     public $orig     = array();
     public $values   = array();
@@ -240,10 +241,14 @@ abstract class ProfilePage implements PlWizardPage
 
     protected function saveData()
     {
+        require_once 'notifs.inc.php';
         foreach ($this->settings as $field=>&$setting) {
             if (!is_null($setting) && $this->changed[$field]) {
                 $setting->save($this, $field, $this->values[$field]);
             }
+            if ($this->changed[$field] && @$this->watched[$field]) {
+                register_profile_update(S::i('uid'), $field);
+            }
         }
         $this->_saveData();
 
@@ -251,7 +256,6 @@ abstract class ProfilePage implements PlWizardPage
         XDB::execute('REPLACE INTO  user_changes
                                SET  user_id = {?}', S::v('uid'));
         if (!S::has('suid')) {
-            require_once 'notifs.inc.php';
             register_watch_op(S::i('uid'), WATCH_FICHE);
         }
         global $platal;
index f11f063..64d80f2 100644 (file)
@@ -62,7 +62,7 @@ Il faut pour cela se rendre sur la page de <a href='carnet/notifs'>configuration
   {foreach from=$c key=p item=promo}
   {section name=row loop=$promo}
   <tr {if ( $promo[row].known > $smarty.session.watch_last ) || ( $promo[row].date eq $today ) }style="font-weight: bold"{/if}>
-    <td class='titre' style="width:15%">{if $smarty.section.row.first}{$p}{/if}</td>
+    <td class='titre' style="width:15%" {if $promo[row].data}rowspan="2"{/if}>{if $smarty.section.row.first}{$p}{/if}</td>
     <td>
       {if $promo[row].inscrit}
       <a href="profile/{$promo[row].bestalias}" class="popup2">
@@ -76,9 +76,12 @@ Il faut pour cela se rendre sur la page de <a href='carnet/notifs'>configuration
       {$promo[row].prenom} {$promo[row].nom}
       {/if}
     </td>
-    <td style="width:25%">
+    <td style="width:25%" {if $promo[row].data}rowspan="2"{/if}>
       {$promo[row].date|date_format}
     </td>
+    {if $promo[row].data}
+    <tr><td>{$promo[row].data|smarty:nodefaults}</td></tr>
+    {/if}
   </tr>
   {/section}
   {/foreach}
index 6dbf65d..f2a53d0 100644 (file)
@@ -42,6 +42,7 @@
       <link>{#globals.baseurl#}/profile/private/{$x.bestalias}</link>
       <guid isPermaLink="false">carnet{$x.known}{$cid}{$x.bestalias}</guid>
       <description><![CDATA[
+        {if $x.data}{$x.prenom} {$x.nom} a mis à jours les données suivantes&nbsp;:<br />{$x.data}<br />{/if}
         {if !$x.contact and !$x.dcd}
         <a href="{#globals.baseurl#}/carnet/contacts?action=ajouter&amp;user={$x.bestalias}">
           {icon name=add title="Ajouter" full=true} Ajouter &agrave; mes contacts
diff --git a/upgrade/0.9.16/00_profile.sql b/upgrade/0.9.16/00_profile.sql
new file mode 100644 (file)
index 0000000..3afd0a8
--- /dev/null
@@ -0,0 +1,10 @@
+create table watch_profile (
+  uid int(5) unsigned not null,
+  ts timestamp not null default CURRENT_TIMESTAMP,
+  field enum('nom', 'freetext', 'mobile', 'nationalite', 'nick', 'web', 'appli1', 'appli2',
+             'addresses', 'section', 'binets', 'medals', 'cv', 'jobs', 'photo'),
+
+  primary key field (uid, field)
+) charset=utf8;
+
+# vim:set syntax=mysql:
diff --git a/upgrade/0.9.16/update.sh b/upgrade/0.9.16/update.sh
new file mode 100755 (executable)
index 0000000..de82fc0
--- /dev/null
@@ -0,0 +1,32 @@
+#!/bin/bash
+
+. ../inc/pervasive.sh
+
+mailman_stop
+mailman_templates
+mailman_start
+
+
+###########################################################
+for sql in *.sql
+do
+    echo -n $sql
+    $MYSQL x4dat < $sql &>/dev/null || echo -n " ERROR"
+    echo .
+done
+
+###########################################################
+
+echo "we will now upgrade the search table (this may be a long operation)
+
+please hit ^D to continue
+"
+
+cat
+
+pushd ../../bin
+./search.rebuild_db.php
+popd
+
+###########################################################
+