diff --git a/app/helpers/StringHelper.php b/app/helpers/StringHelper.php index df594682f..3c75cc028 100644 --- a/app/helpers/StringHelper.php +++ b/app/helpers/StringHelper.php @@ -187,21 +187,6 @@ function explodeJid($jid) ); } -/** - * Return a URIfied string - * @param string - * @return string - */ -function stringToUri($url) { - $url = utf8_decode($url); - $url = strtolower(strtr($url, utf8_decode('ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ()[]\'"~$&%*@ç!?;,:/\^¨€{}<>|+- .'), 'aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn -- c --- e --_')); - $url = str_replace(' ', '', $url); - $url = str_replace('---', '-', $url); - $url = str_replace('--', '-', $url); - $url = trim($url,'-'); - return $url; -} - /** * Return a human readable filesize * @param string size in bytes diff --git a/app/widgets/Group/Group.php b/app/widgets/Group/Group.php index bc91dda30..af30970dd 100644 --- a/app/widgets/Group/Group.php +++ b/app/widgets/Group/Group.php @@ -13,6 +13,7 @@ use Moxl\Xec\Action\Pubsub\SetConfig; use Moxl\Xec\Action\Pubsub\Delete; use Respect\Validation\Validator; +use Cocur\Slugify\Slugify; class Group extends \Movim\Widget\Base { @@ -70,7 +71,9 @@ class Group extends \Movim\Widget\Base $html = $view->draw('_group_ticker', true); - RPC::call('MovimTpl.fill', '#group_widget.'.stringToUri($server.'_'.$node), $html); + $slugify = new Slugify(); + + RPC::call('MovimTpl.fill', '#group_widget.'.$slugify->slugify($server.'_'.$node), $html); RPC::call('Group.clearLoad'); RPC::call('MovimTpl.showPanel'); } @@ -206,7 +209,9 @@ class Group extends \Movim\Widget\Base $view->assign('node', $node); $html .= $view->draw('_group_publish', true); - RPC::call('MovimTpl.fill', '#group_widget.'.stringToUri($server.'_'.$node), $html); + $slugify = new Slugify(); + + RPC::call('MovimTpl.fill', '#group_widget.'.$slugify->slugify($server.'_'.$node), $html); RPC::call('Group.enableVideos'); unset($html); } @@ -265,7 +270,9 @@ class Group extends \Movim\Widget\Base { if(!$this->validateServerNode($server, $node)) return; - RPC::call('Group.addLoad', stringToUri($server.'_'.$node)); + $slugify = new Slugify(); + + RPC::call('Group.addLoad', $slugify->slugify($server.'_'.$node)); $r = new GetItemsId; $r->setTo($server) diff --git a/app/widgets/Groups/Groups.php b/app/widgets/Groups/Groups.php index 29b86b8b5..218e2fc2a 100644 --- a/app/widgets/Groups/Groups.php +++ b/app/widgets/Groups/Groups.php @@ -6,6 +6,8 @@ use Respect\Validation\Validator; use Moxl\Xec\Action\Pubsub\Create; use Moxl\Xec\Action\Pubsub\TestCreate; +use Cocur\Slugify\Slugify; + class Groups extends \Movim\Widget\Base { private $_list_server; @@ -127,7 +129,14 @@ class Groups extends \Movim\Widget\Base return; } - $uri = stringToUri($form->name->value); + + $slugify = new Slugify(); + $uri = $slugify->slugify($form->name->value); + + if($uri == '') { + Notification::append(null, $this->__('groups.name_error')); + return; + } $c = new Create; $c->setTo($server)->setNode($uri)->setData($form->name->value) diff --git a/composer.json b/composer.json index 3018897d2..e12066d6c 100644 --- a/composer.json +++ b/composer.json @@ -34,6 +34,7 @@ "respect/validation": "1.0.*", "ezyang/htmlpurifier": "^4.7", "ramsey/uuid": "^3.2", - "symfony/console": "^3.0" + "symfony/console": "^3.0", + "cocur/slugify": "^2.1" } } diff --git a/composer.lock b/composer.lock index f55a79792..50d9d68f8 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "03f969c6eb107a15b0b5239da2d3c76e", - "content-hash": "bfebdd8e42854b5a00c9d5dc776a6212", + "hash": "e914006b3e14705d83af8c2166731383", + "content-hash": "de59bc3d1dbeb01e0e15e0347a1cd25e", "packages": [ { "name": "cboden/ratchet", @@ -55,6 +55,69 @@ ], "time": "2015-12-23 15:06:48" }, + { + "name": "cocur/slugify", + "version": "v2.1.1", + "source": { + "type": "git", + "url": "https://github.com/cocur/slugify.git", + "reference": "eee9879958875921082293dbdbf4866b641864f2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cocur/slugify/zipball/eee9879958875921082293dbdbf4866b641864f2", + "reference": "eee9879958875921082293dbdbf4866b641864f2", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "require-dev": { + "laravel/framework": "~5.1", + "latte/latte": "~2.2", + "mikey179/vfsstream": "~1.6", + "mockery/mockery": "~0.9", + "nette/di": "~2.2", + "phpunit/phpunit": "~4.8|~5.2", + "pimple/pimple": "~1.1", + "plumphp/plum": "~0.1", + "silex/silex": "~1.3", + "symfony/config": "~2.4|~3.0", + "symfony/dependency-injection": "~2.4|~3.0", + "symfony/http-kernel": "~2.4|~3.0", + "twig/twig": "~1.12", + "zendframework/zend-modulemanager": "~2.2", + "zendframework/zend-servicemanager": "~2.2", + "zendframework/zend-view": "~2.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cocur\\Slugify\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ivo Bathke", + "email": "ivo.bathke@gmail.com" + }, + { + "name": "Florian Eckerstorfer", + "email": "florian@eckerstorfer.co", + "homepage": "https://florian.ec" + } + ], + "description": "Converts a string into a slug.", + "keywords": [ + "slug", + "slugify" + ], + "time": "2016-04-08 18:57:21" + }, { "name": "embed/embed", "version": "dev-master",