Moving to GitHub.
[platal.git] / modules / marketing.php
index e6d3aff..a939a6a 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  Copyright (C) 2003-2011 Polytechnique.org                              *
+ *  Copyright (C) 2003-2014 Polytechnique.org                              *
  *  http://opensource.polytechnique.org/                                   *
  *                                                                         *
  *  This program is free software; you can redistribute it and/or modify   *
@@ -24,15 +24,15 @@ class MarketingModule extends PLModule
     function handlers()
     {
         return array(
-            'marketing'            => $this->make_hook('marketing',  AUTH_MDP, 'admin'),
-            'marketing/promo'      => $this->make_hook('promo',      AUTH_MDP, 'admin'),
-            'marketing/relance'    => $this->make_hook('relance',    AUTH_MDP, 'admin'),
-            'marketing/this_week'  => $this->make_hook('week',       AUTH_MDP, 'admin'),
-            'marketing/volontaire' => $this->make_hook('volontaire', AUTH_MDP, 'admin'),
-
-            'marketing/private'    => $this->make_hook('private',    AUTH_MDP, 'admin'),
-            'marketing/public'     => $this->make_hook('public',     AUTH_COOKIE),
-            'marketing/broken'     => $this->make_hook('broken',     AUTH_COOKIE),
+            'marketing'            => $this->make_hook('marketing',  AUTH_PASSWD, 'admin'),
+            'marketing/promo'      => $this->make_hook('promo',      AUTH_PASSWD, 'admin'),
+            'marketing/relance'    => $this->make_hook('relance',    AUTH_PASSWD, 'admin'),
+            'marketing/this_week'  => $this->make_hook('week',       AUTH_PASSWD, 'admin'),
+            'marketing/volontaire' => $this->make_hook('volontaire', AUTH_PASSWD, 'admin'),
+
+            'marketing/private'    => $this->make_hook('private',    AUTH_PASSWD, 'admin'),
+            'marketing/public'     => $this->make_hook('public',     AUTH_COOKIE, 'user'),
+            'marketing/broken'     => $this->make_hook('broken',     AUTH_COOKIE, 'user'),
         );
     }
 
@@ -41,25 +41,37 @@ class MarketingModule extends PLModule
         $page->changeTpl('marketing/index.tpl');
         $page->setTitle('Marketing');
 
-        $alive = new UserFilter(new PFC_Not(new UFC_Dead()));
-        $registered = new UserFilter(new PFC_And(new UFC_Registered(), new PFC_Not(new UFC_Dead())));
-        $alive72 = new UserFilter(new PFC_And(new UFC_Promo('>=', UserFilter::GRADE_ING, 1972), new PFC_Not(new UFC_Dead())));
-        $registered72 = new UserFilter(new PFC_And(new UFC_Registered(), new UFC_Promo('>=', UserFilter::GRADE_ING, 1972), new PFC_Not(new UFC_Dead())));
-        $aliveWomen = new UserFilter(new PFC_And(new UFC_Sex(User::GENDER_FEMALE) , new PFC_Not(new UFC_Dead())));
-        $registeredWomen = new UserFilter(new PFC_And(new UFC_Registered(), new UFC_Sex(User::GENDER_FEMALE), new PFC_Not(new UFC_Dead())));
+        $alive = array(
+            'all'    => new ProfileFilter(new PFC_Not(new UFC_Dead())),
+            'women'  => new ProfileFilter(new PFC_And(new UFC_Sex(User::GENDER_FEMALE) , new PFC_Not(new UFC_Dead()))),
+            'x'      => new ProfileFilter(new PFC_And(new PFC_Not(new UFC_Dead()), new UFC_AccountType('x'))),
+            '72'     => new ProfileFilter(new PFC_And(new UFC_Promo('>=', UserFilter::GRADE_ING, 1972), new PFC_Not(new UFC_Dead()))),
+            'master' => new ProfileFilter(new PFC_And(new PFC_Not(new UFC_Dead()), new UFC_AccountType('master'))),
+            'phd'    => new ProfileFilter(new PFC_And(new PFC_Not(new UFC_Dead()), new UFC_AccountType('phd')))
+        );
+        $registered = array(
+            'all'    => new ProfileFilter(new PFC_And(new UFC_Registered(true), new PFC_Not(new UFC_Dead()))),
+            'women'  => new ProfileFilter(new PFC_And(new UFC_Registered(true), new UFC_Sex(User::GENDER_FEMALE), new PFC_Not(new UFC_Dead()))),
+            'x'      => new ProfileFilter(new PFC_And(new UFC_Registered(true), new PFC_Not(new UFC_Dead()), new UFC_AccountType('x'))),
+            '72'     => new ProfileFilter(new PFC_And(new UFC_Registered(true), new UFC_Promo('>=', UserFilter::GRADE_ING, 1972), new PFC_Not(new UFC_Dead()))),
+            'master' => new ProfileFilter(new PFC_And(new UFC_Registered(true), new PFC_Not(new UFC_Dead()), new UFC_AccountType('master'))),
+            'phd'    => new ProfileFilter(new PFC_And(new UFC_Registered(true), new PFC_Not(new UFC_Dead()), new UFC_AccountType('phd')))
+        );
         $statistics = array(
-            'alive'           => $alive->getTotalCount(),
-            'registered'      => $registered->getTotalCount(),
-            'alive72'         => $alive72->getTotalCount(),
-            'registered72'    => $registered72->getTotalCount(),
-            'womenAlive'      => $aliveWomen->getTotalCount(),
-            'womenRegistered' => $registeredWomen->getTotalCount(),
+            'all'    => array('description' => "Étudiants et anciens de l'X"),
+            'women'  => array('description' => "Étudiantes et anciennes de l'X"),
+            'x'      => array('description' => 'X'),
+            '72'     => array('description' => 'X vivants depuis la promo 1972'),
+            'master' => array('description' => "Masters de l'X"),
+            'phd'    => array('description' => "Docteurs de l'X")
         );
-        $statistics['registeredRate']      = $statistics['registered'] / $statistics['alive'] * 100;
-        $statistics['registeredRate72']    = $statistics['registered72'] / $statistics['alive72'] * 100;
-        $statistics['womenRegisteredRate'] = $statistics['womenRegistered'] / $statistics['womenAlive'] * 100;
+        foreach ($statistics as $key => &$data) {
+            $data['alive'] = $alive[$key]->getTotalCount();
+            $data['registered'] = $registered[$key]->getTotalCount();
+            $data['rate'] = round($data['registered'] / $data['alive'] * 100, 2);
+        }
 
-        $registeredWeek = new UserFilter(new PFC_And(new UFC_Registered(false, '>=', strtotime('1 week ago')), new PFC_Not(new UFC_Dead())));
+        $registeredWeek = new ProfileFilter(new PFC_And(new UFC_Registered(true, '>=', strtotime('1 week ago')), new PFC_Not(new UFC_Dead())));
         $registrationPending = XDB::fetchOneCell('SELECT  COUNT(*)
                                                     FROM  register_pending');
         $registrations = array(
@@ -225,7 +237,7 @@ class MarketingModule extends PLModule
         if (Post::has('mail')) {
             $email = valide_email(Post::v('mail'));
         }
-        if (Post::has('valide') && isvalid_email_redirection($email)) {
+        if (Post::has('valide') && isvalid_email_redirection($email, $user)) {
             S::assert_xsrf_token();
 
             // security stuff
@@ -263,7 +275,7 @@ class MarketingModule extends PLModule
         $uf = new UserFilter(new PFC_And(new UFC_Promo('=', UserFilter::DISPLAY, $promo),
                                          new PFC_Not(new UFC_Registered()),
                                          new PFC_Not(new UFC_Dead())),
-                             array(new UFO_Name(Profile::LASTNAME), new UFO_Name(Profile::FIRSTNAME)));
+                             array(new UFO_Name()));
         $users = $uf->getUsers();
         $page->assign('nonins', $users);
     }
@@ -291,7 +303,7 @@ class MarketingModule extends PLModule
             $email = trim(Post::v('mail'));
 
             require_once 'emails.inc.php';
-            if (!isvalid_email_redirection($email)) {
+            if (!isvalid_email_redirection($email, $user)) {
                 $page->trigError('Email invalide&nbsp;!');
             } else {
                 // On cherche les marketings précédents sur cette adresse
@@ -316,8 +328,8 @@ class MarketingModule extends PLModule
             $market = new AnnuaireMarketing(null, true);
             $text = $market->getText(array(
                 'sexe'           => $user->isFemale(),
-                'forlife_email'  => $user->forlifeEmail(),
-                'forlife_email2' => $user->forlifeEmailAlternate()
+                'forlife_email'  => $user->hruid . "@" . $user->mainEmailDomain(),
+                'forlife_email2' => $user->hruid . "@" . $user->alternateEmailDomain()
             ));
             $text = str_replace('%%hash%%', '', $text);
             $text = str_replace('%%personal_notes%%', '<em id="personal_notes_display"></em>', $text);
@@ -389,5 +401,5 @@ class MarketingModule extends PLModule
     }
 }
 
-// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
+// vim:set et sw=4 sts=4 sws=4 foldmethod=marker fenc=utf-8:
 ?>