X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=modules%2Fprofile.php;h=a6fc07f0a014f15a7ef5562dfea7addbd04df93a;hb=c52be69950d31821a8a091f08ad9170e1042eaf8;hp=f055c30eaaaa238dbd885a2b516832b0cb273b73;hpb=12ddbc2037b16496dfb9d91c4f7091850146fcde;p=platal.git diff --git a/modules/profile.php b/modules/profile.php index f055c30..a6fc07f 100644 --- a/modules/profile.php +++ b/modules/profile.php @@ -139,25 +139,25 @@ class ProfileModule extends PLModule exit; } - /** Tries to return the correct user from given hrpid - * Will redirect to $returnurl$hrpid if $hrpid was empty + /** Tries to return the correct profile from a given hrpid. */ - private function findProfile($returnurl, $hrpid = null) + private function findProfile($hrpid = null) { if (is_null($hrpid)) { $user = S::user(); if (!$user->hasProfile()) { return PL_NOT_FOUND; } else { - pl_redirect($returnurl . $user->profile()->hrid()); + $profile = $user->profile(); } } else { $profile = Profile::get($hrpid); - if (!$profile) { - return PL_NOT_FOUND; - } else if (!S::user()->canEdit($profile) && Platal::notAllowed()) { - return PL_FORBIDDEN; - } + } + + if (!$profile) { + return PL_NOT_FOUND; + } else if (!S::user()->canEdit($profile) && Platal::notAllowed()) { + return PL_FORBIDDEN; } return $profile; } @@ -165,10 +165,13 @@ class ProfileModule extends PLModule function handler_photo_change(&$page, $hrpid = null) { global $globals; - $profile = $this->findProfile('photo/change/', $hrpid); + $profile = $this->findProfile($hrpid); if (! ($profile instanceof Profile) && ($profile == PL_NOT_FOUND || $profile == PL_FORBIDDEN)) { return $profile; } + if (is_null($hrpid)) { + pl_redirect('photo/change/' . $profile->hrid()); + } $page->changeTpl('profile/trombino.tpl'); $page->assign('hrpid', $profile->hrid()); @@ -232,17 +235,6 @@ class ProfileModule extends PLModule if (is_null($id)) { return PL_NOT_FOUND; } - $pid = (!is_numeric($id) || S::admin()) ? Profile::getPID($id) : null; - if (is_null($pid)) { - if (S::logged()) { - $page->trigError($id . " inconnu dans l'annuaire."); - } - return PL_NOT_FOUND; - } - - // Now that we know this is an existing profile, we can switch to the - // appropriate template. - $page->changeTpl('profile/profile.tpl', SIMPLE); // Determines the access level at which the profile will be displayed. if (!S::logged() || !S::user()->checkPerms('directory_ax') || Env::v('view') == 'public') { @@ -258,13 +250,30 @@ class ProfileModule extends PLModule $page->assign('with_pending_pic', true); } - // Fetches profile's and profile's owner information and redirects to - // marketing if the owner has not subscribed and the requirer has logged in. - $profile = Profile::get($pid, Profile::FETCH_ALL, $view); - $owner = $profile->owner(); - if (S::logged() && !is_null($owner) && $owner->state == 'pending') { - pl_redirect('marketing/public/' . $profile->hrid()); + $pid = (!is_numeric($id) || S::admin()) ? Profile::getPID($id) : null; + if (is_null($pid)) { + $owner = User::getSilent($id); + if ($owner) { + $profile = $owner->profile(true, Profile::FETCH_ALL, $view); + if ($profile) { + $pid = $profile->id(); + } + } + } else { + // Fetches profile's and profile's owner information and redirects to + // marketing if the owner has not subscribed and the requirer has logged in. + $profile = Profile::get($pid, Profile::FETCH_ALL, $view); + $owner = $profile->owner(); + } + if (is_null($pid)) { + if (S::logged()) { + $page->kill($id . " inconnu dans l'annuaire."); + } + return PL_NOT_FOUND; } + // Now that we know this is an existing profile, we can switch to the + // appropriate template. + $page->changeTpl('profile/profile.tpl', SIMPLE); // Profile view are logged. if (S::logged()) { @@ -304,10 +313,21 @@ class ProfileModule extends PLModule { global $globals; - $profile = $this->findProfile('profile/edit/', $hrpid); + if (in_array($hrpid, array('general', 'adresses', 'emploi', 'poly', 'deco', 'skill', 'mentor'))) { + $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('ajax.js'); @@ -381,7 +401,7 @@ class ProfileModule extends PLModule $page->assign('address', array()); } - function handler_ajax_tel(&$page, $prefid, $prefname, $telid) + function handler_ajax_tel(&$page, $prefid, $prefname, $telid, $subField, $mainField, $mainId) { pl_content_headers("text/html"); $page->changeTpl('profile/phone.tpl', NO_SKIN); @@ -390,6 +410,11 @@ class ProfileModule extends PLModule $page->assign('telid', $telid); $phone = new Phone(); $page->assign('tel', $phone->toFormArray()); + if ($mainField) { + $page->assign('subField', $subField); + $page->assign('mainField', $mainField); + $page->assign('mainId', $mainId); + } } function handler_ajax_edu(&$page, $eduid, $class) @@ -495,7 +520,7 @@ class ProfileModule extends PLModule // Retrieves referents' countries. $res = XDB::query( - "SELECT gc.countryFR + "SELECT gc.country FROM profile_mentor_country AS m LEFT JOIN geoloc_countries AS gc ON (m.country = gc.iso_3166_1_a2) WHERE pid = {?}", $pf->id()); @@ -509,11 +534,11 @@ class ProfileModule extends PLModule pl_content_headers("text/html"); $page->changeTpl('include/field.select.tpl', NO_SKIN); $page->assign('name', 'pays_sel'); - $it = XDB::iterator("SELECT gc.iso_3166_1_a2 AS id, gc.countryFR AS field + $it = XDB::iterator("SELECT gc.iso_3166_1_a2 AS id, gc.country AS field FROM geoloc_countries AS gc INNER JOIN profile_mentor_country AS mp ON (mp.country = gc.iso_3166_1_a2) GROUP BY iso_3166_1_a2 - ORDER BY countryFR"); + ORDER BY country"); $page->assign('list', $it); } @@ -589,8 +614,9 @@ class ProfileModule extends PLModule } $res .= "\n"; } - XDB::query('REPLACE INTO search_autocomplete - VALUES ({?}, {?}, {?}, NOW())', + XDB::query('INSERT INTO search_autocomplete (name, query, result, generated) + VALUES ({?}, {?}, {?}, NOW()) + ON DUPLICATE KEY UPDATE result = VALUES(result), generated = VALUES(generated)', $type, $q_normalized, $res); echo $res; exit(); @@ -669,13 +695,14 @@ class ProfileModule extends PLModule S::assert_xsrf_token(); $data = file_get_contents($_FILES['userfile']['tmp_name']); - list($x, $y) = getimagesize($_FILES['userfile']['tmp_name']); - $mimetype = substr($_FILES['userfile']['type'], 6); - unlink($_FILES['userfile']['tmp_name']); - XDB::execute( - "REPLACE INTO profile_photos SET pid={?}, attachmime = {?}, attach={?}, x={?}, y={?}", - $user->profile()->id(), $mimetype, $data, $x, $y); - break; + list($x, $y) = getimagesize($_FILES['userfile']['tmp_name']); + $mimetype = substr($_FILES['userfile']['type'], 6); + unlink($_FILES['userfile']['tmp_name']); + XDB::execute('INSERT INTO profile_photos (pid, attachmime, attach, x, y) + VALUES ({?}, {?}, {?}, {?}, {?}) + ON DUPLICATE KEY UPDATE attachmime = VALUES(attachmime), attach = VALUES(attach), x = VALUES(x), y = VALUES(y)', + $user->profile()->id(), $mimetype, $data, $x, $y); + break; case "delete": S::assert_xsrf_token(); @@ -730,10 +757,10 @@ class ProfileModule extends PLModule $table_editor->describe('degree', 'niveau', true); $table_editor->apply($page, $action, $id); } - function handler_admin_education_degree_set(&$page, $action = 'list', $id = null) { + function handler_admin_education_degree_set(&$page, $action = 'list', $id = null, $id2 = null) { $page->setTitle('Administration - Correspondances formations - niveau de formation'); $page->assign('title', 'Gestion des correspondances formations - niveau de formation'); - $table_editor = new PLTableEditor('admin/education_degree_set', 'profile_education_degree', 'eduid', true); + $table_editor = new PLTableEditor('admin/education_degree_set', 'profile_education_degree', 'eduid', true, 'degreeid'); $table_editor->describe('eduid', 'id formation', true); $table_editor->describe('degreeid', 'id niveau', true); @@ -744,7 +771,7 @@ class ProfileModule extends PLModule $table_editor->add_option_table('profile_education_degree_enum','profile_education_degree_enum.id = t.degreeid'); $table_editor->add_option_field('profile_education_degree_enum.degree', 'degree_name', 'niveau'); - $table_editor->apply($page, $action, $id); + $table_editor->apply($page, $action, $id, $id2); } function handler_admin_sections(&$page, $action = 'list', $id = null) { $page->setTitle('Administration - Sections');