deblan.tv/vendor/trinity/src/Trinity/Bundle/AdminBundle/Controller/BaseAdminController.php

877 lines
30 KiB
PHP

<?php
namespace Trinity\Bundle\AdminBundle\Controller;
use \BasePeer;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpFoundation\File\File;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Pagerfanta\Adapter\PropelAdapter;
use Pagerfanta\Pagerfanta;
use Pagerfanta\Exception\NotValidCurrentPageException;
use Trinity\Bundle\AdminBundle\Exception\FilterMethodNotFoundException;
use Trinity\Bundle\AdminBundle\Form\Type\BatchType;
use Trinity\Bundle\AdminBundle\Form\Type\RankType;
use Trinity\Bundle\UserBundle\Flash\FlashError;
use Trinity\Bundle\UserBundle\Flash\FlashSuccess;
use Trinity\Bundle\UserBundle\Flash\FlashWarning;
use Trinity\Bundle\AdminBundle\Exception\RequestAdminException;
use Trinity\Component\Utils\Propel;
/**
* @Route("/admin")
*/
class BaseAdminController extends Controller
{
const UPLOAD_INTERFACE = 'Trinity\Component\File\FileUploadInterface';
const HISTORY_LIMIT = 10;
protected $configuration;
public function flashAction()
{
$user = $this->getSessionUser();
if (!$user->hasFlash('message', $this->getConfiguration()->getStorageNamespace())) {
return new Response();
}
$flash = $user->getFlash(
'message',
$this->getConfiguration()->getStorageNamespace()
);
return $this->render(
$flash->getTemplate(),
array(
'message' => $flash->getMessage()
)
);
}
public function filtersAction($routePrefix)
{
return $this->render(
'TrinityAdminBundle:BaseAdmin:filters.html.twig',
array(
'form_filter' => $this->getFormFilter()->createView(),
'filter_display_fields' => $this->getConfiguration()->getFilterDisplayFields(),
'filters_templates' => $this->getConfiguration()->getFiltersTemplates(),
'user_has_filter' => $this->getSessionUser()->getAttribute('filter', false, $this->getConfiguration()->getStorageNamespace()),
'route_prefix' => $routePrefix,
)
);
}
public function historyAction($routePrefix)
{
$query = $this->getQuery();
try {
$query->orderByUpdatedAt(\Criteria::DESC);
} catch (\PropelException $e) {
}
$query->limit(self::HISTORY_LIMIT);
return $this->render(
'TrinityAdminBundle:BaseAdmin:history.html.twig',
array(
'objects' => $query->find(),
'route_prefix' => $routePrefix,
)
);
}
protected function getQuery()
{
$modelQuery = $this->getConfiguration()->getModelQuery();
return $modelQuery::create();
}
protected function addSortToQuery(&$query)
{
if (!$this->getConfiguration()->getSortOrder()) {
return false;
}
$method = $this->getConfiguration()->getSort();
$method = $this->getConfiguration()->getRankable() ? 'orderByRank' : $method;
if (!$method) {
return false;
}
try {
call_user_func(array($query, $method), $this->getConfiguration()->getSortOrder());
} catch (\PropelException $e) {
}
return true;
}
protected function getFilters(Request $request)
{
if ($request->isMethod('POST')) {
$datas = $request->request->get($this->getFormFilter(true)->getName());
} else {
$datas = $request->query->get($this->getFormFilter(true)->getName());
}
if (!empty($datas)) {
return $datas;
}
return $this->getSessionUser()->getAttribute(
'filter',
array(),
$this->getConfiguration()->getStorageNamespace()
);
}
protected function addFiltersToQuery(&$query, Request $request)
{
$form = $this->getFormFilter(true);
$datas = $this->getFilters($request);
if (!is_array($datas)) {
return false;
}
$datas = $this->cleanFilterArray($datas);
$filtersMethods = $this->getConfiguration()->getFiltersMethods();
foreach ($datas as $field => $value) {
$method = isset($filtersMethods[$field]) ? $filtersMethods[$field]['method'] : 'filterBy'.Propel::camelCase($field);
$criteria = isset($filtersMethods[$field]) ? $filtersMethods[$field]['criteria'] : (is_numeric($value) && intval($value) == $value ? null : 'like');
$params = isset($filtersMethods[$field]) ? $filtersMethods[$field]['params'] : array();
if (!method_exists($this->getConfiguration()->getModelQuery(), $method)) {
throw new FilterMethodNotFoundException(sprintf('Filter method "%s" does not exist in class "%s"', $method, $this->getConfiguration()->getModelQuery()));
}
if (strtolower($criteria) == 'like') {
$value = '%'.$value.'%';
$criteria = null;
}
if ($value !== 'bool.both' && $value !== '%bool.both%') {
$bools = array(
'bool.true' => true,
'bool.false' => false,
'%bool.true%' => true,
'%bool.false%' => false,
);
if (isset($bools[$value])) {
$value = $bools[$value];
}
try {
$this->get('logger')->info(sprintf('Filter by "%s" with "%s", criteria: %s', $method, var_export($value, true), $criteria ? $criteria : 'NULL'));
$callParams = array_merge($criteria !== null ? array($value, $criteria) : array($value), $params);
call_user_func_array(array($query, $method), $callParams);
} catch (\PropelException $e) {
}
} else {
unset($datas[$field]);
}
}
$filterMethod = $this->getConfiguration()->getFilter();
if ($filterMethod !== null) {
if (!method_exists($this->getConfiguration()->getModelQuery(), $filterMethod)) {
throw new FilterMethodNotFoundException(sprintf('Filter method "%s" does not exist in class "%s"', $filterMethod, $this->getConfiguration()->getModelQuery()));
}
$value = $this->getConfiguration()->getFilterValue();
if (!is_array($value)) {
$value = array($value);
}
$this->get('logger')->info(sprintf('Filter by "%s" with "%s"', $filterMethod, var_export($value, true)));
call_user_func_array(array($query, $filterMethod), $value);
}
$this->getSessionUser()->setAttribute('filter', $datas, $this->getConfiguration()->getStorageNamespace());
$form->bind($datas);
return $form;
}
protected function getPager(Request $request)
{
$query = $this->getQuery();
$query->distinct();
$this->addSortToQuery($query);
$this->addFiltersToQuery($query, $request);
$adapter = new PropelAdapter($query);
$pagerfanta = new Pagerfanta($adapter);
$pagerfanta->setMaxPerPage($this->getConfiguration()->getMaxPerPage());
try {
$pagerfanta->setCurrentPage($this->getConfiguration()->getCurrentPage(), false, true);
} catch (NotValidCurrentPageException $e) {
$pagerfanta->setCurrentPage(1, false, true);
}
return $pagerfanta;
}
protected function getFields()
{
$modelPeer = $this->getConfiguration()->getModelPeer();
$peerFields = $modelPeer::getFieldNames(BasePeer::TYPE_FIELDNAME);
$peerFieldsCb = $modelPeer::getFieldNames();
$fields = array();
$finalFields = array();
$displayFields = $this->getConfiguration()->getDisplayFields();
$fieldsTemplates = $this->getConfiguration()->getFieldsTemplates();
if (!empty($displayFields)) {
$arrayPushBefore = function (array $array, $data, $pos) {
return array_merge(array_slice($array, 0, $pos), array($data), array_slice($array, $pos));
};
foreach ($displayFields as $k => $displayField) {
if (!in_array($displayField, $peerFields)) {
$method = ucfirst($displayField);
$peerFields = $arrayPushBefore($peerFields, $displayField, $k);
$peerFieldsCb = $arrayPushBefore($peerFieldsCb, $method, $k);
}
}
}
$fieldNames = new \ArrayIterator($peerFields);
$fieldNamesCb = new \ArrayIterator($peerFieldsCb);
while ($fieldNames->valid()) {
if (empty($displayFields) || (!empty($displayFields) && in_array($fieldNames->current(), $displayFields))) {
$method1 = Propel::getGetter($fieldNamesCb->current());
$method2 = lcfirst(preg_replace('/^get/', '', $method1));
$data = array(
'name' => $fieldNames->current(),
'method' => method_exists($this->getConfiguration()->getModel(), $method2) ? $method2 : $method1,
'template' => isset($fieldsTemplates[$fieldNames->current()]) ? $fieldsTemplates[$fieldNames->current()] : $this->getConfiguration()->getDefaultFieldTemplate()
);
if (empty($displayFields)) {
$fields[] = $data;
} else {
$keys = array_keys($displayFields, $fieldNames->current());
$fields[$keys[0]] = $data;
}
}
$fieldNames->next();
$fieldNamesCb->next();
}
$k = 0;
while (count($finalFields) !== count($fields)) {
if (isset($fields[$k])) {
$finalFields[] = $fields[$k];
}
$k++;
}
return $finalFields;
}
protected function redirectByRequest(Request $request, $object)
{
$list = array(
'edit_same' => $this->generateUrl(sprintf('%s_edit', $this->getConfiguration()->getRoutePrefix()), array('id' => $object->getId())),
'save_new' => $this->generateUrl(sprintf('%s_new', $this->getConfiguration()->getRoutePrefix())),
);
foreach ($list as $index => $uri) {
if ($request->request->has($index)) {
return $uri;
}
}
throw new RequestAdminException('No valid target (post submit) has been found.');
}
protected function getBatchType()
{
return $this->createForm(new BatchType());
}
protected function getRankType()
{
return $this->createForm(new RankType());
}
protected function processForm(&$form, &$object, Request $request)
{
$form->bind($request);
if ($form->isValid()) {
if ($object instanceof \FOS\UserBundle\Propel\User) {
if ($object->isNew()) {
$newUser = true;
} else {
$updatedUser = true;
}
}
$this->preSave($object);
$object->save();
$this->postSave($object);
if (!empty($newUser)) {
$this->get('trinity.user_log')->created($object, $this->getUser());
}
if (!empty($updatedUser)) {
$this->get('trinity.user_log')->updated($object, $this->getUser());
}
return $this->redirect($this->redirectByRequest($request, $object));
}
return false;
}
protected function removeObjects($query, array $pks)
{
foreach ($pks as $pk) {
$object = $query->findPK($pk);
$this->preRemove($object);
$object->delete();
$this->postRemove($object);
}
}
protected function copyObjects($query, array $pks)
{
foreach ($pks as $pk) {
$copy = $query->findPK($pk)->copy(true);
$this->preSave($copy);
$copy->save();
$this->postSave($copy);
}
}
protected function processBatchForm(&$form, Request $request)
{
$form->submit($request);
//if ($form->isValid()) {
$values = $request->request->get($form->getName());
if (!empty($values['objects'])) {
$modelQuery = $this->getConfiguration()->getModelQuery();
$query = new $modelQuery();
switch ($values['action']) {
case BatchType::BATCH_COPY: $this->copyObjects($query, $values['objects']); break;
case BatchType::BATCH_REMOVE: $this->removeObjects($query, $values['objects']); break;
}
$this->get('logger')->info(sprintf('Batch action (%s)', $values['action']));
return 2;
}
return 1;
//}
return 0;
}
protected function batchAction(Request $request)
{
$form = $this->getBatchType();
$redirect = $this->redirect(
$this->getSessionUser()->getAttribute(
'referer',
$this->generateUrl(sprintf('%s_index', $this->getConfiguration()->getRoutePrefix()), array('page' => 1))
)
);
$proccess = $this->processBatchForm($form, $request);
$namespace = $this->getConfiguration()->getStorageNamespace();
switch ($proccess) {
case 1: $this->getSessionUser()->setFlash('message', new FlashWarning('crud.flash.notselected'), false, $namespace); break;
case 2: $this->getSessionUser()->setFlash('message', new FlashSuccess('crud.flash.updated.plural'), false, $namespace); break;
}
return $redirect;
}
/**
* @Route("/", name="TrinityAdminBundle_index")
*/
public function indexAction($page, Request $request)
{
$this->getSessionUser()->setAttribute('referer', $request->getRequestUri());
$namespace = $this->getConfiguration()->getStorageNamespace();
$sortCookieName = $namespace.'_sort';
$pageCookieName = $namespace.'_page';
$sort = '';
if ($request->query->get('sort')) {
$sort = $request->query->get('sort');
} elseif ($sortCookie = $request->cookies->get($sortCookieName)) {
$sort = $sortCookie;
}
if (!$request->query->has('sort') && intval($page) === 1) {
if ($pageCookie = $request->cookies->get($pageCookieName)) {
$page = max(1, intval($pageCookie));
}
}
if ($format = $request->query->get('format')) {
if ($this->isValidExportFormat($format)) {
return $this->exportTo($format);
}
}
$this->getConfiguration()->setCurrentPage($page);
$this->addCookie(new Cookie($pageCookieName, $page, time() + 3600));
if (!empty($sort)) {
$parts = explode(':', $sort);
if (count($parts) == 2) {
list($field, $order) = $parts;
$method = 'orderBy'.Propel::camelCase($field);
$this->getConfiguration()->setSort($method, $order);
$this->get('logger')->info(sprintf('Order by "%s", "%s"', $method, $order));
$this->addCookie(new Cookie($sortCookieName, $sort, time() + 3600 * 24 * 360));
}
}
$pager = $this->getPager($request);
if ($this->getConfiguration()->getRedirectIfOneResult()) {
if ($this->getFilters($request) && count($pager) === 1 && $this->getConfiguration()->getIndexListAction('edit')) {
$this->getSessionUser()->setAttribute('filter', null, $this->getConfiguration()->getStorageNamespace());
return $this->redirect($this->generateUrl(sprintf('%s_edit',$this->getConfiguration()->getRoutePrefix()), array('id' => $pager->getIterator()->offsetGet(0)->getId())));
}
}
return array(
'pager' => $pager,
'fields' => $this->getFields(),
'fields_templates' => $this->getConfiguration()->getFieldsTemplates(),
'fields_attrs' => $this->getConfiguration()->getDisplayFieldsAttrs(),
'list_actions' => $this->getConfiguration()->getIndexListActions(),
'index_actions' => $this->getConfiguration()->getIndexActions(),
'batch_actions' => $this->getConfiguration()->getBatchActions(),
'context_menu' => $this->getConfiguration()->getContextMenu(),
'export' => $this->getConfiguration()->getExport(),
'exportFormats' => $this->getConfiguration()->getExportFormats(),
'rankable' => $this->getConfiguration()->getRankable(),
'remove_token' => $this->getRemoveToken(true),
'fieldsnames' => $this->getConfiguration()->getFieldsnames(),
'templating' => $this->container->get('templating'),
'form_batch' => $this->getBatchType()->createView(),
'form_rank' => $this->getRankType()->createView(),
'title' => $this->getConfiguration()->getListTitle(),
'i18n' => $this->getConfiguration()->getI18n(),
'i18n_cultures' => $this->getConfiguration()->getI18nCultures(),
'pager_sort' => $sort,
);
}
protected function addCookie(Cookie $cookie)
{
$response = new Response();
$response->headers->setCookie($cookie);
return $response->send();
}
protected function exportTo($format)
{
$query = $this->getQuery();
$this->addSortToQuery($query);
$this->addFiltersToQuery($query, $this->getRequest());
$render = $this->render(
'TrinityAdminBundle:BaseAdmin:export.html.twig',
array(
'datas' => $query->find()->exportTo($format),
)
);
$render->headers->set('Content-Type', $this->getExportContentTypeByFormat($format));
$render->headers->set('Content-disposition', sprintf('filename="export-%s%s"', time(), $this->getExportExtensionByFormat($format)));
return $render;
}
public function clearFilterAction(Request $request)
{
$redirect = $this->redirect(
$this->getSessionUser()->getAttribute(
'referer',
$this->generateUrl(sprintf('%s_index', $this->getConfiguration()->getRoutePrefix()), array('page' => 1))
)
);
$this->getSessionUser()->setAttribute('filter', null, $this->getConfiguration()->getStorageNamespace());
return $redirect;
}
public function editAction($object, Request $request)
{
if (!$object) {
$this->getSessionUser()->setFlash('message', new FlashWarning('crud.flash.unknown'), false, $this->getConfiguration()->getStorageNamespace());
return $this->redirect($this->generateUrl(sprintf('%s_index',$this->getConfiguration()->getRoutePrefix())));
}
$form = $this->getConfiguration()->getFormEdit();
if($this->has($form)){
$form = $this->createForm($this->get($form)->getName(), $object, $this->getConfiguration()->getFormEditOptions());
}else {
$form = $this->createForm(new $form($this->getConfiguration()->getFormEditOptions()), $object);
}
if ('POST' === $request->getMethod()) {
if (false !== $processForm = $this->processForm($form, $object, $request)) {
$this->getSessionUser()->setFlash('message', new FlashSuccess('crud.flash.updated.singular'), false, $this->getConfiguration()->getStorageNamespace());
return $processForm;
}
$this->getSessionUser()->setFlash('message', new FlashError('crud.flash.fail.update'), false, $this->getConfiguration()->getStorageNamespace());
}
return array(
'object' => $object,
'created_at' => (method_exists($object, 'getCreatedAt'))?$object->getCreatedAt('d/m/Y'):null,
'updated_at' => (method_exists($object, 'getUpdatedAt'))?$object->getUpdatedAt('d/m/Y'):null,
'form' => $form->createView(),
'fieldsets' => $this->getConfiguration()->getFieldsets(),
'fieldsetsView' => $this->getConfiguration()->getFieldsetsView(),
'fieldsnames' => $this->getConfiguration()->getFieldsnames(),
'fields_helpers' => $this->getConfiguration()->getFieldsHelpers(),
'remove_token' => $this->getRemoveToken(true),
'title' => $this->getConfiguration()->getEditTitle($object),
'i18n' => $this->getConfiguration()->getI18n(),
'i18n_cultures' => $this->getConfiguration()->getI18nCultures(),
'collections' => $this->getConfiguration()->getCollections(),
);
}
public function newAction(Request $request)
{
$model = $this->getConfiguration()->getModel();
$object = new $model();
$form = $this->getConfiguration()->getFormNew();
if($this->has($form)){
$form = $this->createForm($this->get($form)->getName(), $object, $this->getConfiguration()->getFormNewOptions());
}else {
$form = $this->createForm(new $form($this->getConfiguration()->getFormNewOptions()), $object);
}
if ('POST' === $request->getMethod()) {
if (false !== $processForm = $this->processForm($form, $object, $request)) {
$this->getSessionUser()->setFlash('message', new FlashSuccess('crud.flash.updated.singular'), false, $this->getConfiguration()->getStorageNamespace());
return $processForm;
}
$this->getSessionUser()->setFlash('message', new FlashError('crud.flash.fail.new'), false, $this->getConfiguration()->getStorageNamespace());
}
return array(
'form' => $form->createView(),
'fieldsets' => $this->getConfiguration()->getFieldsets(),
'fieldsetsView' => $this->getConfiguration()->getFieldsetsView(),
'fieldsnames' => $this->getConfiguration()->getFieldsnames(),
'fields_helpers' => $this->getConfiguration()->getFieldsHelpers(),
'title' => $this->getConfiguration()->getNewTitle(),
'i18n' => $this->getConfiguration()->getI18n(),
'i18n_cultures' => $this->getConfiguration()->getI18nCultures(),
'collections' => $this->getConfiguration()->getCollections(),
);
}
public function removeAction($object, $token, Request $request)
{
if ($object) {
if ($this->getRemoveToken() !== $token) {
$this->getSessionUser()->setFlash('message', new FlashError('crud.flash.token'), false, $this->getConfiguration()->getStorageNamespace());
} else {
try {
$this->preRemove($object);
$object->delete();
$this->postRemove($object);
$this->getSessionUser()->setFlash('message', new FlashSuccess('crud.flash.removed'), false, $this->getConfiguration()->getStorageNamespace());
} catch (PropelException $e) {
$this->getSessionUser()->setFlash('message', new FlashError('crud.flash.fail.remove'), false, $this->getConfiguration()->getStorageNamespace());
}
}
} else {
$this->getSessionUser()->setFlash('message', new FlashWarning('crud.flash.unknown'), false, $this->getConfiguration()->getStorageNamespace());
}
return $this->redirect($this->generateUrl(sprintf('%s_index',$this->getConfiguration()->getRoutePrefix())));
}
public function rankAction(Request $request)
{
$form = $this->getRankType();
$form->bind($request);
if ($form->isValid()) {
$datas = $form->getData();
$ids = explode(' ', $datas['objects']);
$page = $datas['page'];
$query = $this->getQuery();
foreach ($ids as $k => $id) {
$rank = ($this->getConfiguration()->getMaxPerPage() * $page) + $k + 1;
$object = $query->findOneById($id);
if ($object) {
$object->setRank($rank)->save();
}
}
}
return null;
}
protected function getRemoveToken($getNew = false)
{
$attributeName = 'remove_token_'.$this->getConfiguration()->getModel();
if ($getNew) {
$token = sha1(uniqid().time());
$this->getSessionUser()->setAttribute($attributeName, $token);
return $token;
}
return $this->getSessionUser()->getAttribute($attributeName);
}
protected function isValidExportFormat($format)
{
return in_array($format, array('XML', 'CSV', 'JSON', 'YAML'));
}
protected function getExportContentTypeByFormat($format)
{
if (!$this->isValidExportFormat($format)) {
return null;
}
$formats = array(
'XML' => 'text/xml',
'CSV' => 'text/csv',
'JSON' => 'text/json',
'YAML' => 'text/yaml',
);
return $formats[$format];
}
protected function getExportExtensionByFormat($format)
{
if (!$this->isValidExportFormat($format)) {
return null;
}
$formats = array(
'XML' => '.xml',
'CSV' => '.csv',
'JSON' => '.json',
'YAML' => '.yml',
);
return $formats[$format];
}
protected function getFormFilter($new = false)
{
$form = $this->getConfiguration()->getFormFilter() ? $this->getConfiguration()->getFormFilter() : $this->getConfiguration()->getFormNew();
$form = $this->createForm(new $form($this->getConfiguration()->getFormFilterOptions()));
if (!$new) {
$datas = $this->cleanFilterArray($this->getSessionUser()->getAttribute('filter', array(), $this->getConfiguration()->getStorageNamespace()));
$form->bind($datas);
}
return $form;
}
protected function cleanFilterArray(array $array)
{
foreach ($array as $k => $v) {
if (trim($v) === '') {
unset($array[$k]);
}
}
return $array;
}
/**
* @return mixed
* @throws \LogicException
*/
public function getConfiguration()
{
if (empty($this->configuration)) {
throw new \LogicException('You must specify a crud configuration.');
}
if (null === $this->configuration->getStorageNamespace()) {
$this->configuration->setStorageNamespace(get_class($this));
}
return $this->configuration;
}
/**
* @Route("/jsTranslations.js", name="TrinityAdminBundle_jsTranslation")
* @Template("TrinityAdminBundle:BaseAdmin:jsTranslation.html.twig")
*/
public function jsTranslationAction(Request $request)
{
}
public function getUser()
{
if (!$this->container->has('security.context')) {
throw new \LogicException('The SecurityBundle is not registered in your application.');
}
if (null === $token = $this->container->get('security.context')->getToken()) {
return null;
}
if (!is_object($user = $token->getUser())) {
return null;
}
if (method_exists($user, 'setStorage')) {
$user->setStorage($this->container->get('trinity.storage'));
}
return $user;
}
public function getSessionUser()
{
return $this->container->get('trinity.session_user');
}
public function preSave($object)
{
}
public function postSave($object, $wasNew = false)
{
}
public function preRemove($object)
{
}
public function postRemove($object)
{
}
public function postDelete($object)
{
return $this->postRemove($object);
}
public function preDelete($object)
{
return $this->preRemove($object);
}
public function cleanString($text)
{
$text = preg_replace('`</?[^>]+>`U', '', $text);
$encoding = mb_detect_encoding($text);
$text = str_replace(array('&nbsp;', '&rsquo;'), ' ',$text);
$text = html_entity_decode(strip_tags($text));
if ($encoding!='UTF-8') $text = utf8_encode($text);
$text = str_replace(
array(
'à', 'â', 'ä', 'á', 'ã', 'å',
'î', 'ï', 'ì', 'í',
'ô', 'ö', 'ò', 'ó', 'õ', 'ø',
'ù', 'û', 'ü', 'ú',
'é', 'è', 'ê', 'ë',
'ç', 'ÿ', 'ñ',
'À', 'Â', 'Ä', 'Á', 'Ã', 'Å',
'Î', 'Ï', 'Ì', 'Í',
'Ô', 'Ö', 'Ò', 'Ó', 'Õ', 'Ø',
'Ù', 'Û', 'Ü', 'Ú',
'É', 'È', 'Ê', 'Ë',
'Ç', 'Ÿ', 'Ñ',
'\'', '"',
' ', ' ', ' ', ' ', ' '
),
array(
'a', 'a', 'a', 'a', 'a', 'a',
'i', 'i', 'i', 'i',
'o', 'o', 'o', 'o', 'o', 'o',
'u', 'u', 'u', 'u',
'e', 'e', 'e', 'e',
'c', 'y', 'n',
'A', 'A', 'A', 'A', 'A', 'A',
'I', 'I', 'I', 'I',
'O', 'O', 'O', 'O', 'O', 'O',
'U', 'U', 'U', 'U',
'E', 'E', 'E', 'E',
'C', 'Y', 'N',
' ', ' ',
' ', ' ', ' ', ' ', ' '
),$text);
return strtolower($text);
}
}