X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=modules%2Fprofile.php;h=e397cffe0504cf07ff0f3c8ffa197c949f70ca40;hb=5c4ea53f1c66590a34fc10ae5767469c58b90a24;hp=97c5ddfa0119af87bff6d144dddf162a7a608c86;hpb=89cb2025f5f2aed0be3994c89ac473aa11535853;p=platal.git diff --git a/modules/profile.php b/modules/profile.php index 97c5ddf..e397cff 100644 --- a/modules/profile.php +++ b/modules/profile.php @@ -1,6 +1,6 @@ $this->make_hook('ajax_medal', AUTH_COOKIE, 'user', NO_AUTH), 'profile/networking' => $this->make_hook('networking', AUTH_PUBLIC), 'profile/ajax/job' => $this->make_hook('ajax_job', AUTH_COOKIE, 'user', NO_AUTH), - 'profile/ajax/secteur' => $this->make_hook('ajax_secteur', AUTH_COOKIE, 'user', NO_AUTH), - 'profile/ajax/ssecteur' => $this->make_hook('ajax_ssecteur', AUTH_COOKIE, 'user', NO_AUTH), + 'profile/ajax/sector' => $this->make_hook('ajax_sector', AUTH_COOKIE, 'user', NO_AUTH), + 'profile/ajax/sub_sector' => $this->make_hook('ajax_sub_sector', AUTH_COOKIE, 'user', NO_AUTH), + 'profile/ajax/alternates' => $this->make_hook('ajax_alternates', AUTH_COOKIE, 'user', NO_AUTH), 'profile/ajax/skill' => $this->make_hook('ajax_skill', AUTH_COOKIE, 'user', NO_AUTH), 'profile/ajax/searchname' => $this->make_hook('ajax_searchname', AUTH_COOKIE, 'user', NO_AUTH), 'profile/ajax/buildnames' => $this->make_hook('ajax_buildnames', AUTH_COOKIE, 'user', NO_AUTH), @@ -56,6 +57,7 @@ class ProfileModule extends PLModule 'referent/country' => $this->make_hook('ref_country', AUTH_COOKIE, 'user', NO_AUTH), 'groupes-x' => $this->make_hook('xnet', AUTH_COOKIE), + 'groupes-x/logo' => $this->make_hook('xnetlogo', AUTH_PUBLIC), 'vcard' => $this->make_hook('vcard', AUTH_COOKIE, 'user', NO_HTTPS), 'admin/binets' => $this->make_hook('admin_binets', AUTH_MDP, 'admin'), @@ -65,15 +67,12 @@ class ProfileModule extends PLModule 'admin/education_degree' => $this->make_hook('admin_education_degree', AUTH_MDP, 'admin'), 'admin/education_degree_set' => $this->make_hook('admin_education_degree_set', AUTH_MDP, 'admin'), 'admin/sections' => $this->make_hook('admin_sections', AUTH_MDP, 'admin'), - 'admin/secteurs' => $this->make_hook('admin_secteurs', AUTH_MDP, 'admin'), 'admin/networking' => $this->make_hook('admin_networking', AUTH_MDP, 'admin'), 'admin/trombino' => $this->make_hook('admin_trombino', AUTH_MDP, 'admin'), - 'admin/ss_secteurs' => $this->make_hook('admin_ss_secteurs', AUTH_MDP, 'admin'), - 'admin/fonctions' => $this->make_hook('admin_fonctions', AUTH_MDP, 'admin'), + 'admin/sectors' => $this->make_hook('admin_sectors', AUTH_MDP, 'admin'), 'admin/corps_enum' => $this->make_hook('admin_corps_enum', AUTH_MDP, 'admin'), 'admin/corps_rank' => $this->make_hook('admin_corps_rank', AUTH_MDP, 'admin'), 'admin/names' => $this->make_hook('admin_names', AUTH_MDP, 'admin'), - ); } @@ -90,36 +89,16 @@ class ProfileModule extends PLModule } // Retrieve the photo and its mime type. - $photo_data = null; - $photo_type = null; - if ($req && S::logged()) { include 'validations.inc.php'; $myphoto = PhotoReq::get_request($user->id()); - if ($myphoto) { - $photo_data = $myphoto->data; - $photo_type = $myphoto->mimetype; - } + $photo = PlImage::fromData($myphoto->data, $myphoto->mimetype); } else { - $res = XDB::query( - "SELECT attachmime, attach, pub - FROM photo - WHERE uid = {?}", $user->id()); - list($photo_type, $photo_data, $photo_pub) = $res->fetchOneRow(); - if ($photo_pub != 'public' && !S::logged()) { - $photo_type = $photo_data = null; - } + $photo = $user->profile()->getPhoto(true); } // Display the photo, or a default one when not available. - if ($photo_type && $photo_data != null) { - header('Content-type: image/' . $photo_type); - echo $photo_data; - } else { - header('Content-type: image/png'); - echo file_get_contents(dirname(__FILE__).'/../htdocs/images/none.png'); - } - exit; + $photo->send(); } function handler_medal(&$page, $mid) @@ -134,8 +113,7 @@ class ProfileModule extends PLModule $img = $thumb ? dirname(__FILE__).'/../htdocs/images/medals/thumb/' . $res->fetchOneCell() : dirname(__FILE__).'/../htdocs/images/medals/' . $res->fetchOneCell(); - $type = mime_content_type($img); - header("Content-Type: $type"); + pl_cached_content_headers(mime_content_type($img)); echo file_get_contents($img); exit; } @@ -200,13 +178,14 @@ class ProfileModule extends PLModule } elseif (Env::v('suppr')) { S::assert_xsrf_token(); - XDB::execute('DELETE FROM photo - WHERE uid = {?}', - S::v('uid')); + XDB::execute('DELETE FROM profile_photos + WHERE pid = {?}', + S::user()->profile()->id()); XDB::execute('DELETE FROM requests WHERE user_id = {?} AND type="photo"', S::v('uid')); $globals->updateNbValid(); + $page->trigSuccess("Ta photo a bien été supprimée. Elle ne sera plus visible sur le site dans au plus une heure."); } elseif (Env::v('cancel')) { S::assert_xsrf_token(); @@ -337,10 +316,10 @@ class ProfileModule extends PLModule if (!$user->ax_id) { $page->kill("Le matricule AX de {$user->hrid()} est inconnu"); } - http_redirect("http://www.polytechniciens.com/?page=AX_FICHE_ANCIEN&anc_id=" . $user->ax_id); + http_redirect("http://www.polytechniciens.com/?page=AX_FICHE_ANCIEN&ancc_id=" . $user->ax_id); } - function handler_p_edit(&$page, $user = null, $opened_tab = null, $mode = null) + function handler_p_edit(&$page, $user = null, $opened_tab = null, $mode = null, $success = null) { global $globals; @@ -362,8 +341,8 @@ class ProfileModule extends PLModule // Build the page $page->addJsLink('ajax.js'); - $page->addJsLink('education.js'); - $page->addJsLink('grades.js'); + $page->addJsLink('education.js'); /* dynamic content */ + $page->addJsLink('grades.js'); /* dynamic content */ $page->addJsLink('profile.js'); $page->addJsLink('jquery.autocomplete.js'); $wiz = new PlWizard('Profil', PlPage::getCoreTpl('plwizard.tpl'), true, true, false); @@ -385,26 +364,21 @@ class ProfileModule extends PLModule } $page->setTitle('Mon Profil'); + if (isset($success) && $success) { + $page->trigSuccess('Ton profil a bien été mis à jour.'); + } } function handler_education_js(&$page) { - header('Content-Type: text/javascript; charset=utf-8'); - header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); - header('Last-Modified:' . gmdate('D, d M Y H:i:s') . ' GMT'); - header('Cache-Control: no-cache, must-revalidate'); - header('Pragma: no-cache'); + pl_cached_content_headers("text/javascript", "utf-8"); $page->changeTpl('profile/education.js.tpl', NO_SKIN); - require_once "education.func.inc.php"; + require_once 'education.func.inc.php'; } function handler_grades_js(&$page) { - header('Content-Type: text/javascript; charset=utf-8'); - header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); - header('Last-Modified:' . gmdate('D, d M Y H:i:s') . ' GMT'); - header('Cache-Control: no-cache, must-revalidate'); - header('Pragma: no-cache'); + pl_cached_content_headers("text/javascript", "utf-8"); $page->changeTpl('profile/grades.js.tpl', NO_SKIN); $res = XDB::iterator("SELECT * FROM profile_medals_grades @@ -427,7 +401,7 @@ class ProfileModule extends PLModule function handler_ajax_address(&$page, $id) { - header('Content-Type: text/html; charset=utf-8'); + pl_content_headers("text/html"); $page->changeTpl('profile/adresses.address.tpl', NO_SKIN); $page->assign('i', $id); $page->assign('address', array()); @@ -435,7 +409,7 @@ class ProfileModule extends PLModule function handler_ajax_tel(&$page, $prefid, $prefname, $telid) { - header('Content-Type: text/html; charset=utf-8'); + pl_content_headers("text/html"); $page->changeTpl('profile/phone.tpl', NO_SKIN); $page->assign('prefid', $prefid); $page->assign('prefname', $prefname); @@ -458,7 +432,7 @@ class ProfileModule extends PLModule function handler_ajax_medal(&$page, $id) { - header('Content-Type: text/html; charset=utf-8'); + pl_content_headers("text/html"); $page->changeTpl('profile/deco.medal.tpl', NO_SKIN); $page->assign('id', $id); $page->assign('medal', array('valid' => 0, 'grade' => 0)); @@ -466,31 +440,27 @@ class ProfileModule extends PLModule function handler_ajax_job(&$page, $id) { - header('Content-Type: text/html; charset=utf-8'); + pl_content_headers("text/html"); $page->changeTpl('profile/jobs.job.tpl', NO_SKIN); $page->assign('i', $id); $page->assign('job', array()); $page->assign('new', true); $res = XDB::query("SELECT id, name AS label FROM profile_job_sector_enum"); - $page->assign('secteurs', $res->fetchAllAssoc()); - $res = XDB::query("SELECT id, fonction_fr, FIND_IN_SET('titre', flags) AS title - FROM fonctions_def - ORDER BY id"); - $page->assign('fonctions', $res->fetchAllAssoc()); + $page->assign('sectors', $res->fetchAllAssoc()); require_once "emails.combobox.inc.php"; fill_email_combobox($page); } - function handler_ajax_secteur(&$page, $id, $jobid, $jobpref, $sect, $ssect = -1) + function handler_ajax_sector(&$page, $id, $jobid, $jobpref, $sect, $ssect = -1) { - header('Content-Type: text/html; charset=utf-8'); - $res = XDB::iterator("SELECT id, name AS label, FIND_IN_SET('optgroup', flags) AS optgroup + pl_content_headers("text/html"); + $res = XDB::iterator("SELECT id, name, FIND_IN_SET('optgroup', flags) AS optgroup FROM profile_job_subsector_enum WHERE sectorid = {?}", $sect); - $page->changeTpl('profile/jobs.secteur.tpl', NO_SKIN); + $page->changeTpl('profile/jobs.sector.tpl', NO_SKIN); $page->assign('id', $id); - $page->assign('ssecteurs', $res); + $page->assign('subSectors', $res); $page->assign('sel', $ssect); if ($id != -1) { $page->assign('change', 1); @@ -499,21 +469,38 @@ class ProfileModule extends PLModule } } - function handler_ajax_ssecteur(&$page, $id, $ssect, $sssect = -1) + function handler_ajax_sub_sector(&$page, $id, $ssect, $sssect = -1) { header('Content-Type: text/html; charset=utf-8'); - $res = XDB::iterator("SELECT id, name AS label + $res = XDB::iterator("SELECT id, name FROM profile_job_subsubsector_enum WHERE subsectorid = {?}", $ssect); - $page->changeTpl('profile/jobs.soussecteur.tpl', NO_SKIN); + $page->changeTpl('profile/jobs.sub_sector.tpl', NO_SKIN); $page->assign('id', $id); - $page->assign('sssecteurs', $res); + $page->assign('subSubSectors', $res); $page->assign('sel', $sssect); } - function handler_ajax_skill(&$page, $cat, $id) + function handler_ajax_alternates(&$page, $id, $sssect) { header('Content-Type: text/html; charset=utf-8'); + $res = XDB::iterator('SELECT name + FROM profile_job_alternates + WHERE subsubsectorid = {?} + ORDER BY id', + $sssect); + $page->changeTpl('profile/jobs.alternates.tpl', NO_SKIN); + $alternate = $res->next(); + $alternates = $alternate['name']; + while ($alternate = $res->next()) { + $alternates .= ', ' . $alternate['name']; + } + $page->assign('alternates', $alternates); + } + + function handler_ajax_skill(&$page, $cat, $id) + { + pl_content_headers("text/html"); $page->changeTpl('profile/skill.skill.tpl', NO_SKIN); $page->assign('cat', $cat); $page->assign('id', $id); @@ -620,19 +607,20 @@ class ProfileModule extends PLModule WHERE uid = {?}', $user->id()); $page->assign('expertise', $res->fetchOneCell()); - //secteurs - $secteurs = $ss_secteurs = Array(); - $res = XDB::iterRow('SELECT s.name AS label, ss.name AS label - FROM profile_mentor_sector AS m - LEFT JOIN profile_job_sector_enum AS s ON(m.sectorid = s.id) - LEFT JOIN profile_job_subsector_enum AS ss ON(m.sectorid = ss.sectorid AND m.subsectorid = ss.id) - WHERE uid = {?}', $user->id()); - while (list($sec, $ssec) = $res->next()) { - $secteurs[] = $sec; - $ss_secteurs[] = $ssec; + // Sectors + $sectors = $subSectors = Array(); + $res = XDB::iterRow( + "SELECT s.name AS label, ss.name AS label + FROM profile_mentor_sector AS m + LEFT JOIN profile_job_sector_enum AS s ON(m.sectorid = s.id) + LEFT JOIN profile_job_subsector_enum AS ss ON(m.sectorid = ss.sectorid AND m.subsectorid = ss.id) + WHERE uid = {?}", $user->id()); + while (list($sector, $subSector) = $res->next()) { + $sectors[] = $sector; + $subSectors[] = $subSector; } - $page->assign_by_ref('secteurs', $secteurs); - $page->assign_by_ref('ss_secteurs', $ss_secteurs); + $page->assign_by_ref('sectors', $sectors); + $page->assign_by_ref('subSectors', $subSectors); // Countries. $res = XDB::query( @@ -652,61 +640,41 @@ class ProfileModule extends PLModule $page->setTitle('Conseil Pro'); - //recuperation des noms de secteurs - $res = XDB::iterRow("SELECT id, name AS label FROM profile_job_sector_enum"); - $secteurs[''] = ''; - while (list($tmp_id, $tmp_label) = $res->next()) { - $secteurs[$tmp_id] = $tmp_label; - } - $page->assign_by_ref('secteurs', $secteurs); + require_once "directory.enums.inc.php"; + + // Retrieval of sector names + $sectors = DirEnum::getOptionsArray(DirEnum::SECTORS); + $sectors[''] = ''; + $page->assign_by_ref('sectors', $sectors); // nb de mentors $res = XDB::query("SELECT count(*) FROM profile_mentor"); $page->assign('mentors_number', $res->fetchOneCell()); // On vient d'un formulaire - $where = array(); - $pays_sel = XDB::escape(Env::v('pays_sel')); - $secteur_sel = XDB::escape(Env::v('secteur')); - $ss_secteur_sel = XDB::escape(Env::v('ss_secteur')); - $expertise_champ = XDB::escape(Env::v('expertise')); - - if ($pays_sel != "''") { - $where[] = "mp.country = $pays_sel"; - } - if ($secteur_sel != "''") { - $where[] = "ms.sectorid = $secteur_sel"; - if ($ss_secteur_sel != "''") { - $where[] = "ms.subsectorid = $ss_secteur_sel"; - } - } - if ($expertise_champ != "''") { - $where[] = "MATCH(m.expertise) AGAINST($expertise_champ)"; - } - - if ($where) { - $where = join(' AND ', $where); - - $set = new UserSet("INNER JOIN profile_mentor AS m ON (m.uid = u.user_id) - LEFT JOIN profile_mentor_country AS mp ON (mp.uid = m.uid) - LEFT JOIN profile_mentor_sector AS ms ON (ms.uid = m.uid)", - $where); + require_once 'ufbuilder.inc.php'; + $ufb = new UFB_MentorSearch(); + if (!$ufb->isEmpty()) { + require_once 'userset.inc.php'; + $ufc = $ufb->getUFC(); + $set = new ProfileSet($ufc); $set->addMod('mentor', 'Référents'); $set->apply('referent/search', $page, $action, $subaction); if ($set->count() > 100) { $page->assign('recherche_trop_large', true); } } + $page->changeTpl('profile/referent.tpl'); } function handler_ref_sect(&$page, $sect) { - header('Content-Type: text/html; charset=utf-8'); + pl_content_headers("text/html"); $page->changeTpl('include/field.select.tpl', NO_SKIN); - $page->assign('onchange', 'setSSecteurs()'); + $page->assign('onchange', 'setSSectors()'); $page->assign('id', 'ssect_field'); - $page->assign('name', 'ss_secteur'); + $page->assign('name', 'subSector'); $it = XDB::iterator("SELECT id, name AS field FROM profile_job_subsector_enum WHERE sectorid = {?}", $sect); @@ -715,7 +683,7 @@ class ProfileModule extends PLModule function handler_ref_country(&$page, $sect, $ssect = '') { - header('Content-Type: text/html; charset=utf-8'); + pl_content_headers("text/html"); $page->changeTpl('include/field.select.tpl', NO_SKIN); $page->assign('name', 'pays_sel'); $where = ($ssect ? ' AND ms.subsectorid = {?}' : ''); @@ -737,13 +705,35 @@ class ProfileModule extends PLModule $req = XDB::query(' SELECT m.asso_id, a.nom, diminutif, a.logo IS NOT NULL AS has_logo, COUNT(e.eid) AS events, mail_domain AS lists - FROM groupex.membres AS m - INNER JOIN groupex.asso AS a ON(m.asso_id = a.id) - LEFT JOIN groupex.evenements AS e ON(e.asso_id = m.asso_id AND e.archive = 0) + FROM group_members AS m + INNER JOIN groups AS a ON(m.asso_id = a.id) + LEFT JOIN group_events AS e ON(e.asso_id = m.asso_id AND e.archive = 0) WHERE uid = {?} GROUP BY m.asso_id ORDER BY a.nom', S::i('uid')); $page->assign('assos', $req->fetchAllAssoc()); } + function handler_xnetlogo(&$page, $id) + { + if (is_null($id)) { + return PL_NOT_FOUND; + } + + $res = XDB::query('SELECT logo, logo_mime + FROM groups + WHERE id = {?}', $id); + list($logo, $logo_mime) = $res->fetchOneRow(); + + if (!empty($logo)) { + pl_cached_dynamic_content_headers($logo_mime); + echo $logo; + } else { + pl_cached_dynamic_content_headers("image/jpeg"); + readfile(dirname(__FILE__) . '/../htdocs/images/dflt_carre.jpg'); + } + + exit; + } + function handler_vcard(&$page, $x = null) { if (is_null($x)) { @@ -757,7 +747,7 @@ class ProfileModule extends PLModule } $vcard = new VCard(); - $vcard->addUser($x); + $vcard->addProfile(Profile::get($x)); $vcard->show(); } @@ -773,10 +763,8 @@ class ProfileModule extends PLModule switch ($action) { case "original": - header("Content-type: image/jpeg"); - readfile("/home/web/trombino/photos" . $user->promo() . "/" . $user->login() . ".jpg"); + PlImage::fromFile("/home/web/trombino/photos" . $user->promo() . "/" . $user->login() . ".jpg", "image/jpeg")->send(); exit; - break; case "new": S::assert_xsrf_token(); @@ -786,14 +774,14 @@ class ProfileModule extends PLModule $mimetype = substr($_FILES['userfile']['type'], 6); unlink($_FILES['userfile']['tmp_name']); XDB::execute( - "REPLACE INTO photo SET uid={?}, attachmime = {?}, attach={?}, x={?}, y={?}", - $user->id(), $mimetype, $data, $x, $y); + "REPLACE INTO profile_photos SET pid={?}, attachmime = {?}, attach={?}, x={?}, y={?}", + $user->profile()->id(), $mimetype, $data, $x, $y); break; case "delete": S::assert_xsrf_token(); - XDB::execute('DELETE FROM photo WHERE uid = {?}', $user->id()); + XDB::execute('DELETE FROM profile_photos WHERE pid = {?}', $user->profile()->id()); break; } } @@ -858,27 +846,14 @@ class ProfileModule extends PLModule $table_editor->describe('text','intitulé',true); $table_editor->apply($page, $action, $id); } - function handler_admin_ss_secteurs(&$page, $action = 'list', $id = null) { - $page->setTitle('Administration - Sous-secteurs'); - $page->assign('title', 'Gestion des sous-secteurs'); - $table_editor = new PLTableEditor('admin/ss_secteurs', 'emploi_ss_secteur', 'id', true); - $table_editor->describe('label', 'intitulé', true); - $table_editor->apply($page, $action, $id); - } - function handler_admin_fonctions(&$page, $action = 'list', $id = null) { - $page->setTitle('Administration - Fonctions'); - $page->assign('title', 'Gestion des fonctions'); - $table_editor = new PLTableEditor('admin/fonctions', 'fonctions_def', 'id', true); - $table_editor->describe('fonction_fr', 'intitulé', true); - $table_editor->describe('fonction_en', 'intitulé (ang)', true); - $table_editor->describe('flags', 'titre', true); - $table_editor->apply($page, $action, $id); - } - function handler_admin_secteurs(&$page, $action = 'list', $id = null) { + function handler_admin_sectors(&$page, $action = 'list', $id = null) { $page->setTitle('Administration - Secteurs'); $page->assign('title', 'Gestion des secteurs'); - $table_editor = new PLTableEditor('admin/secteurs', 'emploi_secteur', 'id', true); - $table_editor->describe('label', 'intitulé', true); + $table_editor = new PLTableEditor('admin/sectors', 'profile_job_subsubsector_enum', 'id', true); + $table_editor->describe('sectorid', 'id du secteur', false); + $table_editor->describe('subsectorid', 'id du sous-secteur', false); + $table_editor->describe('name', 'nom', true); + $table_editor->describe('flags', 'affichage', true); $table_editor->apply($page, $action, $id); } function handler_admin_networking(&$page, $action = 'list', $id = null) {