Вход Регистрация
Файл: system/controllers/content/hooks/subscribe_item_url.php
Строк: 87
<?php

class onContentSubscribeItemUrl extends cmsAction {

    public function 
run($subscription){

        
$ctype $this->model->getContentTypeByName($subscription['subject']);
        if(!
$ctype){
            return 
false;
        }

        
$url href_to_rel($ctype['name']); $params = array(); $ds = array(); $ds_prefix '-'$is_cat_ds false;

        if(empty(
$subscription['params']['filters']) && empty($subscription['params']['field_filters'])){
            return 
$url;
        }

        
// id категории для свойств
        
$category_id 0;

        
// Получаем поля для данного типа контента
        
$fields $this->model->getContentFields($ctype['name']);

        
// набор
        
if(!empty($subscription['params']['dataset']['id'])){

            
$ds $this->model->getContentDataset($subscription['params']['dataset']['id']);

        }

        if(!empty(
$subscription['params']['filters'])){

            foreach (
$subscription['params']['filters'] as $key => $filters) {

                
// пользователь
                
if($filters['field'] == 'user_id'){

                    
$user $this->model_users->getUser($filters['value']);

                    if(
$user){
                        
$url href_to_rel('users', (empty($user['slug']) ? $user['id'] : $user['slug']), array('content'$ctype['name']));
                        
$ds_prefix '/';

                    }

                    continue;

                }
                
// папка
                
if($filters['field'] == 'folder_id'){

                    
$folder $this->model->getContentFolder($filters['value']);

                    if(
$folder){
                        
$url .= '/'.$folder['id'];
                    }

                    continue;

                }
                
// группа
                
if($filters['field'] == 'parent_id' && $subscription['params']['filters'][$key+1]['value'] == 'group'){

                    
$group $this->model_groups->getGroup($filters['value']);

                    if(
$group){

                        
$url href_to_rel('groups'$group['slug'], array('content'$ctype['name']));

                        
$ds_prefix '/';

                    }

                    continue;

                }
                
// связь
                
if($filters['field'] == 'relation'){

                    
$item $this->model->getContentItem($filters['value']['parent_ctype_id'], $filters['value']['parent_item_id']);

                    if(
$item){

                        
$parent_ctype $this->model->getContentType($filters['value']['parent_ctype_id']);

                        if(
$parent_ctype){

                            
$child_ctype $this->model->getContentType($filters['value']['child_ctype_id']);

                            if(
$child_ctype){

                                
$url href_to_rel($parent_ctype['name'], $item['slug'], array('view-'.$child_ctype['name']));

                                
$ds_prefix '/';

                            }

                        }

                    }

                    continue;

                }
                
// категория
                
if($filters['field'] == 'category_id'){

                    
$cat $this->model->getCategory($ctype['name'], $filters['value']);

                    if(
$cat){

                        if(
$ds){

                            
$is_cat_ds true;

                            
$url .= $ds_prefix.$ds['name'];

                        }

                        
$url .= '/'.$cat['slug'];

                        
$category_id $cat['id'];

                    }

                    continue;

                }

                if(isset(
$fields[$filters['field']])){
                    
$params[$filters['field']] = $filters['value'];
                }

            }

            if(
$ds && !$is_cat_ds){
                
$url .= $ds_prefix.$ds['name'];
            }

        }

        
// Получаем поля-свойства
        
$props $props_fields false;
        if (
$category_id 1){
            
$props $this->model->getContentProps($ctype['name'], $category_id);
            if(
$props){
                
$props_fields $this->getPropsFields($props);
            }
        }

        if(!empty(
$subscription['params']['field_filters'])){

            foreach (
$subscription['params']['field_filters'] as $field_name => $field_value) {

                
$matches = array();

                
// свойства или поля
                
if(preg_match('/^p([0-9]+)$/i'$field_name$matches)){

                    
// нет свойств
                    
if (!is_array($props)){
                        continue;
                    }

                    
// нет такого свойства
                    
if(!isset($props_fields[$matches[1]])){ continue; }

                } else {

                    
// нет такого поля
                    
if(!isset($fields[$field_name])){ continue; }

                }

                
$params[$field_name] = $field_value;

            }

        }

        if(
$ds && !empty($subscription['params']['dataset']['fields'])){
            foreach (
$subscription['params']['dataset']['fields'] as $ds_field_name) {
                if(isset(
$params[$ds_field_name])){
                    unset(
$params[$ds_field_name]);
                }
            }
        }

        if(!empty(
$params)){
            
$url .= '?'.http_build_query($params);
        }

        return 
$url;

    }

}
Онлайн: 2
Реклама