/** * Store Keywords in seprate dataobject * * @param array $authorsRawData, int $extensionId */ public static function save_keywords($rawKeywordData, $extensionId) { $totalKeywords = count($rawKeywordData); for ($i = 0; $i < $totalKeywords; $i++) { if ($keyword = ExtensionKeywords::get()->filter("KeywordName", $rawKeywordData[$i])->first()) { $keyword->Extension()->add($extensionId); } else { $keyword = new ExtensionKeywords(); $keyword->KeywordName = $rawKeywordData[$i]; $keyword->write(); $keyword->Extension()->add($extensionId); } } }
/** * Save each property of json content * in corresponidng field of database * * @param object $ExtensionData * @return boolean */ public function dataFields($ExtensionData) { $saveDataFields = array(); try { $ExtensionData->Url = $this->url; if ($this->latestReleasePackage->getPrettyName()) { list($vendorName, $extensionName) = explode("/", $this->latestReleasePackage->getPrettyName()); $ExtensionData->Title = $this->latestReleasePackage->getPrettyName(); $ExtensionData->VendorName = $vendorName; $ExtensionData->Name = $extensionName; } else { throw new InvalidArgumentException("We could not find Name field in composer.json at'" . $this->url . "' "); } if ($this->latestReleasePackage->getDescription()) { $ExtensionData->Description = $this->latestReleasePackage->getDescription(); } else { throw new InvalidArgumentException("We could not find Description field in composer.json at'" . $this->url . "' "); } if ($this->latestReleasePackage->getPrettyVersion()) { $ExtensionData->Version = $this->latestReleasePackage->getPrettyVersion(); } if ($this->latestReleasePackage->getType()) { $type = $this->latestReleasePackage->getType(); if (preg_match("/\\bmodule\\b/i", $type)) { $ExtensionData->Type = 'Module'; } elseif (preg_match("/\\btheme\\b/i", $type)) { $ExtensionData->Type = 'Theme'; } elseif (preg_match("/\\bwidget\\b/i", $type)) { $ExtensionData->Type = 'Widget'; } else { throw new InvalidArgumentException("We could not find 'Type' field in composer.json at'" . $this->url . "' "); } } if ($this->latestReleasePackage->getHomepage()) { $ExtensionData->Homepage = $this->latestReleasePackage->getHomepage(); } if ($this->latestReleasePackage->getReleaseDate()) { $ExtensionData->ReleaseTime = $this->latestReleasePackage->getReleaseDate()->format('Y-m-d H:i:s'); } if ($this->latestReleasePackage->getLicense()) { $licence = $this->latestReleasePackage->getLicense(); if (array_key_exists('type', $licence)) { $ExtensionData->LicenceType = $licence['type']; } if (array_key_exists('description', $licence)) { $ExtensionData->LicenceDescription = $licence['description']; } } if ($this->latestReleasePackage->getSupport()) { $supportData = $this->latestReleasePackage->getSupport(); if (array_key_exists('email', $supportData)) { $ExtensionData->SupportEmail = $supportData['email']; } if (array_key_exists('issues', $supportData)) { $ExtensionData->SupportIssues = $supportData['issues']; } if (array_key_exists('forum', $supportData)) { $ExtensionData->SupportForum = $supportData['forum']; } if (array_key_exists('wiki', $supportData)) { $ExtensionData->SupportWiki = $supportData['wiki']; } if (array_key_exists('irc', $supportData)) { $ExtensionData->SupportIrc = $supportData['irc']; } if (array_key_exists('source', $supportData)) { $ExtensionData->SupportSource = $supportData['source']; } } if ($this->latestReleasePackage->getTargetDir()) { $ExtensionData->TargetDir = $this->latestReleasePackage->getTargetDir(); } if ($this->latestReleasePackage->getRequires()) { $requires = $this->latestReleasePackage->getRequires(); $allRequirePackage = array(); foreach ($requires as $requirePackage) { $allRequirePackage[$requirePackage->getTarget()] = $requirePackage->getPrettyConstraint(); if ($requirePackage->getTarget() == 'silverstripe/framework') { $ExtensionData->CompatibleSilverStripeVersion = $requirePackage->getPrettyConstraint(); } } $ExtensionData->Require = serialize($allRequirePackage); } else { throw new InvalidArgumentException("We could not find 'require' field in composer.json at'" . $this->url . "' "); } if ($this->latestReleasePackage->getDevRequires()) { $ExtensionData->RequireDev = serialize($this->latestReleasePackage->getDevRequires()); } if ($this->latestReleasePackage->getConflicts()) { $ExtensionData->Conflict = serialize($this->latestReleasePackage->getConflicts()); } if ($this->latestReleasePackage->getReplaces()) { $ExtensionData->Replace = serialize($this->latestReleasePackage->getReplaces()); } if ($this->latestReleasePackage->getProvides()) { $ExtensionData->Provide = serialize($this->latestReleasePackage->getProvides()); } if ($this->latestReleasePackage->getSuggests()) { $ExtensionData->Suggest = serialize($this->latestReleasePackage->getSuggests()); } if ($this->latestReleasePackage->getExtra()) { $ExtensionData->Extra = serialize($this->latestReleasePackage->getExtra()); $extra = $this->latestReleasePackage->getExtra(); if (array_key_exists('snapshot', $extra)) { $ExtensionData->ThumbnailID = ExtensionSnapshot::save_snapshot($extra['snapshot'], $this->latestReleasePackage->getPrettyName()); } } if ($this->latestReleasePackage->getRepositories()) { $ExtensionData->Repositories = serialize($this->latestReleasePackage->getRepositories()); } if ($this->latestReleasePackage->getIncludePaths()) { $ExtensionData->IncludePath = serialize($this->latestReleasePackage->getIncludePaths()); } if ($this->latestReleasePackage->getAuthors()) { ExtensionAuthorController::store_authors_info($this->latestReleasePackage->getAuthors(), $ExtensionData->ID); } else { throw new InvalidArgumentException("We could not find Author Info field in composer.json at'" . $this->url . "' "); } if ($this->latestReleasePackage->getKeywords()) { ExtensionKeywords::save_keywords($this->latestReleasePackage->getKeywords(), $ExtensionData->ID); } else { throw new InvalidArgumentException("We could not find Keywords field in composer.json at'" . $this->url . "' "); } } catch (Exception $e) { $saveDataFields['ErrorMsg'] = $e->getMessage(); return $saveDataFields; } $ExtensionData->write(); $saveDataFields['ExtensionID'] = $ExtensionData->ID; return $saveDataFields; }