X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=modules%2Fprofile%2Fjobs.inc.php;h=79b8f41ef478029ef3bab85bc37ca55a6b2e2993;hb=b539d596a51ba7b0d18cbf6eb0440f15061004ff;hp=f50e762db82d81bc10744b36ae4f2601994d2727;hpb=ed01acac4af9b0df4209b3e6e3e7d10284c76b9c;p=platal.git diff --git a/modules/profile/jobs.inc.php b/modules/profile/jobs.inc.php index f50e762..79b8f41 100644 --- a/modules/profile/jobs.inc.php +++ b/modules/profile/jobs.inc.php @@ -72,7 +72,7 @@ class ProfileSettingJob extends ProfileSettingGeocoding 'changed' => '0', 'removed' => '0', ), - 'hq_phone' => '', + 'hq_fixed' => '', 'hq_fax' => '', 'subSubSectorName' => null, 'sector' => '0', @@ -109,7 +109,8 @@ class ProfileSettingJob extends ProfileSettingGeocoding 'tel' => '', 'pub' => 'private', 'comment' => '', - )), + ), + 'terms' => array()), ); } @@ -147,32 +148,48 @@ 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 WHERE name = {?}", $job['name']); if ($res->numRows() != 1) { - $user = $page->profile->owner; $this->geocodeAddress($job['hq_address'], $s); if (!$s) { $gmapsGeocoder = new GMapsGeocoder(); $job['hq_address'] = $gmapsGeocoder->stripGeocodingFromAddress($job['hq_address']); } - $req = new EntrReq($user, $jobid, $job['name'], $job['hq_acronym'], $job['hq_url'], + $req = new EntrReq(S::user(), $page->profile, $jobid, $job['name'], $job['hq_acronym'], $job['hq_url'], $job['hq_email'], $job['hq_fixed'], $job['hq_fax'], $job['hq_address']); $req->submit(); $job['jobid'] = null; + sleep(1); } else { $job['jobid'] = $res->fetchOneCell(); } } $job['w_address']['pub'] = $this->pub->value($page, 'address_pub', $job['w_address']['pub'], $s); - if (!isset($job['w_phone'])) { - $job['w_phone'] = array(); - } - $profiletel = new ProfileSettingPhones('pro', $jobid); - $job['w_phone'] = $profiletel->value($page, 'tel', $job['w_phone'], $s); + $job['w_phone'] = Phone::formatFormArray($job['w_phone'], $s); unset($job['removed']); unset($job['new']); @@ -181,7 +198,7 @@ class ProfileSettingJob extends ProfileSettingGeocoding public function value(ProfilePage &$page, $field, $value, &$success) { require_once 'validations.inc.php'; - $entreprise = Validate::get_typed_requests($page->profile->owner->id(), 'entreprise'); + $entreprise = ProfileValidate::get_typed_requests($page->pid(), 'entreprise'); $entr_val = 0; $init = false; @@ -196,12 +213,30 @@ class ProfileSettingJob extends ProfileSettingGeocoding $job['tmp_name'] = $entreprise[$entr_val]->name; ++$entr_val; } else if ($job['name'] == '') { - $job['name_error'] = true; - $success = false; + if ($job['subSubSectorName'] == '' && $job['description'] == '' && $job['w_url'] == '' + && $job['w_address']['text'] == '' && $job['w_email'] == '' + && count($job['w_phone']) == 1 && $job['w_phone']['tel'] == '') { + array_splice($value, $key, 1); + continue; + } + + if (!$init) { + $job['name_error'] = true; + $success = false; + } } + if (isset($job['removed']) && $job['removed']) { + if ($job['name'] == '' && $entreprise) { + $entreprise[$entr_val - 1]->clean(); + } 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; @@ -218,20 +253,15 @@ class ProfileSettingJob extends ProfileSettingGeocoding public function save(ProfilePage &$page, $field, $value) { - // TODO: use address and phone classes to update profile_job_enum and profile_phones once they are done. - - require_once 'profil.func.inc.php'; - require_once 'validations.inc.php'; - + // TODO: use address class to update profile_job_enum once it is done. XDB::execute("DELETE FROM profile_job WHERE pid = {?}", $page->pid()); XDB::execute("DELETE FROM profile_addresses WHERE pid = {?} AND type = 'job'", $page->pid()); - XDB::execute("DELETE FROM profile_phones - WHERE pid = {?} AND link_type = 'pro'", - $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']) { @@ -249,10 +279,63 @@ class ProfileSettingJob extends ProfileSettingGeocoding } $address = new ProfileSettingAddress(); $address->saveAddress($page->pid(), $id, $job['w_address'], 'job'); - $profiletel = new ProfileSettingPhones('pro', $id); - $profiletel->saveTels($page->pid(), 'tel', $job['w_phone']); + 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) { + $jobs = array(); + foreach ($value as $id => $job) { + $address = new ProfileSettingAddress(); + $phones = Phone::formArrayToString($job['w_phone']); + $jobs[] = 'Entreprise : ' . $job['name'] . ', secteur : ' . $job['subSubSectorName'] + . ', description : ' . $job['description'] . ', web : ' . $job['w_url'] + . ', email : ' . $job['w_email'] + . ($phones ? ', ' . $phones : '') . ', ' . $address->getText($job['w_address']); + } + return implode(' ; ' , $jobs); + } +} + +class ProfileSettingCorps implements ProfileSetting +{ + public function value(ProfilePage &$page, $field, $value, &$success) + { + $success = true; + if (is_null($value)) { + $res = XDB::query("SELECT original_corpsid AS original, current_corpsid AS current, + rankid AS rank, corps_pub AS pub + FROM profile_corps + WHERE pid = {?}", + $page->pid()); + return $res->fetchOneAssoc(); + } + return $value; + } + + public function save(ProfilePage &$page, $field, $value) + { + XDB::execute('REPLACE INTO profile_corps (original_corpsid, current_corpsid, rankid, corps_pub, pid) + VALUES ({?}, {?}, {?}, {?}, {?})', + $value['original'], $value['current'], $value['rank'], $value['pub'], $page->pid()); + } + + public function getText($value) + { + $corpsList = DirEnum::getOptions(DirEnum::CORPS); + $rankList = DirEnum::getOptions(DirEnum::CORPSRANKS); + return 'Corps actuel : ' . $corpsList[$value['current']] . ' , rang : ' . $corpsList[$value['rank']] + . ' , corps d\'origine : ' . $corpsList[$value['original']] . ' , affichage : ' . $value['pub']; } } @@ -263,28 +346,24 @@ class ProfileSettingJobs extends ProfilePage public function __construct(PlWizard &$wiz) { parent::__construct($wiz); - $this->settings['cv'] = null; - $this->settings['corps'] = 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); } protected function _fetchData() { - // Checkout the CV - $res = XDB::query("SELECT cv - FROM profiles - WHERE pid = {?}", - $this->pid()); - $this->values['cv'] = $res->fetchOneCell(); - - // Checkout the corps - $res = XDB::query("SELECT original_corpsid AS original, current_corpsid AS current, - rankid AS rank, corps_pub AS pub - FROM profile_corps - WHERE pid = {?}", - $this->pid()); - $this->values['corps'] = $res->fetchOneAssoc(); + 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, @@ -377,15 +456,20 @@ class ProfileSettingJobs extends ProfilePage ); } - $res = XDB::iterator("SELECT link_id AS jobid, tel_type AS type, pub, display_tel AS tel, comment - FROM profile_phones - WHERE pid = {?} AND link_type = 'pro' - ORDER BY link_id", + $it = Phone::iterate(array($this->pid()), array(Phone::LINK_JOB)); + 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 ($phone = $res->next()) { - $jobid = $phone['jobid']; + while ($term = $res->next()) { + $jobid = $term['jobid']; while ($i < $jobNb && $this->values['jobs'][$i]['id'] < $jobid) { $i++; } @@ -393,29 +477,25 @@ class ProfileSettingJobs extends ProfilePage break; } $job =& $this->values['jobs'][$i]; - if (!isset($job['w_phone'])) { - $job['w_phone'] = array(); + if ($job['id'] != $jobid) { + continue; } - if ($job['id'] == $jobid) { - $job['w_phone'][] = $phone; + 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'])) { - $job['w_phone'] = array( - 0 => array( - 'type' => 'fixed', - 'tel' => '', - 'pub' => 'private', - 'comment' => '', - ) - ); + $job['w_phone'] = array(0 => $phone->toFormArray()); } } - + $job['w_email_new'] = ''; - if (!isset($job['hq_phone'])) { - $job['hq_phone'] = ''; + if (!isset($job['hq_fixed'])) { + $job['hq_fixed'] = ''; } if (!isset($job['hq_fax'])) { $job['hq_fax'] = ''; @@ -455,25 +535,20 @@ 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 ($this->changed['corps']) { - XDB::execute('REPLACE INTO profile_corps (original_corpsid, current_corpsid, rankid, corps_pub, pid) - VALUES ({?}, {?}, {?}, {?}, {?})', - $this->values['corps']['original'], $this->values['corps']['current'], - $this->values['corps']['rank'], $this->values['corps']['pub'], $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()); + } } } public function _prepare(PlPage &$page, $id) { require_once 'emails.combobox.inc.php'; - fill_email_combobox($page, $this->owner, $this->profile); + fill_email_combobox($page, $this->owner); $res = XDB::query("SELECT id, name AS label FROM profile_job_sector_enum");