예제 #1
1
파일: fusionax.php 프로젝트: Ekleog/platal
 function handler_issues_promo($page, $action = '')
 {
     $page->changeTpl('fusionax/promo_issues.tpl');
     if ($action == 'edit') {
         S::assert_xsrf_token();
         $issues = XDB::rawIterRow('SELECT  p.pid, pd.directory_name, pd.promo, pm.entry_year_ax, pe.entry_year, pe.grad_year
                                      FROM  profile_merge_issues AS pm
                                INNER JOIN  profiles             AS p  ON (pm.pid = p.pid)
                                INNER JOIN  profile_display      AS pd ON (pd.pid = p.pid)
                                INNER JOIN  profile_education    AS pe ON (pe.pid = p.pid AND FIND_IN_SET(\'primary\', pe.flags))
                                     WHERE  FIND_IN_SET(\'promo\', pm.issues)
                                  ORDER BY  pd.directory_name');
         while (list($pid, $name, $promo, $deathAX, $deathXorgEntry, $deathXorgGrad) = $issues->next()) {
             $choiceXorg = Post::has('XORG_' . $pid);
             if (!(Post::has('display_' . $pid) && Post::has('entry_' . $pid) && Post::has('grad_' . $pid))) {
                 continue;
             }
             $display = Post::i('display_' . $pid);
             $entry = Post::i('entry_' . $pid);
             $grad = Post::i('grad_' . $pid);
             if (!($grad <= $entry + 5 && $grad >= $entry + 3 && ($display >= $entry && $display <= $grad - 3))) {
                 $page->trigError("La promotion de {$name} n'a pas été corrigée.");
                 continue;
             }
             XDB::execute('UPDATE  profile_display
                              SET  promo = {?}
                            WHERE  pid = {?}', 'X' . $display, $pid);
             XDB::execute('UPDATE  profile_education
                              SET  entry_year = {?}, grad_year = {?}
                            WHERE  pid = {?} AND FIND_IN_SET(\'primary\', flags)', $entry, $grad, $pid);
             $page->trigSuccess("La promotion de {$name} a bien été corrigée.");
         }
     }
     $issues = XDB::rawFetchAllAssoc('SELECT  p.pid, p.hrpid, pd.directory_name, pd.promo, pm.entry_year_ax, pe.entry_year, pe.grad_year
                                        FROM  profile_merge_issues AS pm
                                  INNER JOIN  profiles             AS p  ON (pm.pid = p.pid)
                                  INNER JOIN  profile_display      AS pd ON (pd.pid = p.pid)
                                  INNER JOIN  profile_education    AS pe ON (pe.pid = p.pid AND FIND_IN_SET(\'primary\', pe.flags))
                                       WHERE  FIND_IN_SET(\'promo\', pm.issues)
                                    ORDER BY  pd.directory_name');
     $page->assign('issues', $issues);
     $page->assign('total', count($issues));
 }
예제 #2
0
파일: geoloc.php 프로젝트: Ekleog/platal
 public static function assign_json_to_map(PlPage $page, $pids = null)
 {
     if (!is_null($pids)) {
         $where = XDB::format(' AND pa.pid IN {?}', $pids);
     } else {
         $where = '';
     }
     if (!S::logged() || !S::user()->checkPerms('directory_ax')) {
         $where .= " AND pa.pub = 'public'";
         $name_publicity = 'public';
     } else {
         if (!S::user()->checkPerms('directory_private')) {
             $where .= " AND pa.pub = 'ax'";
             $name_publicity = 'public';
         } else {
             $name_publicity = 'private';
         }
     }
     $data = XDB::rawFetchAllAssoc('SELECT  pa.latitude, pa.longitude, GROUP_CONCAT(DISTINCT p.hrpid SEPARATOR \',\') AS hrpid,
                                            GROUP_CONCAT(pd.promo SEPARATOR \',\') AS promo,
                                            GROUP_CONCAT(DISTINCT pd.' . $name_publicity . '_name, \' (\', pd.promo, \')\' SEPARATOR \', \') AS name,
                                            GROUP_CONCAT(DISTINCT pa.pid SEPARATOR \',\') AS pid
                                      FROM  profile_addresses AS pa
                                INNER JOIN  profiles          AS p  ON (pa.pid = p.pid)
                                INNER JOIN  profile_display   AS pd ON (pd.pid = pa.pid)
                                     WHERE  pa.type = \'home\' AND p.deathdate IS NULL AND pa.latitude IS NOT NULL AND pa.longitude IS NOT NULL' . $where . '
                                  GROUP BY  pa.latitude, pa.longitude');
     $page->jsonAssign('data', $data);
 }
예제 #3
0
파일: admin.php 프로젝트: Ekleog/platal
 function handler_geocoding($page, $category = null, $action = null, $id = null)
 {
     // Warning, this handler requires the following packages:
     //  * pkg-isocodes
     //  * isoquery
     static $properties = array('country' => array('name' => 'pays', 'isocode' => '3166', 'table' => 'geoloc_countries', 'id' => 'iso_3166_1_a2', 'main_fields' => array('iso_3166_1_a3', 'iso_3166_1_num', 'countryEn'), 'other_fields' => array('worldRegion', 'country', 'capital', 'nationality', 'nationalityEn', 'phonePrefix', 'phoneFormat', 'licensePlate', 'belongsTo')), 'language' => array('name' => 'langages', 'isocode' => '639', 'table' => 'profile_langskill_enum', 'id' => 'iso_639_2b', 'main_fields' => array('iso_639_2t', 'iso_639_1', 'language_en'), 'other_fields' => array('language')));
     if (is_null($category) || !array_key_exists($category, $properties)) {
         pl_redirect('admin');
     }
     $data = $properties[$category];
     if ($action == 'edit' || $action == 'add') {
         $main_fields = array_merge(array($data['id']), $data['main_fields']);
         $all_fields = array_merge($main_fields, $data['other_fields']);
         if (is_null($id)) {
             if (Post::has('new_id')) {
                 $id = Post::v('new_id');
             } else {
                 pl_redirect('admin/geocoding/' . $category);
             }
         }
         $list = array();
         exec('isoquery --iso=' . $data['isocode'] . ' ' . $id, $list);
         if (count($list) == 1) {
             $array = explode("\t", $list[0]);
             foreach ($main_fields as $i => $field) {
                 $iso[$field] = $array[$i];
             }
         } else {
             $iso = array();
         }
         if ($action == 'add') {
             if (Post::has('new_id')) {
                 S::assert_xsrf_token();
             }
             if (count($iso)) {
                 $item = $iso;
             } else {
                 $item = array($data['id'] => $id);
             }
             XDB::execute('INSERT INTO  ' . $data['table'] . '(' . implode(', ', array_keys($item)) . ')
                                VALUES  ' . XDB::formatArray($item));
             $page->trigSuccess($id . ' a bien été ajouté à la base.');
         } elseif ($action == 'edit') {
             if (Post::has('edit')) {
                 S::assert_xsrf_token();
                 $item = array();
                 $set = array();
                 foreach ($all_fields as $field) {
                     $item[$field] = Post::t($field);
                     $set[] = $field . XDB::format(' = {?}', $item[$field] ? $item[$field] : null);
                 }
                 XDB::execute('UPDATE  ' . $data['table'] . '
                                  SET  ' . implode(', ', $set) . '
                                WHERE  ' . $data['id'] . ' = {?}', $id);
                 call_user_func_array(array('self', 'update' . ucfirst($category)), array($item));
                 $page->trigSuccess($id . ' a bien été mis à jour.');
             } elseif (Post::has('del')) {
                 S::assert_xsrf_token();
                 XDB::execute('DELETE FROM  ' . $data['table'] . '
                                     WHERE  ' . $data['id'] . ' = {?}', $id);
                 $page->trigSuccessRedirect($id . ' a bien été supprimé.', 'admin/geocoding/' . $category);
             } else {
                 $item = XDB::fetchOneAssoc('SELECT  *
                                               FROM  ' . $data['table'] . '
                                              WHERE  ' . $data['id'] . ' = {?}', $id);
             }
         }
         $page->changeTpl('admin/geocoding_edit.tpl');
         $page->setTitle('Administration - ' . ucfirst($data['name']));
         $page->assign('category', $category);
         $page->assign('name', $data['name']);
         $page->assign('all_fields', $all_fields);
         $page->assign('id', $id);
         $page->assign('iso', $iso);
         $page->assign('item', $item);
         return;
     }
     $page->changeTpl('admin/geocoding.tpl');
     $page->setTitle('Administration - ' . ucfirst($data['name']));
     $page->assign('category', $category);
     $page->assign('name', $data['name']);
     $page->assign('id', $data['id']);
     $page->assign('main_fields', $data['main_fields']);
     $page->assign('all_fields', array_merge($data['main_fields'], $data['other_fields']));
     // First build the list provided by the iso codes.
     $list = array();
     exec('isoquery --iso=' . $data['isocode'], $list);
     foreach ($list as $key => $item) {
         $array = explode("\t", $item);
         unset($list[$key]);
         $list[$array[0]] = array();
         foreach ($data['main_fields'] as $i => $field) {
             $list[$array[0]][$field] = $array[$i + 1];
         }
     }
     ksort($list);
     // Retrieve all data from the database.
     $db_list = XDB::rawFetchAllAssoc('SELECT  *
                                         FROM  ' . $data['table'] . '
                                     ORDER BY  ' . $data['id'], $data['id']);
     // Sort both iso and database data into 5 categories:
     //  $missing: data from the iso list not in the database,
     //  $non_existing: data from the database not in the iso list,
     //  $erroneous: data that differ on main fields,
     //  $incomplete: data with empty fields in the data base,
     //  $remaining: remaining correct and complete data from the database.
     $missing = $non_existing = $erroneous = $incomplete = $remaining = array();
     foreach (array_keys($list) as $id) {
         if (!array_key_exists($id, $db_list)) {
             $missing[$id] = $list[$id];
         }
     }
     foreach ($db_list as $id => $item) {
         if (!array_key_exists($id, $list)) {
             $non_existing[$id] = $item;
         } else {
             $error = false;
             foreach ($data['main_fields'] as $field) {
                 if ($item[$field] != $list[$id][$field]) {
                     $item[$field . '_error'] = true;
                     $error = true;
                 }
             }
             if ($error == true) {
                 $erroneous[$id] = $item;
             } elseif (call_user_func_array(array('self', 'is' . ucfirst($category) . 'Incomplete'), array(&$item))) {
                 $incomplete[$id] = $item;
             } else {
                 $remaining[$id] = $item;
             }
         }
     }
     $page->assign('lists', array('manquant' => $missing, 'disparu' => $non_existing, 'erroné' => $erroneous, 'incomplet' => $incomplete, 'restant' => $remaining));
 }
예제 #4
0
 *  (at your option) any later version.                                    *
 *                                                                         *
 *  This program is distributed in the hope that it will be useful,        *
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of         *
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
 *  GNU General Public License for more details.                           *
 *                                                                         *
 *  You should have received a copy of the GNU General Public License      *
 *  along with this program; if not, write to the Free Software            *
 *  Foundation, Inc.,                                                      *
 *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
 ***************************************************************************/
require '../../bin/connect.db.inc.php';
$globals->debug = 0;
// Do not store backtraces
$res = XDB::rawFetchAllAssoc("SELECT  p.pid, p.ax_id, p.hrpid,\n                                      f.Nom_patronymique, f.Nom_usuel, f.Nom_complet,\n                                      ppn.lastname_initial, ppn.lastname_main, ppn.lastname_marital, ppn.lastname_ordinary\n                                FROM  fusionax_anciens     AS f\n                          INNER JOIN  profiles             AS p   ON (f.ax_id = p.ax_id)\n                          INNER JOIN  profile_public_names AS ppn ON (p.pid = ppn.pid)\n                               WHERE  IF(f.partic_patro, CONCAT(f.partic_patro, CONCAT(' ', f.Nom_patronymique)), f.Nom_patronymique) NOT IN (ppn.lastname_initial, ppn.lastname_main, ppn.lastname_marital, ppn.lastname_ordinary)\n                                      OR IF(f.partic_nom, CONCAT(f.partic_nom, CONCAT(' ', f.Nom_usuel)), f.Nom_usuel) NOT IN (ppn.lastname_initial, ppn.lastname_main, ppn.lastname_marital, ppn.lastname_ordinary)\n                                      OR f.Nom_complet NOT IN (ppn.lastname_initial, ppn.lastname_main, ppn.lastname_marital, ppn.lastname_ordinary)");
function fix_ax_particles($ax, $xorg, $item)
{
    $count = 0;
    foreach ($ax as $ax_key => $ax_name) {
        if (!in_array($ax_name, $xorg)) {
            $new_name = '';
            foreach ($xorg as $xorg_key => $xorg_name) {
                if ($xorg_name && strpos($xorg_name, $ax_name) !== false) {
                    if ($xorg_name == 'de ' . $ax_name) {
                        $new_name = 'de ' . $item[$ax_key];
                    } elseif ($xorg_name == "d'" . $ax_name) {
                        $new_name = "d'" . $item[$ax_key];
                    } elseif ($xorg_name == 'du ' . $ax_name) {
                        $new_name = 'du ' . $item[$ax_key];
                    }
예제 #5
0
파일: xnetgrp.php 프로젝트: Ekleog/platal
 function handler_admin_member($page, $user)
 {
     global $globals;
     $user = User::getSilent($user);
     if (empty($user)) {
         return PL_NOT_FOUND;
     }
     if (!$user->inGroup($globals->asso('id'))) {
         pl_redirect('annuaire');
     }
     $page->changeTpl('xnetgrp/membres-edit.tpl');
     $page->addJsLink('xnet_members.js');
     $mmlist = new MMList(S::user(), $globals->asso('mail_domain'));
     if (Post::has('change')) {
         S::assert_xsrf_token();
         require_once 'emails.inc.php';
         require_once 'name.func.inc.php';
         // Convert user status to X
         if (!Post::blank('x')) {
             $forlife = $this->changeLogin($page, $user, Post::i('userid'), Post::b('broken'), Post::b('marketing'), Post::v('marketing_from'));
             if ($forlife) {
                 pl_redirect('member/' . $forlife);
             }
         }
         // Update user info
         if ($user->type == 'virtual' || $user->type == 'xnet' && !$user->perms) {
             $lastname = capitalize_name(Post::t('lastname'));
             if (Post::s('type') != 'virtual') {
                 $firstname = capitalize_name(Post::t('firstname'));
             } else {
                 $firstname = '';
             }
             $full_name = build_full_name($firstname, $lastname);
             $directory_name = build_directory_name($firstname, $lastname);
             $sort_name = build_sort_name($firstname, $lastname);
             XDB::query('UPDATE  accounts
                            SET  full_name = {?}, directory_name = {?}, sort_name = {?}, display_name = {?},
                                 firstname = {?}, lastname = {?}, sex = {?}, type = {?}
                          WHERE  uid = {?}', $full_name, $directory_name, $sort_name, Post::t('display_name'), $firstname, $lastname, Post::t('sex') == 'male' ? 'male' : 'female', Post::t('type') == 'xnet' ? 'xnet' : 'virtual', $user->id());
         }
         // Updates email.
         $new_email = strtolower(Post::t('email'));
         if (($user->type == 'virtual' || $user->type == 'xnet' && !$user->perms) && require_email_update($user, $new_email)) {
             XDB::query('UPDATE  accounts
                            SET  email = {?}
                          WHERE  uid = {?}', $new_email, $user->id());
             if ($user->forlifeEmail()) {
                 $listClient = new MMList(S::user());
                 $listClient->change_user_email($user->forlifeEmail(), $new_email);
                 update_alias_user($user->forlifeEmail(), $new_email);
             }
             $user = User::getWithUID($user->id());
         }
         if (XDB::affectedRows()) {
             $page->trigSuccess('Données de l\'utilisateur mises à jour.');
         }
         if ($user->type == 'xnet' && !$user->perms) {
             if (Post::b('suggest')) {
                 $request = new AccountReq(S::user(), $user->hruid, Post::t('email'), $globals->asso('nom'), $globals->asso('diminutif'));
                 $request->submit();
                 $page->trigSuccess('Le compte va bientôt être activé.');
             }
             if (Post::b('again')) {
                 $this->again($user->id());
                 $page->trigSuccess('Relance effectuée avec succès.');
             }
         }
         // Update group params for user
         $perms = Post::v('group_perms');
         $comm = Post::t('comm');
         $position = Post::t('group_position') == '' ? null : Post::v('group_position');
         if ($user->group_perms != $perms || $user->group_comm != $comm || $user->group_position != $position) {
             XDB::query('UPDATE  group_members
                            SET  perms = {?}, comm = {?}, position = {?}
                          WHERE  uid = {?} AND asso_id = {?}', $perms == 'admin' ? 'admin' : 'membre', $comm, $position, $user->id(), $globals->asso('id'));
             if (XDB::affectedRows()) {
                 if ($perms != $user->group_perms) {
                     $page->trigSuccess('Permissions modifiées&nbsp;!');
                 }
                 if ($comm != $user->group_comm) {
                     $page->trigSuccess('Commentaire mis à jour.');
                 }
                 if ($position != $user->group_position) {
                     $page->trigSuccess('Poste mis à jour.');
                 }
             }
         }
         // Gets user info again as they might have change
         $user = User::getSilent($user->id());
         // Update ML subscriptions
         foreach (Env::v('ml1', array()) as $ml => $state) {
             $ask = empty($_REQUEST['ml2'][$ml]) ? 0 : 2;
             if ($ask == $state) {
                 continue;
             }
             if ($state == '1') {
                 $page->trigWarning("{$user->fullName()} a " . "actuellement une demande d'inscription en " . "cours sur <strong>{$ml}@</strong> !!!");
             } elseif ($ask) {
                 $mmlist->mass_subscribe($ml, array($user->forlifeEmail()));
                 $page->trigSuccess("{$user->fullName()} a été abonné à {$ml}@.");
             } else {
                 $mmlist->mass_unsubscribe($ml, array($user->forlifeEmail()));
                 $page->trigSuccess("{$user->fullName()} a été désabonné de {$ml}@.");
             }
         }
         // Change subscriptioin to aliases
         foreach (Env::v('ml3', array()) as $ml => $state) {
             require_once 'emails.inc.php';
             $ask = !empty($_REQUEST['ml4'][$ml]);
             list($local_part, ) = explode('@', $ml);
             if ($ask == $state) {
                 continue;
             }
             if ($ask) {
                 add_to_list_alias($user->id(), $local_part, $globals->asso('mail_domain'));
                 $page->trigSuccess("{$user->fullName()} a été abonné à {$ml}.");
             } else {
                 delete_from_list_alias($user->id(), $local_part, $globals->asso('mail_domain'));
                 $page->trigSuccess("{$user->fullName()} a été désabonné de {$ml}.");
             }
         }
         if ($globals->asso('has_nl')) {
             $nl = NewsLetter::forGroup($globals->asso('shortname'));
             // Updates group's newsletter subscription.
             if (Post::i('newsletter') == 1) {
                 $nl->subscribe($user);
             } else {
                 $nl->unsubscribe(null, $user->id());
             }
         }
     }
     $res = XDB::rawFetchAllAssoc('SHOW COLUMNS FROM group_members LIKE \'position\'');
     $positions = str_replace(array('enum(', ')', '\''), '', $res[0]['Type']);
     if ($globals->asso('has_nl')) {
         $nl = NewsLetter::forGroup($globals->asso('shortname'));
         $nl_registered = $nl->subscriptionState($user);
     } else {
         $nl_registered = false;
     }
     $page->assign('user', $user);
     $page->assign('suggest', $this->suggest($user));
     $page->assign('listes', $mmlist->get_lists($user->forlifeEmail()));
     $page->assign('alias', $user->emailGroupAliases($globals->asso('mail_domain')));
     $page->assign('positions', explode(',', $positions));
     $page->assign('nl_registered', $nl_registered);
     $page->assign('pending_xnet_account', XDB::fetchOneCell('SELECT  1
                                                                FROM  register_pending_xnet
                                                               WHERE  uid = {?}', $user->id()));
 }