X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=modules%2Fprofile%2Fjobs.inc.php;h=453d21fa84e3630b9eac03e17763bd048a690186;hb=972fd3c59f152b7f2d61f7aa30afc819f094e4aa;hp=ccd7d0db9a79476f907a377a286407bb4a691aec;hpb=0b6c8b36e62b950d1b24088e98c4026a54efe9d0;p=platal.git diff --git a/modules/profile/jobs.inc.php b/modules/profile/jobs.inc.php index ccd7d0d..453d21f 100644 --- a/modules/profile/jobs.inc.php +++ b/modules/profile/jobs.inc.php @@ -19,7 +19,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * ***************************************************************************/ -class ProfileSettingJob extends ProfileSettingGeocoding +class ProfileSettingJob implements ProfileSetting { private $pub; private $email_new; @@ -44,78 +44,26 @@ class ProfileSettingJob extends ProfileSettingGeocoding public function emptyJob() { + $address = new Address(); + $phone = new Phone(); return array( 'id' => '0', 'jobid' => '', 'pub' => 'private', 'name' => '', - 'hq_acronym' => '', - 'hq_url' => '', - 'hq_email' => '', - 'hq_address' => array( - 'text' => '', - 'accuracy' => '', - 'postalText' => '', - 'postalCode' => '', - 'administrativeAreaId' => '', - 'subAdministrativeAreaId' => '', - 'localityId' => '', - 'countryId' => '', - 'latitude' => '', - 'longitude' => '', - 'north' => '', - 'south' => '', - 'east' => '', - 'west' => '', - 'cedex' => '', - 'updateTime' => '', - 'changed' => '0', - 'removed' => '0', - ), - 'hq_fixed' => '', - 'hq_fax' => '', - 'subSubSectorName' => null, - 'sector' => '0', - 'subSector' => '0', - 'subSubSector' => '0', 'description' => '', 'w_url' => '', - 'w_address' => array( - 'pub' => 'private', - 'text' => '', - 'accuracy' => '', - 'postalText' => '', - 'postalCode' => '', - 'administrativeAreaId' => '', - 'subAdministrativeAreaId' => '', - 'localityId' => '', - 'countryId' => '', - 'latitude' => '', - 'longitude' => '', - 'north' => '', - 'south' => '', - 'east' => '', - 'west' => '', - 'cedex' => '', - 'updateTime' => '', - 'changed' => '0', - 'removed' => '0', - ), + 'w_address' => $address->toFormArray(), 'w_email' => '', 'w_email_pub' => 'private', 'w_email_new' => '', - 'w_phone' => array(0 => array( - 'type' => 'fixed', - 'tel' => '', - 'pub' => 'private', - 'comment' => '', - )), + 'w_phone' => array(0 => $phone->toFormArray()), + 'terms' => array() ); } private function cleanJob(ProfilePage &$page, $jobid, array &$job, &$success) { - $success = true; if ($job['w_email'] == "new@example.org") { $job['w_email'] = $job['w_email_new']; } @@ -129,22 +77,24 @@ class ProfileSettingJob extends ProfileSettingGeocoding } } } - if (!$job['subSubSectorName']) { - $res = XDB::query("SELECT name - FROM profile_job_subsubsector_enum - WHERE id = {?}", - $job['subSubSector']); - $job['subSubSectorName'] = $res->fetchOneCell(); - } else { - $res = XDB::query("SELECT sectorid, subsectorid, id - FROM profile_job_subsubsector_enum - WHERE name = {?}", - $job['subSubSectorName']); - if ($res->numRows() != 1) { - $success = false; - $job['sector_error'] = true; - } else { - 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']) { @@ -153,11 +103,6 @@ class ProfileSettingJob extends ProfileSettingGeocoding WHERE name = {?}", $job['name']); if ($res->numRows() != 1) { - $this->geocodeAddress($job['hq_address'], $s); - if (!$s) { - $gmapsGeocoder = new GMapsGeocoder(); - $job['hq_address'] = $gmapsGeocoder->stripGeocodingFromAddress($job['hq_address']); - } $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(); @@ -167,7 +112,6 @@ class ProfileSettingJob extends ProfileSettingGeocoding $job['jobid'] = $res->fetchOneCell(); } } - $job['w_address']['pub'] = $this->pub->value($page, 'address_pub', $job['w_address']['pub'], $s); $job['w_phone'] = Phone::formatFormArray($job['w_phone'], $s); unset($job['removed']); @@ -192,15 +136,17 @@ class ProfileSettingJob extends ProfileSettingGeocoding $job['tmp_name'] = $entreprise[$entr_val]->name; ++$entr_val; } else if ($job['name'] == '') { - if ($job['subSubSectorName'] == '' && $job['description'] == '' && $job['w_url'] == '' + if ($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; } - $job['name_error'] = true; - $success = false; + if (!$init) { + $job['name_error'] = true; + $success = false; + } } if (isset($job['removed']) && $job['removed']) { @@ -211,13 +157,12 @@ class ProfileSettingJob extends ProfileSettingGeocoding } } foreach ($value as $key => &$job) { - $ls = true; - $this->geocodeAddress($job['w_address'], $s); - $ls = ($ls && $s); + $address = new Address($job['w_address']); + $s = $address->format(); + $job['w_address'] = $address->toFormArray(); $this->cleanJob($page, $key, $job, $s); - $ls = ($ls && $s); if (!$init) { - $success = ($success && $ls); + $success = ($success && $s); } } return $value; @@ -225,45 +170,49 @@ class ProfileSettingJob extends ProfileSettingGeocoding public function save(ProfilePage &$page, $field, $value) { - // 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()); + Address::delete($page->pid(), Address::LINK_JOB); 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']) { - XDB::execute("INSERT INTO profile_job (pid, id, description, sectorid, subsectorid, - subsubsectorid, email, url, pub, email_pub, jobid) - VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})", - $page->pid(), $id, $job['description'], $job['sector'], $job['subSector'], - $job['subSubSector'], $job['w_email'], $job['w_url'], $job['pub'], $job['w_email_pub'], $job['jobid']); + XDB::execute('INSERT INTO profile_job (pid, id, description, email, url, pub, email_pub, jobid) + VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})', + $page->pid(), $id, $job['description'], $job['w_email'], $job['w_url'], $job['pub'], $job['w_email_pub'], $job['jobid']); } else { - XDB::execute("INSERT INTO profile_job (pid, id, description, sectorid, subsectorid, - subsubsectorid, email, url, pub, email_pub) - VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})", - $page->pid(), $id, $job['description'], $job['sector'], $job['subSector'], - $job['subSubSector'], $job['w_email'], $job['w_url'], $job['pub'], $job['w_email_pub']); + XDB::execute('INSERT INTO profile_job (pid, id, description, email, url, pub, email_pub) + VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?})', + $page->pid(), $id, $job['description'], $job['w_email'], $job['w_url'], $job['pub'], $job['w_email_pub']); } - $address = new ProfileSettingAddress(); - $address->saveAddress($page->pid(), $id, $job['w_address'], 'job'); + $address = new Address(array_merge($job['w_address'], array('pid' => $page->pid(), 'id' => $id, 'type' => Address::LINK_JOB))); + $address->save(); 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(); + $address = Address::formArrayToString($job['w_address']); $phones = Phone::formArrayToString($job['w_phone']); - $jobs[] = 'Entreprise : ' . $job['name'] . ', secteur : ' . $job['subSubSectorName'] + // TODO: add jobterms here. + $jobs[] = 'Entreprise : ' . $job['name'] . ', description : ' . $job['description'] . ', web : ' . $job['w_url'] . ', email : ' . $job['w_email'] - . ($phones ? ', ' . $phones : '') . ', ' . $address->getText($job['w_address']); + . ($phones ? ', ' . $phones : '') . ($address ? ', ' . $address : ''); } return implode(' ; ' , $jobs); } @@ -308,7 +257,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,150 +267,90 @@ 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, - s.name, j.description, j.email, j.email_pub, j.url, j.pub, - je.acronym, je.url, je.email, - aw.accuracy, aw.text, aw.postalText, aw.postalCode, aw.localityId, - aw.subAdministrativeAreaId, aw.administrativeAreaId, aw.countryId, - aw.latitude, aw.longitude, aw.pub, aw.updateTime, - aw.north, aw.south, aw.east, aw.west, - ah.accuracy, ah.text, ah.postalText, ah.postalCode, ah.localityId, - ah.subAdministrativeAreaId, ah.administrativeAreaId, ah.countryId, - ah.latitude, ah.longitude, ah.pub, ah.updateTime, - ah.north, ah.south, ah.east, ah.west - FROM profile_job AS j - LEFT JOIN profile_job_enum AS je ON (j.jobid = je.id) - LEFT JOIN profile_job_subsubsector_enum AS s ON (s.id = j.subsubsectorid) - LEFT JOIN profile_addresses AS aw ON (aw.pid = j.pid AND aw.type = 'job' - AND aw.id = j.id) - LEFT JOIN profile_addresses AS ah ON (ah.jobid = j.jobid AND ah.type = 'hq') + $res = XDB::iterRow('SELECT j.id, j.jobid, je.name, j.description, j.email, j.email_pub, + j.url, j.pub + FROM profile_job AS j + LEFT JOIN profile_job_enum AS je ON (j.jobid = je.id) WHERE j.pid = {?} - ORDER BY j.id", + ORDER BY j.id', $this->pid()); $this->values['jobs'] = array(); + $compagnies = array(); if ($res->numRows() > 0) { - while (list($id, $jobid, $name, $sector, $subSector, $subSubSector, - $subSubSectorName, $description, $w_email, $w_emailPub, $w_url, $pub, - $hq_acronym, $hq_url, $hq_email, - $w_accuracy, $w_text, $w_postalText, $w_postalCode, $w_localityId, - $w_subAdministrativeAreaId, $w_administrativeAreaId, $w_countryId, - $w_latitude, $w_longitude, $w_pub, $w_updateTime, - $w_north, $w_south, $w_east, $w_west, - $hq_accuracy, $hq_text, $hq_postalText, $hq_postalCode, $hq_localityId, - $hq_subAdministrativeAreaId, $hq_administrativeAreaId, $hq_countryId, - $hq_latitude, $hq_longitude, $hq_pub, $hq_updateTime, - $hq_north, $hq_south, $hq_east, $hq_west, - ) = $res->next()) { + while (list($id, $jobid, $name, $description, $w_email, $w_emailPub, $w_url, $pub) = $res->next()) { + $compagnies[] = $jobid; $this->values['jobs'][] = array( 'id' => $id, 'jobid' => $jobid, 'name' => $name, - 'sector' => $sector, - 'subSector' => $subSector, - 'subSubSector' => $subSubSector, - 'subSubSectorName' => $subSubSectorName, 'description' => $description, 'pub' => $pub, 'w_email' => $w_email, 'w_email_pub' => $w_emailPub, 'w_url' => $w_url, - 'hq_acronym' => $hq_acronym, - 'hq_url' => $hq_url, - 'hq_email' => $hq_email, - 'w_address' => array( - 'accuracy' => $w_accuracy, - 'text' => $w_text, - 'postalText' => $w_postalText, - 'postalCode' => $w_postalCode, - 'localityId' => $w_localityId, - 'subAdministrativeAreaId' => $w_subAdministrativeAreaId, - 'administrativeAreaId' => $w_administrativeAreaId, - 'countryId' => $w_countryId, - 'latitude' => $w_latitude, - 'longitude' => $w_longitude, - 'pub' => $w_pub, - 'updateTime' => $w_updateTime, - 'north' => $w_north, - 'south' => $w_south, - 'east' => $w_east, - 'west' => $w_west, - ), - 'hq_address' => array( - 'accuracy' => $hq_accuracy, - 'text' => $hq_text, - 'postalText' => $hq_postalText, - 'postalCode' => $hq_postalCode, - 'localityId' => $hq_localityId, - 'subAdministrativeAreaId' => $hq_subAdministrativeAreaId, - 'administrativeAreaId' => $hq_administrativeAreaId, - 'countryId' => $hq_countryId, - 'latitude' => $hq_latitude, - 'longitude' => $hq_longitude, - 'pub' => $hq_pub, - 'updateTime' => $hq_updateTime, - 'north' => $hq_north, - 'south' => $hq_south, - 'east' => $hq_east, - 'west' => $hq_west, - ), ); } + $it = Address::iterate(array($this->pid()), array(Address::LINK_JOB)); + while ($address = $it->next()) { + $this->values['jobs'][$address->jobid]['w_address'] = $address->toFormArray(); + } $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 ($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; + } + + $phone = new Phone(); + $address = new Address(); foreach ($this->values['jobs'] as $id => &$job) { - $phone = new Phone(); if (!isset($job['w_phone'])) { $job['w_phone'] = array(0 => $phone->toFormArray()); } + if (!isset($job['w_address'])) { + $job['w_address'] = $address->toFormArray(); + } } $job['w_email_new'] = ''; - if (!isset($job['hq_fixed'])) { - $job['hq_fixed'] = ''; - } - if (!isset($job['hq_fax'])) { - $job['hq_fax'] = ''; - } if (!isset($job['w_email_pub'])) { $job['w_email_pub'] = 'private'; } - if (!$job['hq_address']['text']) { - $job['hq_address'] = array( - 'text' => '', - 'accuracy' => '', - 'postalText' => '', - 'postalCode' => '', - 'administrativeAreaId' => '', - 'subAdministrativeAreaId' => '', - 'localityId' => '', - 'countryId' => '', - 'latitude' => '', - 'longitude' => '', - 'north' => '', - 'south' => '', - 'east' => '', - 'west' => '', - 'cedex' => '', - 'updateTime' => '', - 'changed' => '0', - 'removed' => '0', - ); - } - $job['w_address']['cedex'] = ''; - $job['w_address']['changed'] = '0'; - $job['w_address']['removed'] = '0'; } else { $this->values['jobs'][] = $this->settings['jobs']->emptyJob(); } @@ -467,11 +358,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()); + } } } @@ -480,10 +373,6 @@ class ProfileSettingJobs extends ProfilePage require_once 'emails.combobox.inc.php'; fill_email_combobox($page, $this->owner); - $res = XDB::query("SELECT id, name AS label - FROM profile_job_sector_enum"); - $page->assign('sectors', $res->fetchAllAssoc()); - $res = XDB::iterator("SELECT id, name FROM profile_corps_enum ORDER BY id = 1 DESC, name");