protected function parseItem($site)
 {
     $isDuplicateContent = $this->duplicateChecker->isDuplicateContent($site['description']) ? '1' : '0';
     $this->site->updateByPk(array('isDuplicateContent' => $isDuplicateContent), $site['siteId']);
 }
 function validate($newSite, $oldSite = null, $validationOptions = array())
 {
     $categoryId = intval($newSite->categoryId);
     $url = !empty($newSite->url) ? $newSite->url : "";
     $isAdmin = !empty($validationOptions['admin']);
     $package = !empty($validationOptions['package']) ? $validationOptions['package'] : null;
     // required fields validation
     if (empty($newSite->siteTitle) || !isset($newSite->description)) {
         return 'Please, fill in the fields title and Description.';
     }
     if (empty($categoryId)) {
         return 'Please, select a category from the dropdown list.';
     }
     if (Config::get("urlMandatory") && empty($url)) {
         return 'Please fill URL field';
     }
     if (!empty($url)) {
         // ensure that site is not registered in this category
         if ((!$oldSite || $oldSite->categoryId != $categoryId) && !$isAdmin && empty($validationOptions['forceCategoryDuplicate']) && $this->whetherSiteIsRegisteredInCategory($url, $categoryId)) {
             return 'The site is already registered in this category.';
         }
         // check whether the URL is allowed to be offered
         if (!preg_match('#^' . Config::get("supportedUrlSchemes") . '://#', $url)) {
             return 'We do not support this url protocol';
         }
         if (!preg_match('#^' . Config::get("supportedUrlSchemes") . '://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$#i', $url)) {
             return 'Url is invalid';
         }
         if ($this->getIfHostIsBanned(AppRouter::getHostNameFromUrl($url), 0)) {
             return 'This site is not allowed to be offered.';
         }
         if ($this->bannedSite->isBanned($url)) {
             return 'This site is not allowed to be offered.';
         }
         if (!$oldSite && !$isAdmin) {
             if ((int) $this->getCountOfSiteCopiesInDifferentCategories($url) >= (int) Config::get('maxCategoriesCountPerSite')) {
                 return 'This site is not allowed to be offered more times.';
             }
             if ((int) $this->getCountOfSiteSubpages($url) >= (int) Config::get('maxSubpagesCountPerSite')) {
                 return 'No more subpages of this site can be submitted.';
             }
         }
         if (Config::get('inscriptionCheckHttpResponseCode') == 1) {
             $httpClient = new HttpClient();
             $httpCode = $httpClient->checkResponseCodeOfSite($url);
             if ($httpCode != 200) {
                 return 'This site\' HTTP response code is not 200. The site is not accepted.';
             }
         }
     }
     if (!$isAdmin) {
         $minSiteDescriptionLength = $package ? $package['siteDescriptionMinLength'] : Config::get("minSiteDescriptionLength");
         $rawDescription = strip_tags($newSite->description);
         if ($minSiteDescriptionLength && utf8_strlen($rawDescription) < $minSiteDescriptionLength && !$isAdmin) {
             return _t('Description of site must have minimum') . ' ' . $minSiteDescriptionLength . ' ' . _t('characters length.');
         }
         $siteDescriptionMaxLength = $package ? $package['siteDescriptionMaxLength'] : Config::get('siteDescriptionMaxLength');
         if ($siteDescriptionMaxLength && utf8_strlen($rawDescription) > $siteDescriptionMaxLength) {
             return _t('Description of site must have maximum') . ' ' . $siteDescriptionMaxLength . ' ' . _t('characters length.');
         }
     }
     if (Config::get('backLinkMandatory') && (!$package || $package['backLinkMandatory']) && empty($newSite->returnBond) && !$isAdmin) {
         return 'Backlink is mandatory.';
     }
     if (Config::get('countryFlagsEnabled') && empty($newSite->countryCode) && !$isAdmin) {
         return 'Country is mandatory.';
     }
     $category = $this->category->findByPk($categoryId);
     if (!$category || !$isAdmin && $category->possibleTender != 1 && empty($validationOptions['forcePossibleTender'])) {
         return 'Sites cannot be offered for this category.';
     }
     if ($this->bannedEmail->isBanned($newSite->webmasterEmail) && !$isAdmin) {
         return 'This email is banned.';
     }
     if ($this->bannedIp->isBanned(Request::getInstance()->getIp())) {
         return 'Your IP is banned.';
     }
     if (Config::get('duplicateContentCheckerEnabled') && !$isAdmin) {
         $duplicateChecker = new GoogleDuplicateChecker();
         $duplicateChecker->setPhrasesToCheckCount(Config::get('duplicateContentCheckerPhrasesToCheckCount'))->setWordsInPhraseCount(Config::get('duplicateContentCheckerWordsInPhraseCount'))->setAllowableDuplicatedPhrasesCount(Config::get('duplicateContentCheckerAllowableDuplicatedPhrasesCount'));
         if ($duplicateChecker->isDuplicateContent($newSite->description)) {
             return 'We have detected duplicate content, change your description.';
         }
     }
     $errorMessage = $this->extraField->validate($newSite);
     if ($errorMessage) {
         return $errorMessage;
     }
     return '';
 }