* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
***************************************************************************/
-class ProfileJob extends ProfileGeocoding
+class ProfileSettingJob extends ProfileSettingGeocoding
{
private $pub;
private $email_new;
public function __construct()
{
- $this->pub = new ProfilePub();
+ $this->pub = new ProfileSettingPub();
$this->email
= $this->email_new
- = new ProfileEmail();
- $this->url = new ProfileWeb();
- $this->bool = new ProfileBool();
+ = 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'),
'changed' => '0',
'removed' => '0',
),
- 'hq_phone' => '',
+ 'hq_fixed' => '',
'hq_fax' => '',
'subSubSectorName' => null,
'sector' => '0',
'tel' => '',
'pub' => 'private',
'comment' => '',
- )),
+ ),
+ 'terms' => array()),
);
}
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 = S::user();
$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 ProfilePhones('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']);
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;
$init = true;
}
$success = true;
- foreach ($value as $key=>&$job) {
+ foreach ($value as $key => &$job) {
$job['name'] = trim($job['name']);
- if (!$job['name'] && $entreprise) {
+ 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 (isset($job['removed']) && $job['removed']) {
- unset($value[$key]);
+ 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_address'], $s);
$ls = ($ls && $s);
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 = {?}",
- $this->pid());
+ $page->pid());
XDB::execute("DELETE FROM profile_addresses
WHERE pid = {?} AND type = 'job'",
- $this->pid());
- XDB::execute("DELETE FROM profile_phones
- WHERE pid = {?} AND link_type = 'pro'",
- $this->pid());
- foreach ($value as $id=>&$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']) {
XDB::execute("INSERT INTO profile_job (pid, id, description, sectorid, subsectorid,
subsubsectorid, email, url, pub, email_pub, jobid)
VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})",
- $this->pid(), $id, $job['description'], $job['sector'], $job['subSector'],
+ $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 ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})",
- $this->pid(), $id, $job['description'], $job['sector'], $job['subSector'],
+ $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 ProfileAddress();
- $address->saveAddress($id, $job['w_address'], 'job');
- $profiletel = new ProfilePhones('pro', $id);
- $profiletel->saveTels('tel', $job['w_phone']);
+ $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) {
+ $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'];
}
}
-class ProfileJobs extends ProfilePage
+class ProfileSettingJobs extends ProfilePage
{
protected $pg_template = 'profile/jobs.tpl';
{
parent::__construct($wiz);
$this->settings['cv'] = null;
- $this->settings['corps'] = null;
- $this->settings['jobs'] = new ProfileJob();
+ $this->settings['corps'] = new ProfileSettingCorps();
+ $this->settings['jobs'] = new ProfileSettingJob();
$this->watched = array('cv' => true, 'jobs' => true, 'corps' => true);
}
$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();
-
// 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,
);
}
- $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",
- S::i('uid'));
+ $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++;
}
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'] = '';
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 pid = {?}",
- $this->values['corps']['original'], $this->values['corps']['current'],
- $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, $this->owner, $this->profile);
+ 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('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());
}
}