public function newValueForUsers($key, array $users)
 {
     $viewer = $this->getViewer();
     $file_phids = mpull($users, 'getProfileImagePHID');
     $file_phids = array_filter($file_phids);
     if ($file_phids) {
         $files = id(new PhabricatorFileQuery())->setViewer($viewer)->withPHIDs($file_phids)->execute();
         $files = mpull($files, null, 'getPHID');
     } else {
         $files = array();
     }
     $results = array();
     foreach ($users as $user) {
         $image_phid = $user->getProfileImagePHID();
         if (isset($files[$image_phid])) {
             $image_uri = $files[$image_phid]->getBestURI();
         } else {
             $image_uri = PhabricatorUser::getDefaultProfileImageURI();
         }
         $user_phid = $user->getPHID();
         $version = $this->getCacheVersion($user);
         $results[$user_phid] = "{$version},{$image_uri}";
     }
     return $results;
 }
 public function loadProfileImageURI()
 {
     $src_phid = $this->getProfileImagePHID();
     $file = id(new PhabricatorFile())->loadOneWhere('phid = %s', $src_phid);
     if ($file) {
         return $file->getBestURI();
     }
     return PhabricatorUser::getDefaultProfileImageURI();
 }
 protected function renderInput()
 {
     $file = $this->getValue();
     if ($file === null) {
         return phutil_tag('img', array('src' => PhabricatorUser::getDefaultProfileImageURI()), '');
     }
     $c_id = celerity_generate_unique_node_id();
     $metadata = $file->getMetadata();
     $scale = PhabricatorImageTransformer::getScaleForCrop($file, $this->getWidth(), $this->getHeight());
     Javelin::initBehavior('aphront-crop', array('cropBoxID' => $c_id, 'width' => $this->getWidth(), 'height' => $this->getHeight(), 'scale' => $scale, 'imageH' => $metadata[PhabricatorFile::METADATA_IMAGE_HEIGHT], 'imageW' => $metadata[PhabricatorFile::METADATA_IMAGE_WIDTH]));
     return javelin_tag('div', array('id' => $c_id, 'sigil' => 'crop-box', 'mustcapture' => true, 'class' => 'crop-box'), array(javelin_tag('img', array('src' => $file->getBestURI(), 'class' => 'crop-image', 'sigil' => 'crop-image'), ''), javelin_tag('input', array('type' => 'hidden', 'name' => 'image_x', 'sigil' => 'crop-x'), ''), javelin_tag('input', array('type' => 'hidden', 'name' => 'image_y', 'sigil' => 'crop-y'), '')));
 }
 protected function renderResultList(array $settings, PhabricatorSavedQuery $query, array $handles)
 {
     assert_instances_of($settings, 'PhabricatorUserPreferences');
     $viewer = $this->requireViewer();
     $list = id(new PHUIObjectItemListView())->setViewer($viewer);
     foreach ($settings as $setting) {
         $item = id(new PHUIObjectItemView())->setHeader($setting->getDisplayName())->setHref($setting->getEditURI())->setImageURI(PhabricatorUser::getDefaultProfileImageURI())->setIcon('fa-globe')->addAttribute(pht('Edit global default settings for all users.'));
         $list->addItem($item);
     }
     $list->addItem(id(new PHUIObjectItemView())->setHeader(pht('Personal Account Settings'))->addAttribute(pht('Edit settings for your personal account.'))->setImageURI($viewer->getProfileImageURI())->setHref('/settings/user/' . $viewer->getUsername() . '/'));
     return id(new PhabricatorApplicationSearchResultView())->setObjectList($list);
 }
 public function loadHandles()
 {
     $types = phid_group_by_type($this->phids);
     $handles = array();
     $external_loaders = PhabricatorEnv::getEnvConfig('phid.external-loaders');
     foreach ($types as $type => $phids) {
         switch ($type) {
             case PhabricatorPHIDConstants::PHID_TYPE_MAGIC:
                 // Black magic!
                 foreach ($phids as $phid) {
                     $handle = new PhabricatorObjectHandle();
                     $handle->setPHID($phid);
                     $handle->setType($type);
                     switch ($phid) {
                         case ManiphestTaskOwner::OWNER_UP_FOR_GRABS:
                             $handle->setName('Up For Grabs');
                             $handle->setFullName('upforgrabs (Up For Grabs)');
                             $handle->setComplete(true);
                             break;
                         case ManiphestTaskOwner::PROJECT_NO_PROJECT:
                             $handle->setName('No Project');
                             $handle->setFullName('noproject (No Project)');
                             $handle->setComplete(true);
                             break;
                         default:
                             $handle->setName('Foul Magicks');
                             break;
                     }
                     $handles[$phid] = $handle;
                 }
                 break;
             case PhabricatorPHIDConstants::PHID_TYPE_USER:
                 $object = new PhabricatorUser();
                 $users = $object->loadAllWhere('phid IN (%Ls)', $phids);
                 $users = mpull($users, null, 'getPHID');
                 $image_phids = mpull($users, 'getProfileImagePHID');
                 $image_phids = array_unique(array_filter($image_phids));
                 $images = array();
                 if ($image_phids) {
                     $images = id(new PhabricatorFile())->loadAllWhere('phid IN (%Ls)', $image_phids);
                     $images = mpull($images, 'getBestURI', 'getPHID');
                 }
                 $statuses = id(new PhabricatorUserStatus())->loadCurrentStatuses($phids);
                 foreach ($phids as $phid) {
                     $handle = new PhabricatorObjectHandle();
                     $handle->setPHID($phid);
                     $handle->setType($type);
                     if (empty($users[$phid])) {
                         $handle->setName('Unknown User');
                     } else {
                         $user = $users[$phid];
                         $handle->setName($user->getUsername());
                         $handle->setURI('/p/' . $user->getUsername() . '/');
                         $handle->setFullName($user->getUsername() . ' (' . $user->getRealName() . ')');
                         $handle->setAlternateID($user->getID());
                         $handle->setComplete(true);
                         if (isset($statuses[$phid])) {
                             $handle->setStatus($statuses[$phid]->getTextStatus());
                         }
                         $handle->setDisabled($user->getIsDisabled());
                         $img_uri = idx($images, $user->getProfileImagePHID());
                         if ($img_uri) {
                             $handle->setImageURI($img_uri);
                         } else {
                             $handle->setImageURI(PhabricatorUser::getDefaultProfileImageURI());
                         }
                     }
                     $handles[$phid] = $handle;
                 }
                 break;
             case PhabricatorPHIDConstants::PHID_TYPE_MLST:
                 $object = new PhabricatorMetaMTAMailingList();
                 $lists = $object->loadAllWhere('phid IN (%Ls)', $phids);
                 $lists = mpull($lists, null, 'getPHID');
                 foreach ($phids as $phid) {
                     $handle = new PhabricatorObjectHandle();
                     $handle->setPHID($phid);
                     $handle->setType($type);
                     if (empty($lists[$phid])) {
                         $handle->setName('Unknown Mailing List');
                     } else {
                         $list = $lists[$phid];
                         $handle->setName($list->getName());
                         $handle->setURI($list->getURI());
                         $handle->setFullName($list->getName());
                         $handle->setComplete(true);
                     }
                     $handles[$phid] = $handle;
                 }
                 break;
             case PhabricatorPHIDConstants::PHID_TYPE_DREV:
                 $object = new DifferentialRevision();
                 $revs = $object->loadAllWhere('phid in (%Ls)', $phids);
                 $revs = mpull($revs, null, 'getPHID');
                 foreach ($phids as $phid) {
                     $handle = new PhabricatorObjectHandle();
                     $handle->setPHID($phid);
                     $handle->setType($type);
                     if (empty($revs[$phid])) {
                         $handle->setName('Unknown Revision');
                     } else {
                         $rev = $revs[$phid];
                         $handle->setName($rev->getTitle());
                         $handle->setURI('/D' . $rev->getID());
                         $handle->setFullName('D' . $rev->getID() . ': ' . $rev->getTitle());
                         $handle->setComplete(true);
                         $status = $rev->getStatus();
                         if ($status == ArcanistDifferentialRevisionStatus::CLOSED || $status == ArcanistDifferentialRevisionStatus::ABANDONED) {
                             $closed = PhabricatorObjectHandleStatus::STATUS_CLOSED;
                             $handle->setStatus($closed);
                         }
                     }
                     $handles[$phid] = $handle;
                 }
                 break;
             case PhabricatorPHIDConstants::PHID_TYPE_CMIT:
                 $object = new PhabricatorRepositoryCommit();
                 $commits = $object->loadAllWhere('phid in (%Ls)', $phids);
                 $commits = mpull($commits, null, 'getPHID');
                 $repository_ids = array();
                 $callsigns = array();
                 if ($commits) {
                     $repository_ids = mpull($commits, 'getRepositoryID');
                     $repositories = id(new PhabricatorRepository())->loadAllWhere('id in (%Ld)', array_unique($repository_ids));
                     $callsigns = mpull($repositories, 'getCallsign');
                 }
                 foreach ($phids as $phid) {
                     $handle = new PhabricatorObjectHandle();
                     $handle->setPHID($phid);
                     $handle->setType($type);
                     if (empty($commits[$phid]) || !isset($callsigns[$repository_ids[$phid]])) {
                         $handle->setName('Unknown Commit');
                     } else {
                         $commit = $commits[$phid];
                         $callsign = $callsigns[$repository_ids[$phid]];
                         $repository = $repositories[$repository_ids[$phid]];
                         $commit_identifier = $commit->getCommitIdentifier();
                         // In case where the repository for the commit was deleted,
                         // we don't have have info about the repository anymore.
                         if ($repository) {
                             $name = $repository->formatCommitName($commit_identifier);
                             $handle->setName($name);
                         } else {
                             $handle->setName('Commit ' . 'r' . $callsign . $commit_identifier);
                         }
                         $handle->setURI('/r' . $callsign . $commit_identifier);
                         $handle->setFullName('r' . $callsign . $commit_identifier);
                         $handle->setTimestamp($commit->getEpoch());
                         $handle->setComplete(true);
                     }
                     $handles[$phid] = $handle;
                 }
                 break;
             case PhabricatorPHIDConstants::PHID_TYPE_TASK:
                 $object = new ManiphestTask();
                 $tasks = $object->loadAllWhere('phid in (%Ls)', $phids);
                 $tasks = mpull($tasks, null, 'getPHID');
                 foreach ($phids as $phid) {
                     $handle = new PhabricatorObjectHandle();
                     $handle->setPHID($phid);
                     $handle->setType($type);
                     if (empty($tasks[$phid])) {
                         $handle->setName('Unknown Revision');
                     } else {
                         $task = $tasks[$phid];
                         $handle->setName($task->getTitle());
                         $handle->setURI('/T' . $task->getID());
                         $handle->setFullName('T' . $task->getID() . ': ' . $task->getTitle());
                         $handle->setComplete(true);
                         $handle->setAlternateID($task->getID());
                         if ($task->getStatus() != ManiphestTaskStatus::STATUS_OPEN) {
                             $closed = PhabricatorObjectHandleStatus::STATUS_CLOSED;
                             $handle->setStatus($closed);
                         }
                     }
                     $handles[$phid] = $handle;
                 }
                 break;
             case PhabricatorPHIDConstants::PHID_TYPE_FILE:
                 $object = new PhabricatorFile();
                 $files = $object->loadAllWhere('phid IN (%Ls)', $phids);
                 $files = mpull($files, null, 'getPHID');
                 foreach ($phids as $phid) {
                     $handle = new PhabricatorObjectHandle();
                     $handle->setPHID($phid);
                     $handle->setType($type);
                     if (empty($files[$phid])) {
                         $handle->setName('Unknown File');
                     } else {
                         $file = $files[$phid];
                         $handle->setName($file->getName());
                         $handle->setURI($file->getBestURI());
                         $handle->setComplete(true);
                     }
                     $handles[$phid] = $handle;
                 }
                 break;
             case PhabricatorPHIDConstants::PHID_TYPE_PROJ:
                 $object = new PhabricatorProject();
                 $projects = $object->loadAllWhere('phid IN (%Ls)', $phids);
                 $projects = mpull($projects, null, 'getPHID');
                 foreach ($phids as $phid) {
                     $handle = new PhabricatorObjectHandle();
                     $handle->setPHID($phid);
                     $handle->setType($type);
                     if (empty($projects[$phid])) {
                         $handle->setName('Unknown Project');
                     } else {
                         $project = $projects[$phid];
                         $handle->setName($project->getName());
                         $handle->setURI('/project/view/' . $project->getID() . '/');
                         $handle->setComplete(true);
                     }
                     $handles[$phid] = $handle;
                 }
                 break;
             case PhabricatorPHIDConstants::PHID_TYPE_REPO:
                 $object = new PhabricatorRepository();
                 $repositories = $object->loadAllWhere('phid in (%Ls)', $phids);
                 $repositories = mpull($repositories, null, 'getPHID');
                 foreach ($phids as $phid) {
                     $handle = new PhabricatorObjectHandle();
                     $handle->setPHID($phid);
                     $handle->setType($type);
                     if (empty($repositories[$phid])) {
                         $handle->setName('Unknown Repository');
                     } else {
                         $repository = $repositories[$phid];
                         $handle->setName($repository->getCallsign());
                         $handle->setURI('/diffusion/' . $repository->getCallsign() . '/');
                         $handle->setComplete(true);
                     }
                     $handles[$phid] = $handle;
                 }
                 break;
             case PhabricatorPHIDConstants::PHID_TYPE_OPKG:
                 $object = new PhabricatorOwnersPackage();
                 $packages = $object->loadAllWhere('phid in (%Ls)', $phids);
                 $packages = mpull($packages, null, 'getPHID');
                 foreach ($phids as $phid) {
                     $handle = new PhabricatorObjectHandle();
                     $handle->setPHID($phid);
                     $handle->setType($type);
                     if (empty($packages[$phid])) {
                         $handle->setName('Unknown Package');
                     } else {
                         $package = $packages[$phid];
                         $handle->setName($package->getName());
                         $handle->setURI('/owners/package/' . $package->getID() . '/');
                         $handle->setComplete(true);
                     }
                     $handles[$phid] = $handle;
                 }
                 break;
             case PhabricatorPHIDConstants::PHID_TYPE_APRJ:
                 $project_dao = new PhabricatorRepositoryArcanistProject();
                 $projects = $project_dao->loadAllWhere('phid IN (%Ls)', $phids);
                 $projects = mpull($projects, null, 'getPHID');
                 foreach ($phids as $phid) {
                     $handle = new PhabricatorObjectHandle();
                     $handle->setPHID($phid);
                     $handle->setType($type);
                     if (empty($projects[$phid])) {
                         $handle->setName('Unknown Arcanist Project');
                     } else {
                         $project = $projects[$phid];
                         $handle->setName($project->getName());
                         $handle->setComplete(true);
                     }
                     $handles[$phid] = $handle;
                 }
                 break;
             case PhabricatorPHIDConstants::PHID_TYPE_WIKI:
                 $document_dao = new PhrictionDocument();
                 $content_dao = new PhrictionContent();
                 $conn = $document_dao->establishConnection('r');
                 $documents = queryfx_all($conn, 'SELECT * FROM %T document JOIN %T content
           ON document.contentID = content.id
           WHERE document.phid IN (%Ls)', $document_dao->getTableName(), $content_dao->getTableName(), $phids);
                 $documents = ipull($documents, null, 'phid');
                 foreach ($phids as $phid) {
                     $handle = new PhabricatorObjectHandle();
                     $handle->setPHID($phid);
                     $handle->setType($type);
                     if (empty($documents[$phid])) {
                         $handle->setName('Unknown Document');
                     } else {
                         $info = $documents[$phid];
                         $handle->setName($info['title']);
                         $handle->setURI(PhrictionDocument::getSlugURI($info['slug']));
                         $handle->setComplete(true);
                     }
                     $handles[$phid] = $handle;
                 }
                 break;
             default:
                 $loader = null;
                 if (isset($external_loaders[$type])) {
                     $loader = $external_loaders[$type];
                 } else {
                     if (isset($external_loaders['*'])) {
                         $loader = $external_loaders['*'];
                     }
                 }
                 if ($loader) {
                     $object = newv($loader, array());
                     $handles += $object->loadHandles($phids);
                     break;
                 }
                 foreach ($phids as $phid) {
                     $handle = new PhabricatorObjectHandle();
                     $handle->setType($type);
                     $handle->setPHID($phid);
                     $handle->setName('Unknown Object');
                     $handle->setFullName('An Unknown Object');
                     $handles[$phid] = $handle;
                 }
                 break;
         }
     }
     return $handles;
 }
Example #6
0
 public function loadImageURI($size)
 {
     $file = $this->getImage($size);
     if ($file) {
         return $file->getBestURI();
     }
     return PhabricatorUser::getDefaultProfileImageURI();
 }
 protected function didFilterPage(array $users)
 {
     if ($this->needProfile) {
         $user_list = mpull($users, null, 'getPHID');
         $profiles = new PhabricatorUserProfile();
         $profiles = $profiles->loadAllWhere('userPHID IN (%Ls)', array_keys($user_list));
         $profiles = mpull($profiles, null, 'getUserPHID');
         foreach ($user_list as $user_phid => $user) {
             $profile = idx($profiles, $user_phid);
             if (!$profile) {
                 $profile = new PhabricatorUserProfile();
                 $profile->setUserPHID($user_phid);
             }
             $user->attachUserProfile($profile);
         }
     }
     if ($this->needProfileImage) {
         $rebuild = array();
         foreach ($users as $user) {
             $image_uri = $user->getProfileImageCache();
             if ($image_uri) {
                 // This user has a valid cache, so we don't need to fetch any
                 // data or rebuild anything.
                 $user->attachProfileImageURI($image_uri);
                 continue;
             }
             // This user's cache is invalid or missing, so we're going to rebuild
             // it.
             $rebuild[] = $user;
         }
         if ($rebuild) {
             $file_phids = mpull($rebuild, 'getProfileImagePHID');
             $file_phids = array_filter($file_phids);
             if ($file_phids) {
                 // NOTE: We're using the omnipotent user here because older profile
                 // images do not have the 'profile' flag, so they may not be visible
                 // to the executing viewer. At some point, we could migrate to add
                 // this flag and then use the real viewer, or just use the real
                 // viewer after enough time has passed to limit the impact of old
                 // data. The consequence of missing here is that we cache a default
                 // image when a real image exists.
                 $files = id(new PhabricatorFileQuery())->setParentQuery($this)->setViewer(PhabricatorUser::getOmnipotentUser())->withPHIDs($file_phids)->execute();
                 $files = mpull($files, null, 'getPHID');
             } else {
                 $files = array();
             }
             foreach ($rebuild as $user) {
                 $image_phid = $user->getProfileImagePHID();
                 if (isset($files[$image_phid])) {
                     $image_uri = $files[$image_phid]->getBestURI();
                 } else {
                     $image_uri = PhabricatorUser::getDefaultProfileImageURI();
                 }
                 $user->writeProfileImageCache($image_uri);
                 $user->attachProfileImageURI($image_uri);
             }
         }
     }
     if ($this->needAvailability) {
         $rebuild = array();
         foreach ($users as $user) {
             $cache = $user->getAvailabilityCache();
             if ($cache !== null) {
                 $user->attachAvailability($cache);
             } else {
                 $rebuild[] = $user;
             }
         }
         if ($rebuild) {
             $this->rebuildAvailabilityCache($rebuild);
         }
     }
     return $users;
 }
 protected function didFilterPage(array $users)
 {
     if ($this->needProfile) {
         $user_list = mpull($users, null, 'getPHID');
         $profiles = new PhabricatorUserProfile();
         $profiles = $profiles->loadAllWhere('userPHID IN (%Ls)', array_keys($user_list));
         $profiles = mpull($profiles, null, 'getUserPHID');
         foreach ($user_list as $user_phid => $user) {
             $profile = idx($profiles, $user_phid);
             if (!$profile) {
                 $profile = new PhabricatorUserProfile();
                 $profile->setUserPHID($user_phid);
             }
             $user->attachUserProfile($profile);
         }
     }
     if ($this->needProfileImage) {
         $user_profile_file_phids = mpull($users, 'getProfileImagePHID');
         $user_profile_file_phids = array_filter($user_profile_file_phids);
         if ($user_profile_file_phids) {
             $files = id(new PhabricatorFileQuery())->setParentQuery($this)->setViewer($this->getViewer())->withPHIDs($user_profile_file_phids)->execute();
             $files = mpull($files, null, 'getPHID');
         } else {
             $files = array();
         }
         foreach ($users as $user) {
             $image_phid = $user->getProfileImagePHID();
             if (isset($files[$image_phid])) {
                 $profile_image_uri = $files[$image_phid]->getBestURI();
             } else {
                 $profile_image_uri = PhabricatorUser::getDefaultProfileImageURI();
             }
             $user->attachProfileImageURI($profile_image_uri);
         }
     }
     if ($this->needStatus) {
         $user_list = mpull($users, null, 'getPHID');
         $statuses = id(new PhabricatorCalendarEvent())->loadCurrentStatuses(array_keys($user_list));
         foreach ($user_list as $phid => $user) {
             $status = idx($statuses, $phid);
             if ($status) {
                 $user->attachStatus($status);
             }
         }
     }
     return $users;
 }
 public function buildDict()
 {
     $stories = $this->parseStories();
     $dict = array();
     $viewer = $this->user;
     $desktop_key = PhabricatorDesktopNotificationsSetting::SETTINGKEY;
     $desktop_enabled = $viewer->getUserSetting($desktop_key);
     foreach ($stories as $story) {
         if ($story instanceof PhabricatorApplicationTransactionFeedStory) {
             $dict[] = array('desktopReady' => $desktop_enabled, 'title' => $story->renderText(), 'body' => $story->renderTextBody(), 'href' => $story->getURI(), 'icon' => $story->getImageURI());
         } else {
             if ($story instanceof PhabricatorNotificationTestFeedStory) {
                 $dict[] = array('desktopReady' => $desktop_enabled, 'title' => pht('Test Notification'), 'body' => $story->renderText(), 'href' => null, 'icon' => PhabricatorUser::getDefaultProfileImageURI());
             } else {
                 $dict[] = array('desktopReady' => false, 'title' => null, 'body' => null, 'href' => null, 'icon' => null);
             }
         }
     }
     return $dict;
 }
 public function getIconURI()
 {
     return PhabricatorUser::getDefaultProfileImageURI();
 }
 public function buildDict()
 {
     $stories = $this->parseStories();
     $dict = array();
     foreach ($stories as $story) {
         if ($story instanceof PhabricatorApplicationTransactionFeedStory) {
             $dict[] = array('desktopReady' => true, 'title' => $story->renderText(), 'body' => $story->renderTextBody(), 'href' => $story->getURI(), 'icon' => $story->getImageURI());
         } else {
             if ($story instanceof PhabricatorNotificationTestFeedStory) {
                 $dict[] = array('desktopReady' => true, 'title' => pht('Test Notification'), 'body' => $story->renderText(), 'href' => null, 'icon' => PhabricatorUser::getDefaultProfileImageURI());
             } else {
                 $dict[] = array('desktopReady' => false, 'title' => null, 'body' => null, 'href' => null, 'icon' => null);
             }
         }
     }
     return $dict;
 }