Add Group::getLogo() and Profile::getPhoto() based on PlImage.
[platal.git] / classes / profile.php
index d68c959..0ce66e7 100644 (file)
@@ -61,6 +61,9 @@ class Profile
         $this->data = $data;
         $this->pid = $this->data['pid'];
         $this->hrpid = $this->data['hrpid'];
+        if (!S::logged()) {
+            $this->setVisibilityLevel(self::VISIBILITY_PUBLIC);
+        }
     }
 
     public function id()
@@ -164,6 +167,32 @@ class Profile
     }
 
 
+    /* Photo
+     */
+    public function getPhoto($fallback = true)
+    {
+        /* TODO: migrate photo table to profile_photo, change uid to pid
+         */
+        $cond = '';
+        if ($this->visibility) {
+            $cond = ' AND pub IN ' . XDB::formatArray($this->visibility);
+        }
+        $res = XDB::query('SELECT  *
+                             FROM  photo
+                            WHERE  attachmime IN (\'jpeg\', \'png\')
+                                   ' . $cond . ' AND  uid = {?}',
+                          $this->id());
+        if ($res->numRows() > 0) {
+            $photo = $res->fetchOneAssoc();
+            return PlImage::fromData($photo['attach'], 'image/' . $photo['attachmime'],
+                                     $photo['x'], $photo['y']);
+        } else if ($fallback) {
+            return PlImage::fromFile(dirname(__FILE__).'/../htdocs/images/none.png',
+                                     'image/png');
+        }
+        return null;
+    }
+
     /* Addresses
      */
     public function getAddresses($flags, $limit = null)
@@ -286,6 +315,43 @@ class Profile
     }
 
 
+    /** Jobs
+     */
+
+    public function getJobs($flags, $limit = null)
+    {
+        $where = XDB::format('pj.uid = {?}', $this->id());
+        $cond  = 'TRUE';
+        if ($this->visibility) {
+            $where .= ' AND pj.pub IN ' . XDB::formatArray($this->visibility);
+            $cond  =  'pj.email_pub IN ' . XDB::formatArray($this->visibility);
+        }
+        $limit = is_null($limit) ? '' : XDB::format('LIMIT {?}', (int)$limit);
+        return XDB::iterator('SELECT  pje.name, pje.acronym, pje.url, pje.email, pje.NAF_code,
+                                      pj.description, pj.url AS user_site,
+                                      IF (' . $cond . ', pj.email, NULL) AS user_email,
+                                      pjse.name AS sector, pjsse.name AS subsector,
+                                      pjssse.name AS subsubsector
+                                FROM  profile_job AS pj
+                          INNER JOIN  profile_job_enum AS pje ON (pje.id = pj.jobid)
+                           LEFT JOIN  profile_job_sector_enum AS pjse ON (pjse.id = pj.sectorid)
+                           LEFT JOIN  profile_job_subsector_enum AS pjsse ON (pjsse.id = pj.subsectorid)
+                           LEFT JOIN  profile_job_subsubsector_enum AS pjssse ON (pjssse.id = pj.subsubsectorid)
+                               WHERE  ' . $where . '
+                            ORDER BY  pj.id
+                                      ' . $limit);
+    }
+
+    public function getMailJob()
+    {
+        $job = $this->getJobs(self::JOBS_MAIN, 1);
+        if ($job->total() != 1) {
+            return null;
+        }
+        return $job->next();
+    }
+
+
     public function owner()
     {
         return User::getSilent($this);
@@ -301,21 +367,22 @@ class Profile
                                            IF(pn_uf.name IS NULL, pn_f.name, pn_uf.name) AS firstname_usual,
                                            IF(pn_ul.name IS NULL, pn_l.name, pn_ul.name) AS lastname_usual,
                                            pd.promo AS promo, pd.short_name, pd.directory_name AS full_name,
-                                           pp.display_tel AS mobile, pp.pub AS mobile_pub
+                                           pp.display_tel AS mobile, pp.pub AS mobile_pub, ph.pub AS photo_pub
                                      FROM  profiles AS p
                                INNER JOIN  profile_display AS pd ON (pd.pid = p.pid)
                                INNER JOIN  profile_education AS pe ON (pe.uid = p.pid AND FIND_IN_SET(\'primary\', pe.flags))
                                INNER JOIN  profile_name AS pn_f ON (pn_f.pid = p.pid
-                                                                    AND pn_f.typeid = ' . self::getNameTypeId('lastname', true) . ')
+                                                                    AND pn_f.typeid = ' . self::getNameTypeId('firstname', true) . ')
                                INNER JOIN  profile_name AS pn_l ON (pn_l.pid = p.pid
-                                                                    AND pn_l.typeid = ' . self::getNameTypeId('firstname', true) . ')
+                                                                    AND pn_l.typeid = ' . self::getNameTypeId('lastname', true) . ')
                                 LEFT JOIN  profile_name AS pn_uf ON (pn_uf.pid = p.pid
-                                                                     AND pn_uf.typeid = ' . self::getNameTypeId('lastname_ordinary', true) . ')
+                                                                     AND pn_uf.typeid = ' . self::getNameTypeId('firstname_ordinary', true) . ')
                                 LEFT JOIN  profile_name AS pn_ul ON (pn_ul.pid = p.pid
-                                                                     AND pn_ul.typeid = ' . self::getNameTypeId('firstname_ordinary', true) . ')
+                                                                     AND pn_ul.typeid = ' . self::getNameTypeId('lastname_ordinary', true) . ')
                                 LEFT JOIN  profile_name AS pn_n ON (pn_n.pid = p.pid 
                                                                     AND pn_n.typeid = ' . self::getNameTypeId('nickname', true) . ')
                                 LEFT JOIN  profile_phones AS pp ON (pp.uid = p.pid AND pp.link_type = \'user\' AND tel_type = \'mobile\')
+                                LEFT JOIN  photo AS ph ON (ph.uid = p.pid)
                                     WHERE  p.pid IN ' . XDB::formatArray($pids) . '
                                  GROUP BY  p.pid');
     }