X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;ds=sidebyside;f=modules%2Fprofile%2Fjobs.inc.php;h=79b8f41ef478029ef3bab85bc37ca55a6b2e2993;hb=b539d596a51ba7b0d18cbf6eb0440f15061004ff;hp=ccd7d0db9a79476f907a377a286407bb4a691aec;hpb=ed92ea696e042eb9b2d0efcc4731fdf89fb17924;p=platal.git diff --git a/modules/profile/jobs.inc.php b/modules/profile/jobs.inc.php index ccd7d0d..79b8f41 100644 --- a/modules/profile/jobs.inc.php +++ b/modules/profile/jobs.inc.php @@ -109,7 +109,8 @@ class ProfileSettingJob extends ProfileSettingGeocoding 'tel' => '', 'pub' => 'private', 'comment' => '', - )), + ), + 'terms' => array()), ); } @@ -147,6 +148,26 @@ class ProfileSettingJob extends ProfileSettingGeocoding list($job['sector'], $job['subSector'], $job['subSubSector']) = $res->fetchOneRow(); } } + if (count($job['terms'])) { + $termsid = array(); + foreach ($job['terms'] as $term) { + if (!$term['full_name']) { + $termsid[] = $term['jtid']; + } + } + if (count($termsid)) { + $res = XDB::query("SELECT jtid, full_name + FROM profile_job_term_enum + WHERE jtid IN {?}", + $termsid); + $term_id_to_name = $res->fetchAllAssoc('jtid', false); + foreach ($job['terms'] as &$term) { + if (!$term['full_name']) { + $term['full_name'] = $term_id_to_name[$term['jtid']]; + } + } + } + } if ($job['name']) { $res = XDB::query("SELECT id FROM profile_job_enum @@ -199,8 +220,10 @@ class ProfileSettingJob extends ProfileSettingGeocoding continue; } - $job['name_error'] = true; - $success = false; + if (!$init) { + $job['name_error'] = true; + $success = false; + } } if (isset($job['removed']) && $job['removed']) { @@ -209,6 +232,11 @@ class ProfileSettingJob extends ProfileSettingGeocoding } array_splice($value, $key, 1); } + foreach (array('sectorid', 'subsectorid', 'subsubsectorid') as $key) { + if ($job[$key] == 0) { + $job[$key] = null; + } + } } foreach ($value as $key => &$job) { $ls = true; @@ -233,6 +261,7 @@ class ProfileSettingJob extends ProfileSettingGeocoding WHERE pid = {?} AND type = 'job'", $page->pid()); Phone::deletePhones($page->pid(), Phone::LINK_JOB); + $terms_values = array(); foreach ($value as $id => &$job) { if (isset($job['name']) && $job['name']) { if (isset($job['jobid']) && $job['jobid']) { @@ -251,8 +280,17 @@ class ProfileSettingJob extends ProfileSettingGeocoding $address = new ProfileSettingAddress(); $address->saveAddress($page->pid(), $id, $job['w_address'], 'job'); Phone::savePhones($job['w_phone'], $page->pid(), Phone::LINK_JOB, $id); + if (isset($job['terms'])) { + foreach ($job['terms'] as $term) { + $terms_values[] = '('.XDB::escape($page->pid()).', '. XDB::escape($id).', '.XDB::escape($term['jtid']).', "original")'; + } + } } } + if (count($terms_values) > 0) { + XDB::execute('INSERT INTO profile_job_term (pid, jid, jtid, computed) + VALUES '.implode(', ', $terms_values)); + } } public function getText($value) { @@ -308,7 +346,9 @@ class ProfileSettingJobs extends ProfilePage public function __construct(PlWizard &$wiz) { parent::__construct($wiz); - $this->settings['cv'] = null; + if (S::user()->checkPerms(User::PERM_DIRECTORY_PRIVATE)) { + $this->settings['cv'] = null; + } $this->settings['corps'] = new ProfileSettingCorps(); $this->settings['jobs'] = new ProfileSettingJob(); $this->watched = array('cv' => true, 'jobs' => true, 'corps' => true); @@ -316,12 +356,14 @@ class ProfileSettingJobs extends ProfilePage protected function _fetchData() { - // Checkout the CV - $res = XDB::query("SELECT cv - FROM profiles - WHERE pid = {?}", - $this->pid()); - $this->values['cv'] = $res->fetchOneCell(); + if (S::user()->checkPerms(User::PERM_DIRECTORY_PRIVATE)) { + // Checkout the CV + $res = XDB::query("SELECT cv + FROM profiles + WHERE pid = {?}", + $this->pid()); + $this->values['cv'] = $res->fetchOneCell(); + } // Build the jobs tree $res = XDB::iterRow("SELECT j.id, j.jobid, je.name, j.sectorid, j.subsectorid, j.subsubsectorid, @@ -418,6 +460,32 @@ class ProfileSettingJobs extends ProfilePage while ($phone = $it->next()) { $this->values['jobs'][$phone->linkId()]['w_phone'][$phone->id()] = $phone->toFormArray(); } + $res = XDB::iterator("SELECT e.jtid, e.full_name, j.jid AS jobid + FROM profile_job_term_enum AS e + INNER JOIN profile_job_term AS j USING(jtid) + WHERE pid = {?} + ORDER BY j.jid", + $this->pid()); + $i = 0; + $jobNb = count($this->values['jobs']); + while ($term = $res->next()) { + $jobid = $term['jobid']; + while ($i < $jobNb && $this->values['jobs'][$i]['id'] < $jobid) { + $i++; + } + if ($i >= $jobNb) { + break; + } + $job =& $this->values['jobs'][$i]; + if ($job['id'] != $jobid) { + continue; + } + if (!isset($job['terms'])) { + $job['terms'] = array(); + } + $job['terms'][] = $term; + } + foreach ($this->values['jobs'] as $id => &$job) { $phone = new Phone(); if (!isset($job['w_phone'])) { @@ -467,11 +535,13 @@ class ProfileSettingJobs extends ProfilePage protected function _saveData() { - if ($this->changed['cv']) { - XDB::execute("UPDATE profiles - SET cv = {?} - WHERE pid = {?}", - $this->values['cv'], $this->pid()); + if (S::user()->checkPerms(User::PERM_DIRECTORY_PRIVATE)) { + if ($this->changed['cv']) { + XDB::execute("UPDATE profiles + SET cv = {?} + WHERE pid = {?}", + $this->values['cv'], $this->pid()); + } } }