%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/space/components/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/space/components/UrlValidator.php |
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2016 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\modules\space\components;
use humhub\modules\space\Module;
use Yii;
use yii\validators\Validator;
use URLify;
use humhub\modules\space\models\Space;
/**
* UrlValidator for space urls
*
* @since 1.1
* @author Luke
*/
class UrlValidator extends Validator
{
/**
* @var Space
*/
public $space;
/**
* @inheritdoc
*/
public function validateAttribute($model, $attribute)
{
$value = mb_strtolower($model->$attribute);
/** @var Module $module */
$module = Yii::$app->getModule('space');
$stringValidator = new yii\validators\StringValidator([
'max' => $module->maximumSpaceUrlLength,
'min' => $module->minimumSpaceUrlLength
]);
if (!$stringValidator->validate($value, $error)) {
$this->addError($model, $attribute, $error);
return;
}
if ($value !== URLify::filter($value, 45)) {
$this->addError($model, $attribute, Yii::t('SpaceModule.manage', 'The url contains illegal characters!'));
}
$query = Space::find()->where(['url' => $value]);
if (!$this->space->isNewRecord) {
$query->andWhere(['!=', 'id', $this->space->id]);
}
if ($query->count() > 0) {
$this->addError($model, $attribute, Yii::t('SpaceModule.manage', 'The URL has already been taken.'));
}
}
/**
* Generate a unique space url
*
* @param string $name
* @return string a unique space url
*/
public static function autogenerateUniqueSpaceUrl($name)
{
$maxUrlLength = 45;
$url = URLify::filter($name, $maxUrlLength - 4);
// Get a list of all similar space urls
$existingSpaceUrls = [];
foreach (Space::find()->where(['LIKE', 'url', $url . '%', false])->all() as $space) {
$existingSpaceUrls[] = $space->url;
}
// Url is free
if (!in_array($url, $existingSpaceUrls)) {
return $url;
}
// Add number to taken url
for ($i = 0, $existingSpaceUrlsCount = count($existingSpaceUrls); $i <= $existingSpaceUrlsCount; $i++) {
$tryUrl = $url . ($i + 2);
if (!in_array($tryUrl, $existingSpaceUrls)) {
return $tryUrl;
}
}
// Shouldn't never happen - failed
return "";
}
}