+ $success = ($success && $s);
+ }
+ }
+ usort($value, 'ProfileVisibility::comparePublicity');
+ return $value;
+ }
+
+ public function save(ProfilePage &$page, $field, $value)
+ {
+ $deletePrivate = S::user()->isMe($page->owner) || S::admin();
+ XDB::execute('DELETE FROM pj, pjt
+ USING profile_job AS pj
+ LEFT JOIN profile_job_term AS pjt ON (pj.pid = pjt.pid AND pj.id = pjt.jid)
+ WHERE pj.pid = {?}' . (($deletePrivate) ? '' : ' AND pj.pub IN (\'public\', \'ax\')'),
+ $page->pid());
+ Address::deleteAddresses($page->pid(), Address::LINK_JOB, null, $deletePrivate);
+ Phone::deletePhones($page->pid(), Phone::LINK_JOB, null, $deletePrivate);
+ $terms_values = array();
+ foreach ($value as $id => &$job) {
+ if (($job['pub'] != 'private' || $deletePrivate) && (isset($job['name']) && $job['name'])) {
+ if (isset($job['jobid']) && $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, 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 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::format('({?}, {?}, {?}, {?})',
+ $page->pid(), $id, $term['jtid'], "original");
+ }
+ }
+ }
+ }
+ if (count($terms_values) > 0) {
+ XDB::rawExecute('INSERT INTO profile_job_term (pid, jid, jtid, computed)
+ VALUES ' . implode(', ', $terms_values) . '
+ ON DUPLICATE KEY UPDATE computed = VALUES(computed)');
+ }
+ if (S::user()->isMe($page->owner) && count($value) > 1) {
+ Platal::page()->trigWarning('Attention, tu as plusieurs emplois sur ton profil. Pense à supprimer ceux qui sont obsolètes.');
+ }
+ }
+
+ public function getText($value)
+ {
+ static $pubs = array('public' => 'publique', 'ax' => 'annuaire AX', 'private' => 'privé');
+ $jobs = array();
+ foreach ($value as $id => $job) {
+ $address = Address::formArrayToString(array($job['w_address']));
+ $phones = Phone::formArrayToString($job['w_phone']);
+ $jobs[$id] = $job['name'];
+ $jobs[$id] .= ($job['description'] ? (', ' . $job['description']) : '');
+ $jobs[$id] .= ' (affichage ' . $pubs[$job['pub']];
+ if (count($job['terms'])) {
+ $terms = array();
+ foreach ($job['terms'] as $term) {
+ $terms[] = $term['full_name'];
+ }
+ $jobs[$id] .= ', mots-clefs : ' . implode(', ', $terms);
+ }
+ if ($job['w_url']) {
+ $jobs[$id] .= ', page perso : ' . $job['w_url'];
+ }
+ if ($address) {
+ $jobs[$id] .= ', adresse : ' . $address;