/** * Populates document with bundle data. * * @param \Solarium_Document_ReadWrite $document * @param Bundle $bundle * @param \Solarium_Query_Helper $helper */ private function updateDocumentFromBundle(\Solarium_Document_ReadWrite $document, Bundle $bundle, \Solarium_Query_Helper $helper) { $document->setField('id', $bundle->getId()); $document->setField('name', $bundle->getName()); $document->setField('ownerName', $bundle->getOwnerName()); $document->setField('ownerType', $bundle->getOwnerType()); $document->setField('fullName', $bundle->getFullName()); $document->setField('description', $bundle->getDescription()); $document->setField('readme', $bundle->getReadme()); $document->setField('totalScore', $bundle->getScore()); $document->setField('state', $bundle->getState()); $document->setField('avatarUrl', $bundle->getOwner()->getAvatarUrl()); $document->setField('lastCommitAt', $helper->formatDate(clone $bundle->getLastCommitAt())); $document->setField('lastTweetedAt', null !== $bundle->getLastTweetedAt() ? $helper->formatDate($bundle->getLastTweetedAt()) : null); $keywords = array(); foreach ($bundle->getKeywords() as $keyword) { $keywords[mb_strtolower($keyword->getValue(), 'UTF-8')] = true; } $document->setField('keywords', array_keys($keywords)); }
public function updateCommits(Bundle $bundle) { $this->output->write(' commits'); try { $commits = $this->github->api('repo')->commits()->all($bundle->getOwnerName(), $bundle->getName(), array('sha' => 'HEAD', 'per_page' => 30)); } catch (RuntimeException $e) { return false; } $activities = $bundle->getLatestActivities(); $lastEverCommitAt = $bundle->getLastCommitAt(); /* @var $developer EntityDeveloper */ foreach ($commits as $commit) { if (!isset($commit['commit']['committer'])) { continue; } $lastCommitAt = new \DateTime($commit['commit']['committer']['date']); $lastCommitAt->setTimezone(new \DateTimeZone(date_default_timezone_get())); $activityData = array('type' => Activity::ACTIVITY_TYPE_COMMIT, 'message' => strtok($commit['commit']['message'], "\n\r"), 'createdAt' => $lastCommitAt); if (!empty($activities)) { foreach ($activities as $registeredActivity) { if ($registeredActivity->getMessage() === $activityData['message'] && $registeredActivity->getCreatedAt() == $activityData['createdAt']) { continue 2; } } } // be sure that bundle have a latest date following to latest commit if ($lastCommitAt > $lastEverCommitAt) { $lastEverCommitAt = $lastCommitAt; } $activity = new Activity(); $activity->setType($activityData['type']); $activity->setMessage($activityData['message']); $activity->setCreatedAt($activityData['createdAt']); $activity->setBundle($bundle); if (isset($commit['committer']) && isset($commit['committer']['login'])) { $developer = $this->ownerManager->createOwner($commit['committer']['login'], 'developer', true); $developer->setLastCommitAt($lastCommitAt); $activity->setDeveloper($developer); } else { $activity->setAuthor($commit['commit']['committer']['name']); } } // update last pushed commit date $bundle->setLastCommitAt(clone $lastEverCommitAt); if ('developer' === $bundle->getOwnerType()) { $bundle->getOwner()->setLastCommitAt(clone $lastEverCommitAt); } unset($activities); return true; }