From db492b02844731e76d232a9f6c8be252b570e4bb Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rapha=C3=ABl=20Barrois?= Date: Sun, 31 Jul 2011 23:02:00 +0200 Subject: [PATCH] Fix PTA webservice: visibility, friends, address, phone, job, diploma. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Raphaël Barrois --- classes/profile.php | 2 +- classes/userfilter.php | 62 +++++++++++++++++------------------ classes/userfilter/conditions.inc.php | 24 +++++++------- include/profilefields.inc.php | 6 ++-- modules/ptawebservice/request.inc.php | 31 +++++++++++------- 5 files changed, 68 insertions(+), 57 deletions(-) diff --git a/classes/profile.php b/classes/profile.php index e9ff7b5..eb9839d 100644 --- a/classes/profile.php +++ b/classes/profile.php @@ -1000,7 +1000,7 @@ class Profile implements PlExportable pd.yourself, pd.promo, pd.short_name, pd.public_name AS full_name, pd.directory_name, pd.public_name, pd.private_name, IF (pp.pub >= {?}, pp.display_tel, NULL) AS mobile, - (ph.pub >= {?} AND ph.attach IS NOT NULL) AS has_photo, + (ph.pub >= {?} AND ph.attach IS NOT NULL) AS has_photo, ph.pub as photo_pub, ph.x AS photo_width, ph.y AS photo_height, p.last_change < DATE_SUB(NOW(), INTERVAL 365 DAY) AS is_old, pm.expertise AS mentor_expertise, diff --git a/classes/userfilter.php b/classes/userfilter.php index c46db70..236721d 100644 --- a/classes/userfilter.php +++ b/classes/userfilter.php @@ -155,7 +155,7 @@ class UserFilter extends PlFilter // The $sub.display_levels cell will contain allowed display levels // for an access level of $this->visibility_field. $sub = $this->addVisibilityFieldFilter($this->visibility_field); - return XDB::format('FIND_IN_SET({?}, ' . $sub . '.display_levels', $level); + return XDB::format('FIND_IN_SET({?}, ' . $sub . '.display_levels)', $level); } else { if ($this->visibility->isVisible($level)) { return 'TRUE'; @@ -643,36 +643,6 @@ class UserFilter extends PlFilter return $joins; } - /** VISIBILITY - */ - private $vlevels = array(); - private $vfields = array(); - public function addVisibilityAbsoluteFilter($level) - { - $sub = 'pvel_' . $level; - $this->vlevels[$level] = $sub; - return $sub; - } - - public function addVisibilityFieldFilter($field) - { - $sub = 'pvef_' . self::getDBSuffix($field); - $this->vfields[$field] = $sub; - return $sub; - } - - protected function visibilityJoins() - { - $joins = array(); - foreach ($this->vlevels as $level => $sub) { - $joins[$sub] = PlSqlJoin::inner('profile_visibility_enum', '$ME.access_level = {?}', $level); - } - foreach ($this->vfields as $field => $sub) { - $joins[$sub] = PlSqlJoin::inner('profile_visibility_enum', '$ME.access_level = ' . $field); - } - return $joins; - } - /** PERMISSIONS */ private $at = false; @@ -1441,6 +1411,36 @@ class UserFilter extends PlFilter $sub = $this->addPartnerSharingFilter($partner_id); $this->visibility_field = $sub . '.sharing_level'; } + /** VISIBILITY + */ + private $vlevels = array(); + private $vfields = array(); + public function addVisibilityAbsoluteFilter($level) + { + $sub = 'pvel_' . $level; + $this->vlevels[$level] = $sub; + return $sub; + } + + public function addVisibilityFieldFilter($field) + { + $sub = 'pvef_' . self::getDBSuffix($field); + $this->vfields[$field] = $sub; + return $sub; + } + + protected function visibilityJoins() + { + $joins = array(); + foreach ($this->vlevels as $level => $sub) { + $joins[$sub] = PlSqlJoin::inner('profile_visibility_enum', '$ME.access_level = {?}', $level); + } + foreach ($this->vfields as $field => $sub) { + $joins[$sub] = PlSqlJoin::inner('profile_visibility_enum', '$ME.access_level = ' . $field); + } + return $joins; + } + } // }}} // {{{ class ProfileFilter diff --git a/classes/userfilter/conditions.inc.php b/classes/userfilter/conditions.inc.php index bf060ca..cb8f5de 100644 --- a/classes/userfilter/conditions.inc.php +++ b/classes/userfilter/conditions.inc.php @@ -1623,16 +1623,16 @@ class UFC_PartnerSharing extends UserFilterCondition { const PTA = 'pta'; - private $partner; + private $partner_id; - public function __construct($partner) + public function __construct($partner_id) { - $this->partner = $partner; + $this->partner_id = $partner_id; } public function buildCondition(PlFilter $uf) { - $sub = $uf->addPartnerSharingFilter($this->partner); + $sub = $uf->addPartnerSharingFilter($this->partner_id); return XDB::format("$sub.exposed_uid IS NOT NULL"); } } @@ -1643,16 +1643,16 @@ class UFC_PartnerSharing extends UserFilterCondition */ class UFC_PartnerSharingEmail extends UserFilterCondition { - private $partner; + private $partner_id; - public function __construct($partner) + public function __construct($partner_id) { - $this->partner = $partner; + $this->partner_id = $partner_id; } public function buildCondition(PlFilter $uf) { - $sub = $uf->addPartnerSharingFilter($this->partner); + $sub = $uf->addPartnerSharingFilter($this->partner_id); return XDB::format("$sub.allow_email IN ('digest', 'direct')"); } } @@ -1662,12 +1662,12 @@ class UFC_PartnerSharingEmail extends UserFilterCondition */ class UFC_PartnerSharingID extends UserFilterCondition { - private $partner; + private $partner_id; private $ids; - public function __construct($partner) + public function __construct($partner_id) { - $this->partner = $partner; + $this->partner_id = $partner_id; $ids = func_get_args(); array_shift($ids); $this->ids = pl_flatten($ids); @@ -1677,7 +1677,7 @@ class UFC_PartnerSharingID extends UserFilterCondition { $uf->requireProfiles(); $ids = $this->ids; - $sub = $uf->addPartnerSharingFilter($this->partner); + $sub = $uf->addPartnerSharingFilter($this->partner_id); return XDB::format("$sub.exposed_uid IN {?}", $ids); } } diff --git a/include/profilefields.inc.php b/include/profilefields.inc.php index 9500224..c1dd074 100644 --- a/include/profilefields.inc.php +++ b/include/profilefields.inc.php @@ -193,6 +193,9 @@ class Job public $user_site; public $user_email; + public $pub; + public $email_pub; + /** Fields are: * pid, id, company_id, description, url, email */ @@ -611,8 +614,7 @@ class ProfileJobs extends ProfileField public static function fetchData(array $pids, Visibility $visibility) { CompanyList::preload($pids); - $data = XDB::iterator('SELECT id, pid, description, url as user_site, jobid, - IF(pve.best_display_level + 0 <= email_pub + 0, email, NULL) AS user_email + $data = XDB::iterator('SELECT id, pid, description, url as user_site, jobid, pub, IF(pve.best_display_level + 0 <= email_pub + 0, email, NULL) AS user_email, email_pub FROM profile_job LEFT JOIN profile_visibility_enum AS pve ON (pve.access_level = {?}) WHERE pid IN {?} AND pve.best_display_level + 0 <= pub + 0 diff --git a/modules/ptawebservice/request.inc.php b/modules/ptawebservice/request.inc.php index a6c9d3a..44ef174 100644 --- a/modules/ptawebservice/request.inc.php +++ b/modules/ptawebservice/request.inc.php @@ -85,7 +85,7 @@ class WSDirectoryRequest $profiles = array(); if ($matches) { // TODO : improve fetching by passing an adequate FETCH field - $iter = $pf->iterProfiles(new PlLimit($this->amount), 0x0000, Visibility::VIEW_PRIVATE); + $iter = $pf->iterProfiles(new PlLimit($this->amount), 0x0000, Visibility::get(Visibility::VIEW_PRIVATE)); while ($profile = $iter->next()) { if ($profile->getPartnerSettings($this->partner->id)->exposed_uid !== 0) { $profile_data = new WSRequestEntry($this->partner, $profile); @@ -411,7 +411,7 @@ class WSRequestEntry return null; } case WSRequestFields::MOBILE_PHONE: - $phones = $p->getPhones(Phone::TYPE_MOBILE); + $phones = $p->getPhones(Profile::PHONE_TYPE_MOBILE | Profile::PHONE_LINK_PROFILE); if (count($phones)) { $phone = array_pop($phones); if ($this->isVisible($phone->pub)) { @@ -428,7 +428,7 @@ class WSRequestEntry WHERE pid = {?}', $p->pid); XDB::execute('INSERT INTO profile_photo_tokens SET pid = {?}, token = {?}, - expires = ADDTIME(NOW(), \'0:05:00\'', + expires = ADDTIME(NOW(), \'0:05:00\')', $p->pid, $token); $size_mappings = array( WSRequestFields::PIC_SMALL => 'small', @@ -445,14 +445,14 @@ class WSRequestEntry case WSRequestFields::CURRENT_CITY: $address = $p->getMainAddress(); if ($address != null && $this->isVisible($address->pub)) { - return $address->localityName; + return $address->locality; } else { return null; } case WSRequestFields::CURRENT_COUNTRY: $address = $p->getMainAddress(); if ($address != null && $this->isVisible($address->pub)) { - return $address->countryId; + return $address->country; } else { return null; } @@ -477,10 +477,10 @@ class WSRequestEntry $res = array(); foreach ($jobs as $job) { if ($this->isVisible($job->pub)) { - $jobs[] = $this->jobToResponse($job); + $res[] = $this->jobToResponse($job); } } - return $jobs; + return $res; case WSRequestFields::MINI_RESUME: if ($this->isVisible(Visibility::EXPORT_PRIVATE)) { return $p->cv; @@ -500,8 +500,13 @@ class WSRequestEntry case WSRequestFields::FRIENDS: $friends = array(); if ($this->isVisible(Visibility::EXPORT_PRIVATE)) { - while ($contact = $p->owner()->iterContacts()) { - $cps = $contact->getPartnerSettings(UFC_PartnerSharing::PTA); + $contacts = $p->owner()->iterContacts(); + if ($contacts == null) { + return $friends; + } + + while ($contact = $contacts->next()) { + $cps = $contact->getPartnerSettings($this->partner->id); if ($cps->sharing_visibility->isVisible(Visibility::EXPORT_PRIVATE)) { $friends[] = $cps->exposed_uid; } @@ -550,8 +555,8 @@ class WSRequestEntry $data = array(); $data['street'] = $address->postalText; $data['zipcode'] = $address->postalCode; - $data['city'] = $address->localityName; - $data['country'] = $address->countryId; + $data['city'] = $address->locality; + $data['country'] = $address->country; $data['latitude'] = $address->latitude; $data['longitude'] = $address->longitude; return $data; @@ -697,6 +702,10 @@ class WSRequestFields const GENDER_MAN = 'man'; const GENDER_WOMAN = 'woman'; + const DIPLOMA_ING = 'engineer'; + const DIPLOMA_MASTER = 'master'; + const DIPLOMA_PHD = 'phd'; + public static $CHOICES = array( self::UID, self::FIRSTNAME, -- 2.1.4