示例#1
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);
 }
示例#2
0
 public function prepare(PlPage $page, $id)
 {
     $wp = new PlWikiPage((@$GLOBALS['IS_XNET_SITE'] ? 'ReviewXnet' : 'Review') . '.' . ucfirst($id));
     $wp->buildCache();
     $page->assign('cacheExists', $wp->cacheFilename());
     $page->assign('article', $wp->name);
 }
示例#3
0
文件: xnet.php 项目: Ekleog/platal
 public function force_login(PlPage $page)
 {
     $redirect = S::v('loginX');
     if (!$redirect) {
         $page->trigError('Impossible de s\'authentifier. Problème de configuration de plat/al.');
         return;
     }
     http_redirect($redirect);
 }
示例#4
0
文件: xorg.php 项目: Ekleog/platal
 public function force_login(PlPage $page)
 {
     header($_SERVER['SERVER_PROTOCOL'] . ' 403 Forbidden');
     if (S::logged()) {
         $page->changeTpl('core/password_prompt_logged.tpl');
     } else {
         $page->changeTpl('core/password_prompt.tpl');
     }
     $page->assign_by_ref('platal', $this);
     $page->run();
 }
示例#5
0
 public function __construct()
 {
     global $globals;
     parent::__construct();
     $this->register_function('list_all_my_groups', 'list_all_my_groups');
     $this->register_modifier('cat_pp', 'cat_pp');
     $this->assign('it_is_xnet', true);
     global $globals;
     $this->assign('is_logged', S::logged());
     if ($globals->asso('id')) {
         $this->assign('asso', $globals->asso());
         $this->setType($globals->asso('cat'));
         $this->assign('is_admin', may_update());
         $this->assign('is_member', is_member());
     }
     if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) {
         $this->addJsLink('json2.js');
     }
     $this->addJsLink('jquery.xorg.js');
     $this->addJsLink('overlib.js');
     $this->addJsLink('core.js');
     $this->addJsLink('xorg.js');
     if ($globals->core->sentry_js_dsn) {
         $this->addJsLink('raven.min.js');
     }
     $this->setTitle('Les associations polytechniciennes');
 }
示例#6
0
 public function __construct()
 {
     global $globals;
     parent::__construct();
     // Set the default page
     $this->changeTpl('platal/index.tpl');
     if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) {
         $this->addJsLink('json2.js');
     }
     $this->addJsLink('jquery.xorg.js');
     $this->addJsLink('overlib.js');
     $this->addJsLink('core.js');
     $this->addJsLink('xorg.js');
     if ($globals->core->sentry_js_dsn) {
         $this->addJsLink('raven.min.js');
     }
     $this->setTitle('le site des élèves et anciens élèves de l\'École polytechnique');
     if (S::logged() && S::user()->checkPerms('admin')) {
         $types = array(S::user()->type);
         $perms = DirEnum::getOptions(DirEnum::ACCOUNTTYPES);
         ksort($perms);
         foreach ($perms as $type => $perm) {
             if (!empty($perm) && $type != $types[0]) {
                 $types[] = $type;
             }
         }
         $this->assign('account_types_list', $types);
         $skins = DirEnum::getOptions(DirEnum::SKINS);
         asort($skins);
         $this->assign('skin_list', $skins);
     }
 }
示例#7
0
文件: events.php 项目: Ekleog/platal
 private function upload_image(PlPage $page, PlUpload $upload)
 {
     if (@(!$_FILES['image']['tmp_name']) && !Env::v('image_url')) {
         return true;
     }
     if (!$upload->upload($_FILES['image']) && !$upload->download(Env::v('image_url'))) {
         $page->trigError('Impossible de télécharger l\'image');
         return false;
     } elseif (!$upload->isType('image')) {
         $page->trigError('Le fichier n\'est pas une image valide au format JPEG, GIF ou PNG.');
         $upload->rm();
         return false;
     } elseif (!$upload->resizeImage(200, 300, 100, 100, 32284)) {
         $page->trigError('Impossible de retraiter l\'image');
         return false;
     }
     return true;
 }
示例#8
0
文件: api.php 项目: Ekleog/platal
 function handler_search(PlPage $page, PlUser $authUser, $payload, $mode = 'quick')
 {
     if (!isset($payload['quick'])) {
         $page->trigError('Malformed search query');
         return PL_BAD_REQUEST;
     }
     $query = trim($payload['quick']);
     if (@$payload['allow_special']) {
         if (starts_with($query, 'admin:')) {
             $page->jsonAssign('link_type', 'admin');
             $query = substr($query, 6);
         } else {
             if (starts_with($query, 'adm:')) {
                 $page->jsonAssign('link_type', 'admin');
                 $query = substr($query, 4);
             } else {
                 if (starts_with('admin', $query) || strpos($query, ':') !== false) {
                     $page->jsonAssign('profile_count', -1);
                     $page->jsonAssign('profiles', array());
                     return PL_JSON;
                 } else {
                     $page->jsonAssign('link_type', 'profile');
                 }
             }
         }
     }
     if (strlen($query) < 3) {
         $page->jsonAssign('profile_count', -1);
         $page->jsonAssign('profiles', array());
         return PL_JSON;
     }
     Env::set('quick', $query);
     foreach (array('with_soundex', 'exact') as $key) {
         if (isset($payload[$key])) {
             Env::set($key, $payload[$key]);
         }
     }
     require_once 'userset.inc.php';
     $view = new QuickSearchSet();
     $view->addMod('json', 'JSon', true, $payload);
     $view->apply('api/1/search', $page, 'json');
     return PL_JSON;
 }
示例#9
0
 function handler_bulkmail(PlPage $page, PlUser $authUser, $payload)
 {
     require_once 'partnersharing.inc.php';
     $partner = PartnerSharing::fetchByAPIUser($authUser);
     if ($partner == null || !$partner->has_bulkmail) {
         return PL_FORBIDDEN;
     }
     if (!isset($payload['uids'])) {
         $page->trigError('Malformed query.');
         return PL_BAD_REQUEST;
     }
     $uids = $payload['uids'];
     $pf = new UserFilter(new PFC_And(new UFC_PartnerSharingID($partner->id, $uids), new UFC_HasValidEmail(), new UFC_PartnerSharingEmail($partner->id)));
     $contexts = array();
     foreach ($pf->iterUsers() as $user) {
         $contexts[] = array('name' => $user->fullName(), 'email' => $user->bestEmail(), 'gender' => $user->isFemale() ? 'woman' : 'man');
     }
     $page->jsonAssign('contexts', $contexts);
     return PL_JSON;
 }
示例#10
0
 public function _prepare(PlPage $page, $id)
 {
     $page->assign('mygroups', XDB::iterator("SELECT  a.nom, a.site, a.diminutif, a.unsub_url, a.pub, m.perms\n                                                   FROM  groups    AS a\n                                             INNER JOIN  group_members AS m ON (m.asso_id = a.id)\n                                                  WHERE  m.uid = {?} AND (a.cat = 'GroupesX' OR a.cat = 'Institutions')", $this->owner->id()));
     $page->assign('listgroups', XDB::iterator("SELECT  a.nom, a.diminutif, a.sub_url,\n                                                           IF (a.cat = 'Institutions', a.cat, d.nom) AS dom\n                                                     FROM  groups  AS a\n                                                LEFT JOIN  group_dom   AS d ON (d.id = a.dom)\n                                                    WHERE  a.inscriptible != 0\n                                                           AND (a.cat = 'GroupesX' OR a.cat = 'Institutions')\n                                                 ORDER BY  a.cat, a.dom, a.nom"));
     $page->assign('old', (int) date('Y') >= $this->profile->grad_year);
 }
示例#11
0
文件: profile.php 项目: Ekleog/platal
 function handler_p_edit($page, $hrpid = null, $opened_tab = null, $mode = null, $success = null)
 {
     global $globals;
     if (in_array($hrpid, array('general', 'adresses', 'emploi', 'poly', 'deco', 'mentor', 'deltaten'))) {
         $aux = $opened_tab;
         $opened_tab = $hrpid;
         $hrpid = $aux;
         $url_error = true;
     } else {
         $url_error = false;
     }
     $profile = $this->findProfile($hrpid);
     if (!$profile instanceof Profile && ($profile == PL_NOT_FOUND || $profile == PL_FORBIDDEN)) {
         return $profile;
     }
     if (is_null($hrpid) || $url_error) {
         pl_redirect('profile/edit/' . $profile->hrid() . (is_null($opened_tab) ? '' : '/' . $opened_tab));
     }
     // Build the page
     $page->addJsLink('jquery.ui.xorg.js');
     $page->addJsLink('education.js', true, false);
     /* dynamic content */
     $page->addJsLink('grades.js', true, false);
     /* dynamic content */
     $page->addJsLink('profile.js');
     $wiz = new PlWizard('Profil', PlPage::getCoreTpl('plwizard.tpl'), true, true, false);
     $wiz->addUserData('profile', $profile);
     $wiz->addUserData('owner', $profile->owner());
     $this->load('page.inc.php');
     $wiz->addPage('ProfilePageGeneral', 'Général', 'general');
     $wiz->addPage('ProfilePageAddresses', 'Adresses personnelles', 'adresses');
     $wiz->addPage('ProfilePageJobs', 'Informations professionnelles', 'emploi');
     $viewPrivate = S::user()->checkPerms(User::PERM_DIRECTORY_PRIVATE);
     if ($viewPrivate) {
         $wiz->addPage('ProfilePageGroups', 'Groupes X - Binets', 'poly');
     }
     $wiz->addPage('ProfilePageDecos', 'Décorations - Medailles', 'deco');
     if ($viewPrivate) {
         $wiz->addPage('ProfilePageMentor', 'Mentoring', 'mentor');
     }
     if ($viewPrivate && $profile->isDeltatenEnabled(Profile::DELTATEN_OLD)) {
         $wiz->addPage('ProfilePageDeltaten', 'Opération N N-10', 'deltaten');
     }
     $wiz->apply($page, 'profile/edit/' . $profile->hrid(), $opened_tab, $mode);
     if (!$profile->birthdate) {
         $page->trigWarning("Ta date de naissance n'est pas renseignée, ce qui t'empêcheras de réaliser" . " la procédure de récupération de mot de passe si un jour tu le perdais.");
     }
     $page->setTitle('Mon Profil');
     $page->assign('hrpid', $profile->hrid());
     $page->assign('viewPrivate', $viewPrivate);
     $page->assign('isMe', S::user()->isMyProfile($profile));
     if (isset($success) && $success) {
         $page->trigSuccess('Ton profil a bien été mis à jour.');
     }
 }
示例#12
0
文件: platal.php 项目: Ekleog/platal
 function handler_review($page, $action = null, $mode = null)
 {
     // Include X-XRDS-Location response-header for Yadis discovery
     global $globals;
     header('X-XRDS-Location: ' . $globals->baseurl . '/openid/xrds');
     $this->load('review.inc.php');
     $dom = 'Review';
     if (@$GLOBALS['IS_XNET_SITE']) {
         $dom .= 'Xnet';
     }
     $wp = new PlWikiPage($dom . '.Admin');
     $conf = explode('%0a', $wp->getField('text'));
     $wiz = new PlWizard('Tour d\'horizon', PlPage::getCoreTpl('plwizard.tpl'), true);
     foreach ($conf as $line) {
         $list = preg_split('/\\s*[*|]\\s*/', $line, -1, PREG_SPLIT_NO_EMPTY);
         $wiz->addPage('ReviewPage', $list[0], $list[1]);
     }
     $wiz->apply($page, 'review', $action, $mode);
 }
示例#13
0
function fill_email_combobox(PlPage $page, array $retrieve, $user = null)
{
    require_once 'emails.inc.php';
    if (is_null($user)) {
        $user = S::user();
    }
    /* Always refetch the profile. */
    $profile = $user->profile(true);
    $emails = array();
    if (in_array('source', $retrieve)) {
        $emails['Emails polytechniciens'] = XDB::fetchColumn('SELECT  CONCAT(s.email, \'@\', d.name)
                                                                FROM  email_source_account  AS s
                                                          INNER JOIN  email_virtual_domains AS m ON (s.domain = m.id)
                                                          INNER JOIN  email_virtual_domains AS d ON (d.aliasing = m.id)
                                                               WHERE  s.uid = {?}
                                                            ORDER BY  s.email, d.name', $user->id());
    }
    if (in_array('redirect', $retrieve)) {
        $redirect = new Redirect($user);
        $emails['Redirections'] = array();
        foreach ($redirect->emails as $redirect_it) {
            if ($redirect_it->is_redirection()) {
                $emails['Redirections'][] = $redirect_it->email;
            }
        }
    }
    if ($profile) {
        if (in_array('job', $retrieve)) {
            $emails['Emails professionels'] = XDB::fetchColumn('SELECT  email
                                                                  FROM  profile_job
                                                                 WHERE  pid = {?} AND email IS NOT NULL AND email != \'\'', $profile->id());
        }
        if ($profile->email_directory) {
            if (in_array('directory', $retrieve)) {
                foreach ($emails as &$email_list) {
                    foreach ($email_list as $key => $email) {
                        if ($profile->email_directory == $email) {
                            unset($email_list[$key]);
                        }
                    }
                }
                $emails['Email annuaire AX'] = array($profile->email_directory);
            } elseif (in_array('stripped_directory', $retrieve)) {
                if (User::isForeignEmailAddress($profile->email_directory)) {
                    $is_redirect = XDB::fetchOneCell('SELECT  COUNT(*)
                                                        FROM  email_redirect_account
                                                       WHERE  uid = {?} AND redirect = {?}', $user->id(), $profile->email_directory);
                    if ($is_redirect == 0) {
                        $emails['Email annuaire AX'] = array($profile->email_directory);
                    }
                }
            }
        }
        if (isset($emails['Emails professionels']) && isset($emails['Redirections'])) {
            $intersect = array_intersect($emails['Emails professionels'], $emails['Redirections']);
            foreach ($intersect as $key => $email) {
                unset($emails['Emails professionels'][$key]);
            }
        }
    }
    $emails_count = 0;
    foreach ($emails as $email_list) {
        $emails_count += count($email_list);
    }
    $page->assign('emails_count', $emails_count);
    $page->assign('email_lists', $emails);
}
示例#14
0
 public function _prepare(PlPage $page, $id)
 {
     $res = XDB::iterator('SELECT  *, FIND_IN_SET(\'validation\', flags) AS validate
                             FROM  profile_medal_enum
                         ORDER BY  type, text');
     $mlist = array();
     while ($tmp = $res->next()) {
         $mlist[$tmp['type']][] = $tmp;
     }
     $page->assign('medal_list', $mlist);
     $fullType = array('ordre' => 'Ordres', 'croix' => 'Croix', 'militaire' => 'Médailles militaires', 'honneur' => 'Médailles d\'honneur', 'resistance' => 'Médailles de la résistance', 'prix' => 'Prix', 'sport' => 'Médailles sportives');
     $page->assign('fullType', $fullType);
 }
示例#15
0
 public function apply(PlPage $page)
 {
     $export = array();
     $start = isset($this->params['offset']) ? $this->params['offset'] : 0;
     $count = isset($this->params['count']) ? $this->params['count'] : 10;
     $profiles = $this->set->get(new PlLimit($start, $count));
     foreach ($profiles as $profile) {
         $export[] = $profile->export();
     }
     $page->jsonAssign('profile_count', $this->set->count());
     $page->jsonAssign('profiles', $export);
 }
示例#16
0
 public function _prepare(PlPage $page, $id)
 {
     require_once "education.func.inc.php";
     $res = XDB::query("SELECT  id, field\n                             FROM  profile_education_field_enum\n                         ORDER BY  field");
     $page->assign('edu_fields', $res->fetchAllAssoc());
     require_once "emails.combobox.inc.php";
     fill_email_combobox($page, array('source', 'redirect', 'job', 'directory'), $this->owner);
     $res = XDB::query("SELECT  nw.nwid AS type, nw.name\n                             FROM  profile_networking_enum AS nw\n                         ORDER BY  name");
     $page->assign('network_list', $res->fetchAllAssoc());
     $page->assign('lastnames', array('main' => 'Nom patronymique', 'marital' => 'Nom marital', 'ordinary' => 'Nom usuel'));
     $page->assign('firstnames', array('firstname_main' => 'Prénom', 'firstname_ordinary' => 'Prénom usuel', 'pseudonym' => 'Pseudonyme (nom de plume)'));
     $page->assign('other_names', array('nickname' => 'Surnom', 'firstname' => 'Autre prénom', 'lastname' => 'Autre nom'));
     $page->assign('isFemale', $this->profile->isFemale() ? 1 : 0);
 }
示例#17
0
 public function prepare(PlPage $page, $id)
 {
     if (count($this->values) == 0) {
         $this->fetchData();
     }
     foreach ($this->values as $field => &$value) {
         $page->assign($field, $value);
     }
     $this->_prepare($page, $id);
     $page->assign('profile', $this->profile);
     $page->assign('owner', $this->owner);
     $page->assign('profile_page', $this->pg_template);
     $page->assign('errors', $this->errors);
 }
示例#18
0
文件: admin.php 项目: Ekleog/platal
 function handler_accounts(PlPage $page)
 {
     $page->changeTpl('admin/accounts.tpl');
     $page->setTitle('Administration - Comptes');
     if (Post::has('create_account')) {
         S::assert_xsrf_token();
         $firstname = Post::t('firstname');
         $lastname = mb_strtoupper(Post::t('lastname'));
         $sex = Post::s('sex');
         $email = Post::t('email');
         $type = Post::s('type');
         if (!$type) {
             $page->trigError("Empty account type");
         } elseif (!isvalid_email($email)) {
             $page->trigError("Invalid email address: {$email}");
         } elseif (strlen(Post::s('pwhash')) != 40) {
             $page->trigError("Invalid password hash");
         } else {
             $login = PlUser::makeHrid($firstname, $lastname, $type);
             $full_name = $firstname . ' ' . $lastname;
             $directory_name = $lastname . ' ' . $firstname;
             XDB::execute("INSERT INTO  accounts (hruid, type, state, password,\n                                                     registration_date, email, full_name,\n                                                     display_name, sex, directory_name,\n                                                     lastname, firstname)\n                                   VALUES  ({?}, {?}, 'active', {?}, NOW(), {?}, {?}, {?}, {?}, {?}, {?}, {?})", $login, $type, Post::s('pwhash'), $email, $full_name, $full_name, $sex, $directory_name, $lastname, $firstname);
         }
     }
     $uf = new UserFilter(new UFC_AccountType('ax', 'school', 'fx'));
     $page->assign('users', $uf->iterUsers());
 }
示例#19
0
 protected function prepareText(PlPage $page, array $user)
 {
     $page->assign('intro', $this->getIntro());
     $page->assign('u', $user);
     $page->assign('sign', $this->getSignature());
     $page->assign('personal_notes', $this->getPersonalNotes());
 }
示例#20
0
 public function addCssLink($css)
 {
     $csss = unflatten($css);
     $exceptions = array();
     foreach ($csss as $css) {
         try {
             parent::addCssLink(self::getCssPath($css));
         } catch (SkinFileNotFoundException $e) {
             $exceptions[] = $e;
         }
     }
     return SkinFileNotFoundException::merge($exceptions);
 }
示例#21
0
 public function _prepare(PlPage $page, $id)
 {
     $page->assign('countryList', XDB::iterator("SELECT  iso_3166_1_a2, country\n                                                      FROM  geoloc_countries\n                                                  ORDER BY  country"));
     $page->assign('hrpid', $this->profile->hrpid);
     $page->assign('comp_list', XDB::iterator("SELECT  id, text_fr, FIND_IN_SET('titre',flags) AS title\n                                                    FROM  profile_skill_enum"));
     $page->assign('comp_level', array('initié' => 'initié', 'bonne connaissance' => 'bonne connaissance', 'expert' => 'expert'));
     $page->assign('lang_list', XDB::iterator('SELECT  iso_639_2b, language
                                                 FROM  profile_langskill_enum
                                             ORDER BY  language'));
     $page->assign('lang_level', array(1 => 'connaissance basique', 2 => 'maîtrise des bases', 3 => 'maîtrise limitée', 4 => 'maîtrise générale', 5 => 'bonne maîtrise', 6 => 'maîtrise complète'));
 }
示例#22
0
文件: carnet.php 项目: Ekleog/platal
 function handler_csv(PlPage $page, PlUser $user)
 {
     $page->changeTpl('carnet/mescontacts.outlook.tpl', NO_SKIN);
     $pf = new ProfileFilter(new UFC_Contact($user));
     require_once 'carnet/outlook.inc.php';
     Outlook::output_profiles($pf->getProfiles(), 'fr');
 }
示例#23
0
 public function assignToPage(PlPage $page)
 {
     $response = $this->get();
     $page->jsonAssign('matches', $response['matches']);
     $page->jsonAssign('profiles', $response['profiles']);
 }
示例#24
0
 protected function prepare()
 {
     $tpl = parent::prepare();
     global $wiz;
     $wiz = new PlWizard('Banana', PlPage::getCoreTpl('plwizard.tpl'), true, false);
     foreach ($this->pages as $name => &$mpage) {
         $wiz->addPage($this->handler, $mpage['text'], $name);
     }
     $wiz->apply(Platal::page(), $this->base, $this->page);
     return $tpl;
 }
示例#25
0
 public function _prepare(PlPage $page, $id)
 {
     $page->assign('hrpid', $this->profile->hrpid);
 }