X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=modules%2Fprofile%2Fjobs.inc.php;h=924ebac79c07cf9c0299c877c51366934686d2e7;hb=a0fce0c603f6fc686dbab66268a786114786b188;hp=a56a6bb7ae604a7d603f8ef76b8a20b9172fae27;hpb=a93519575833e6886e055abb8b43b3ada6f163bc;p=platal.git diff --git a/modules/profile/jobs.inc.php b/modules/profile/jobs.inc.php index a56a6bb..924ebac 100644 --- a/modules/profile/jobs.inc.php +++ b/modules/profile/jobs.inc.php @@ -1,6 +1,6 @@ pub = new ProfilePub(); - $this->mail - = $this->mail_new - = new ProfileEmail(); - $this->web = new ProfileWeb(); - $this->bool = new ProfileBool(); - $this->checks = array('web' => array('w_web'), - 'mail_new' => array('w_email_new'), - 'mail' => array('w_email'), - 'pub' => array('pub', 'w_email_pub')); + $this->pub = new ProfileSettingPub(); + $this->email + = $this->email_new + = new ProfileSettingEmail(); + $this->url = new ProfileSettingWeb(); + $this->bool = new ProfileSettingBool(); + $this->checks = array('url' => array('w_url'), + 'email' => array('w_email'), + 'pub' => array('pub', 'w_email_pub'), + ); + } + + public function emptyJob() + { + 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_phone' => '', + '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_email' => '', + 'w_email_pub' => 'private', + 'w_email_new' => '', + 'w_phone' => array(0 => array( + 'type' => 'fixed', + 'tel' => '', + 'pub' => 'private', + 'comment' => '', + )), + ); } 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']; + } foreach ($this->checks as $obj=>&$fields) { $chk =& $this->$obj; foreach ($fields as $field) { - if ($field == "w_email_new") { - if ($job['w_email'] == "new@example.org") { - $job['w_email'] = $job[$field]; - } - continue; - } $job[$field] = $chk->value($page, $field, $job[$field], $s); if (!$s) { $success = false; @@ -61,22 +129,22 @@ class ProfileJob extends ProfileGeocoding } } } - if (!$job['sss_secteur_name']) { + if (!$job['subSubSectorName']) { $res = XDB::query("SELECT name FROM profile_job_subsubsector_enum WHERE id = {?}", - $job['sss_secteur']); - $job['sss_secteur_name'] = $res->fetchOneCell(); + $job['subSubSector']); + $job['subSubSectorName'] = $res->fetchOneCell(); } else { $res = XDB::query("SELECT sectorid, subsectorid, id FROM profile_job_subsubsector_enum WHERE name = {?}", - $job['sss_secteur_name']); + $job['subSubSectorName']); if ($res->numRows() != 1) { $success = false; $job['sector_error'] = true; } else { - list($job['secteur'], $job['ss_secteur'], $job['sss_secteur']) = $res->fetchOneRow(); + list($job['sector'], $job['subSector'], $job['subSubSector']) = $res->fetchOneRow(); } } if ($job['name']) { @@ -85,32 +153,35 @@ class ProfileJob extends ProfileGeocoding WHERE name = {?}", $job['name']); if ($res->numRows() != 1) { - $user = S::user(); - $req = new EntrReq($user, $jobid, $job['name'], $job['acronym'], $job['hq_web'], $job['hq_email'], $job['hq_tel'], $job['hq_fax']); + $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(); $job['jobid'] = null; + sleep(1); } else { $job['jobid'] = $res->fetchOneCell(); } } - $job['w_adr']['pub'] = $this->pub->value($page, 'adr_pub', @$job['w_adr']['pub'], $s); - $job['w_adr']['checked'] = $this->bool->value($page, 'adr_checked', @$job['w_adr']['checked'], $s); - if (!isset($job['w_tel'])) { - $job['w_tel'] = array(); + $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 ProfilePhones('pro', $jobid); - $job['w_tel'] = $profiletel->value($page, 'tel', $job['w_tel'], $s); + $profiletel = new ProfileSettingPhones('pro', $jobid); + $job['w_phone'] = $profiletel->value($page, 'tel', $job['w_phone'], $s); + unset($job['removed']); unset($job['new']); - unset($job['w_adr']['changed']); - unset($job['w_adr']['parsevalid']); - unset($job['w_adr']['display']); } public function value(ProfilePage &$page, $field, $value, &$success) { - require_once('validations.inc.php'); - $entreprise = Validate::get_typed_requests(S::i('uid'), 'entreprise'); + require_once 'validations.inc.php'; + $entreprise = ProfileValidate::get_typed_requests($page->pid(), 'entreprise'); $entr_val = 0; $init = false; @@ -119,19 +190,33 @@ class ProfileJob extends ProfileGeocoding $init = true; } $success = true; - foreach ($value as $key=>&$job) { + foreach ($value as $key => &$job) { $job['name'] = trim($job['name']); - if (!$job['name']) { + if ($job['name'] == '' && $entreprise) { $job['tmp_name'] = $entreprise[$entr_val]->name; - $entr_val ++; + ++$entr_val; + } else if ($job['name'] == '') { + 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; + } + + $job['name_error'] = true; + $success = false; } - if (@$job['removed']) { - unset($value[$key]); + + if (isset($job['removed']) && $job['removed']) { + if ($job['name'] == '' && $entreprise) { + $entreprise[$entr_val - 1]->clean(); + } + array_splice($value, $key, 1); } } - foreach ($value as $key=>&$job) { + foreach ($value as $key => &$job) { $ls = true; - $this->geocodeAddress($job['w_adr'], $s); + $this->geocodeAddress($job['w_address'], $s); $ls = ($ls && $s); $this->cleanJob($page, $key, $job, $s); $ls = ($ls && $s); @@ -144,39 +229,57 @@ class ProfileJob extends ProfileGeocoding public function save(ProfilePage &$page, $field, $value) { - require_once('profil.func.inc.php'); - require_once('validations.inc.php'); + // TODO: use address and phone classes to update profile_job_enum and profile_phones once they are done. + + require_once 'profil.func.inc.php'; XDB::execute("DELETE FROM profile_job - WHERE uid = {?}", - S::i('uid')); + WHERE pid = {?}", + $page->pid()); + XDB::execute("DELETE FROM profile_addresses + WHERE pid = {?} AND type = 'job'", + $page->pid()); XDB::execute("DELETE FROM profile_phones - WHERE uid = {?} AND link_type = 'pro'", - S::i('uid')); - foreach ($value as $id=>&$job) { - if ($job['w_email'] == "new@example.org") { - $job['w_email'] = $job['w_email_new']; - } - if ($job['jobid']) { - XDB::execute("INSERT INTO profile_job (uid, id, functionid, description, sectorid, subsectorid, - subsubsectorid, email, url, pub, email_pub, jobid) - VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})", - S::i('uid'), $id, $job['fonction'], $job['description'], $job['secteur'], $job['ss_secteur'], - $job['sss_secteur'], $job['w_email'], $job['w_web'], $job['pub'], $job['w_email_pub'], $job['jobid']); - } else { - XDB::execute("INSERT INTO profile_job (uid, id, functionid, description, sectorid, subsectorid, - subsubsectorid, email, url, pub, email_pub) - VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})", - S::i('uid'), $id, $job['fonction'], $job['description'], $job['secteur'], $job['ss_secteur'], - $job['sss_secteur'], $job['w_email'], $job['w_web'], $job['pub'], $job['w_email_pub']); + WHERE pid = {?} AND link_type = 'pro'", + $page->pid()); + 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']); + } 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']); + } + $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']); } - $profiletel = new ProfilePhones('pro', $id); - $profiletel->saveTels('tel', $job['w_tel']); } } + + public function getText($value) { + $jobs = array(); + foreach ($value as $id => $job) { + $address = new ProfileSettingAddress(); + $phones = new ProfileSettingPhones('pro', $id); + $jobs[] = 'Entreprise : ' . $job['name'] . ', secteur : ' . $job['subSubSectorName'] + . ', description : ' . $job['description'] . ', web : ' . $job['w_url'] + . ', email : ' . $job['w_email'] + . ', ' . $phones->getText($job['w_phone']) . ', ' . $address->getText($job['w_address']); + } + return implode(' ; ' , $jobs); + } } -class ProfileJobs extends ProfilePage +class ProfileSettingJobs extends ProfilePage { protected $pg_template = 'profile/jobs.tpl'; @@ -184,8 +287,9 @@ class ProfileJobs extends ProfilePage { parent::__construct($wiz); $this->settings['cv'] = null; + /* TODO: ProfileSettingCorps, required for notifications. */ $this->settings['corps'] = null; - $this->settings['jobs'] = new ProfileJob(); + $this->settings['jobs'] = new ProfileSettingJob(); $this->watched = array('cv' => true, 'jobs' => true, 'corps' => true); } @@ -193,132 +297,211 @@ class ProfileJobs extends ProfilePage { // Checkout the CV $res = XDB::query("SELECT cv - FROM auth_user_md5 - WHERE user_id = {?}", - S::i('uid')); + 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 uid = {?}", - S::i('uid')); + WHERE pid = {?}", + $this->pid()); $this->values['corps'] = $res->fetchOneAssoc(); // Build the jobs tree - $res = XDB::iterRow("SELECT j.id, je.name, j.functionid, j.sectorid, j.subsectorid, - j.subsubsectorid, j.description, e.adr1, e.adr2, e.adr3, - e.postcode, e.city, e.cityid, e.region, e.regiontxt, - e.country, gc.countryFR, pa.accuracy, - j.email, j.url, j.pub, - e.adr_pub, j.email_pub, - e.glat, e.glng, s.name + $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 entreprises AS e ON (j.uid = e.uid AND j.id = e.entrid) - LEFT JOIN geoloc_countries AS gc ON (gc.iso_3166_1_a2 = e.country) LEFT JOIN profile_job_subsubsector_enum AS s ON (s.id = j.subsubsectorid) - WHERE j.uid = {?} - ORDER BY entrid", S::i('uid')); + 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') + WHERE j.pid = {?} + ORDER BY j.id", + $this->pid()); $this->values['jobs'] = array(); - while (list($id, $name, $function, $secteur, $ss_secteur, $sss_secteur, $description, - $w_adr1, $w_adr2, $w_adr3, $w_postcode, $w_city, $w_cityid, - $w_region, $w_regiontxt, $w_country, $w_countrytxt, - $w_checked, $w_email, $w_web, - $pub, $w_adr_pub, $w_email_pub, $w_glat, $w_glng, $sss_secteur_name - ) = $res->next()) { - $this->values['jobs'][] = array('id' => $id, - 'name' => $name, - 'fonction' => $function, - 'secteur' => $secteur, - 'ss_secteur' => $ss_secteur, - 'sss_secteur' => $sss_secteur, - 'sss_secteur_name' => $sss_secteur_name, - 'description' => $description, - 'w_adr' => array('adr1' => $w_adr1, - 'adr2' => $w_adr2, - 'adr3' => $w_adr3, - 'postcode' => $w_postcode, - 'city' => $w_city, - 'cityid' => $w_cityid, - 'region' => $w_region, - 'regiontxt' => $w_regiontxt, - 'country' => $w_country, - 'countrytxt' => $w_countrytxt, - 'pub' => $w_adr_pub, - 'checked' => (($w_checked == 0)? true : false), - 'precise_lat' => $w_glat, - 'precise_lon' => $w_glng), - 'w_email' => $w_email, - 'w_web' => $w_web, - 'pub' => $pub, - 'w_email_pub' => $w_email_pub); - } - $res = XDB::iterator("SELECT link_id AS jobid, tel_type AS type, pub, display_tel AS tel, comment - FROM profile_phones - WHERE uid = {?} AND link_type = 'pro' - ORDER BY link_id", - S::i('uid')); - $i = 0; - $jobNb = count($this->values['jobs']); - while ($tel = $res->next()) { - $jobid = $tel['jobid']; - unset($tel['jobid']); - while ($i < $jobNb && $this->values['jobs'][$i]['id'] < $jobid) { - $i++; + 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()) { + $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, + ), + ); } - if ($i >= $jobNb) { - break; + + $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", + $this->pid()); + $i = 0; + $jobNb = count($this->values['jobs']); + while ($phone = $res->next()) { + $jobid = $phone['jobid']; + while ($i < $jobNb && $this->values['jobs'][$i]['id'] < $jobid) { + $i++; + } + if ($i >= $jobNb) { + break; + } + $job =& $this->values['jobs'][$i]; + if (!isset($job['w_phone'])) { + $job['w_phone'] = array(); + } + if ($job['id'] == $jobid) { + $job['w_phone'][] = $phone; + } } - $job =& $this->values['jobs'][$i]; - if (!isset($job['w_tel'])) { - $job['w_tel'] = array(); + foreach ($this->values['jobs'] as $id => &$job) { + if (!isset($job['w_phone'])) { + $job['w_phone'] = array( + 0 => array( + 'type' => 'fixed', + 'tel' => '', + 'pub' => 'private', + 'comment' => '', + ) + ); + } } - if ($job['id'] == $jobid) { - $job['w_tel'][] = $tel; + + $job['w_email_new'] = ''; + if (!isset($job['hq_phone'])) { + $job['hq_phone'] = ''; } - } - foreach ($this->values['jobs'] as $id=>&$job) { - if (!isset($job['w_tel'])) { - $job['w_tel'] = array(); + if (!isset($job['hq_fax'])) { + $job['hq_fax'] = ''; } - unset($job['id']); + 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(); } } protected function _saveData() { if ($this->changed['cv']) { - XDB::execute("UPDATE auth_user_md5 + XDB::execute("UPDATE profiles SET cv = {?} - WHERE user_id = {?}", - $this->values['cv'], S::i('uid')); + WHERE pid = {?}", + $this->values['cv'], $this->pid()); } if ($this->changed['corps']) { - XDB::execute("UPDATE profile_corps - SET original_corpsid = {?}, current_corpsid = {?}, - rankid = {?}, corps_pub = {?} - WHERE uid = {?}", + 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'], S::i('uid')); + $this->values['corps']['rank'], $this->values['corps']['pub'], $this->pid()); } } public function _prepare(PlPage &$page, $id) { - require_once "emails.combobox.inc.php"; - fill_email_combobox($page); + require_once 'emails.combobox.inc.php'; + fill_email_combobox($page, $this->owner, $this->profile); $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()); $res = XDB::iterator("SELECT id, name FROM profile_corps_enum @@ -332,7 +515,8 @@ class ProfileJobs extends ProfilePage $page->assign('current_corps', $res->fetchAllAssoc()); $res = XDB::iterator("SELECT id, name - FROM profile_corps_rank_enum"); + FROM profile_corps_rank_enum + ORDER BY id = 1 DESC, name"); $page->assign('corps_rank', $res->fetchAllAssoc()); } }