Example #1
0
 public function getItemSlug($ctype, $item, $fields, $check_slug = true)
 {
     $pattern = trim($ctype['url_pattern'], '/');
     preg_match_all('/{([a-zA-Z0-9\\_]+)}/i', $pattern, $matches);
     if (!$matches) {
         return lang_slug($item['id']);
     }
     list($tags, $names) = $matches;
     if (in_array('category', $names)) {
         $category = $this->getCategory($ctype['name'], $item['category_id']);
         $pattern = str_replace('{category}', $category['slug'], $pattern);
         unset($names[array_search('category', $names)]);
     }
     $pattern = trim($pattern, '/');
     foreach ($names as $idx => $field_name) {
         if (!empty($item[$field_name])) {
             $value = str_replace('/', '', $item[$field_name]);
             if (isset($fields[$field_name])) {
                 $value = $fields[$field_name]['handler']->getStringValue($value);
                 $value = trim($value, '/');
             }
             $pattern = str_replace($tags[$idx], $value, $pattern);
         }
     }
     $slug = lang_slug($pattern);
     if (!$check_slug) {
         return $slug;
     }
     if ($this->filterNotEqual('id', $item['id'])->filterEqual('slug', $slug)->getFieldFiltered($this->table_prefix . $ctype['name'], 'id')) {
         $slug .= uniqid();
     }
     return $slug;
 }
Example #2
0
/**
 * Очищает имя файла от специальных символов
 *
 * @param string $filename
 * @return string
 */
function files_sanitize_name($filename)
{
    $path_parts = pathinfo($filename);
    $filename = lang_slug($path_parts['filename']) . '.' . $path_parts['extension'];
    $filename = mb_strtolower($filename);
    $filename = preg_replace(array('/[\\&]/', '/[\\@]/', '/[\\#]/'), array('-and-', '-at-', '-number-'), $filename);
    $filename = preg_replace('/[^(\\x20-\\x7F)]*/', '', $filename);
    $filename = str_replace(' ', '-', $filename);
    $filename = str_replace('\'', '', $filename);
    $filename = preg_replace('/[^\\w\\-\\.]+/', '', $filename);
    $filename = preg_replace('/[\\-]+/', '-', $filename);
    return $filename;
}
Example #3
0
 public function getCategorySLUG($category)
 {
     $slug = '';
     foreach ($category['path'] as $c) {
         if ($c['id'] == 1) {
             continue;
         }
         if ($slug) {
             $slug .= '/';
         }
         $slug .= lang_slug(empty($c['slug_key']) ? str_replace('/', '', $c['title']) : $c['slug_key']);
     }
     return $slug;
 }
Example #4
0
 public function getItemSlug($ctype, $item, $fields)
 {
     $pattern = trim($ctype['url_pattern'], '/');
     preg_match_all('/{([a-zA-Z0-9\\_]+)}/i', $pattern, $matches);
     if (!$matches) {
         return lang_slug($item['id']);
     }
     list($tags, $names) = $matches;
     if (in_array('category', $names)) {
         $category = $this->getCategory($ctype['name'], $item['category_id']);
         $pattern = str_replace('{category}', $category['slug'], $pattern);
         unset($names[array_search('category', $names)]);
     }
     $pattern = trim($pattern, '/');
     foreach ($names as $idx => $field_name) {
         if (!empty($item[$field_name])) {
             $value = $item[$field_name];
             if (isset($fields[$field_name])) {
                 $value = $fields[$field_name]['handler']->getStringValue($value);
                 $value = trim($value, '/');
             }
             $pattern = str_replace($tags[$idx], $value, $pattern);
         }
     }
     return lang_slug($pattern);
 }
Example #5
0
 public function run()
 {
     // Получаем название типа контента и сам тип
     $ctype_name = $this->request->get('ctype_name', '');
     $ctype = $this->model->getContentTypeByName($ctype_name);
     if (!$ctype) {
         cmsCore::error404();
     }
     // проверяем поддержку категорий
     if (!$ctype['is_cats']) {
         cmsCore::error404();
     }
     // проверяем наличие доступа
     if (!cmsUser::isAllowed($ctype['name'], 'edit_cat')) {
         cmsCore::error404();
     }
     $id = $this->request->get('id', 0);
     if (!$id) {
         cmsCore::error404();
     }
     $category = $this->model->getCategory($ctype['name'], $id);
     $form = $this->getCategoryForm($ctype, 'edit');
     list($form, $category) = cmsEventsManager::hook("content_{$ctype['name']}_cat_form", array($form, $category));
     $back_url = $this->request->get('back', '');
     // Форма отправлена?
     $is_submitted = $this->request->has('submit');
     if ($is_submitted) {
         // Парсим форму и получаем поля записи
         $category = $form->parse($this->request, $is_submitted);
         // Проверям правильность заполнения
         $errors = $form->validate($this, $category);
         if (!$errors) {
             // Обнуляем ручной SLUG, ключевые слова и описание
             // если они не разрешены для ручного ввода
             if ($ctype['options']['is_cats_auto_url']) {
                 $category['slug_key'] = null;
             }
             if (!$ctype['options']['is_cats_keys']) {
                 $category['seo_keys'] = null;
             }
             if (!$ctype['options']['is_cats_desc']) {
                 $category['seo_desc'] = null;
             }
             // Добавляем категорию и редиректим на ее просмотр
             $category = $this->model->updateCategory($ctype_name, $id, $category);
             if ($back_url) {
                 $this->redirect($back_url);
             } else {
                 if ($ctype['options']['list_on']) {
                     $this->redirectTo($ctype_name, $category['slug']);
                 } else {
                     $this->redirectToHome();
                 }
             }
         }
         if ($errors) {
             cmsUser::addSessionMessage(LANG_FORM_ERRORS, 'error');
         }
     }
     // Если включен ручной ввод SLUG и ранее он не был введен, то генерируем
     // его значение по-умолчанию из заголовка
     if (!$ctype['options']['is_cats_auto_url'] && empty($category['slug_key'])) {
         $category['slug_key'] = lang_slug($category['title']);
     }
     return cmsTemplate::getInstance()->render('category_form', array('do' => 'edit', 'ctype' => $ctype, 'category' => $category, 'form' => $form, 'back_url' => $back_url, 'errors' => isset($errors) ? $errors : false));
 }
Example #6
0
 public function getPhotoSlug($item, $check_slug = true)
 {
     $url_pattern = empty($this->config['url_pattern']) ? '{id}-{title}' : $this->config['url_pattern'];
     $slug_len = 100;
     $matches = array();
     $pattern = trim($url_pattern, '/');
     preg_match_all('/{([a-z0-9\\_]+)}/i', $pattern, $matches);
     if (!$matches) {
         return lang_slug($item['id']);
     }
     list($tags, $names) = $matches;
     foreach ($names as $idx => $field_name) {
         if (!empty($item[$field_name])) {
             $value = str_replace('/', '', $item[$field_name]);
             if ($field_name == 'type' && !empty($this->config['types'])) {
                 $value = $this->config['types'][$value];
                 $value = trim($value, '/');
             }
             $pattern = str_replace($tags[$idx], $value, $pattern);
         }
     }
     $slug = lang_slug($pattern);
     $slug = mb_substr($slug, 0, $slug_len);
     if (!$check_slug) {
         return $slug;
     }
     if ($this->filterNotEqual('id', $item['id'])->filterEqual('slug', $slug)->getFieldFiltered('photos', 'id')) {
         $id_len = strlen((string) $item['id']) + 1;
         $slug = mb_substr($slug, 0, $slug_len - $id_len);
         $slug .= '-' . $item['id'];
     }
     return $slug;
 }
Example #7
0
 public function getTaxonomySlug($name)
 {
     $name = trim($name);
     return lang_slug($name);
 }