Создание учётной записи
542447
function insert()
    {
        # Получение данных
        $item = array(
            'name' => arg('name', 'dbsafe'),
            'login' => arg('login', '/[^a-z0-9_]/'),
            'access' => arg('access', 'int'),
            'hash' => Eresus_CMS::getLegacyKernel()->password_hash(arg('pswd1')),
            'mail' => arg('mail', 'dbsafe'),
        );
        # Проверка входных данных
        $error = false;
        if (empty($item['name']))
        {
            Eresus_Kernel::app()->getPage()->addErrorMessage(admUsersNameInvalid);
            $error = true;
        }
        if (empty($item['login']))
        {
            Eresus_Kernel::app()->getPage()->addErrorMessage(admUsersLoginInvalid);
            $error = true;
        }
        if ($item['access'] <= ROOT)
        {
            Eresus_Kernel::app()->getPage()->addErrorMessage('Invalid access level!');
            $error = true;
        }
        if ($item['hash'] != Eresus_CMS::getLegacyKernel()->password_hash(arg('pswd2')))
        {
            Eresus_Kernel::app()->getPage()->addErrorMessage(admUsersConfirmInvalid);
            $error = true;
        }
        # Проверка данных на уникальность
        $check = $this->accounts->get("`login` = '{$item['login']}'");
        if ($check)
        {
            Eresus_Kernel::app()->getPage()->addErrorMessage(admUsersLoginExists);
            $error = true;
        }
        if ($error)
        {
            saveRequest();
            HTTP::redirect(Eresus_CMS::getLegacyKernel()->request['referer']);
        }
        if (!$this->accounts->add($item))
        {
            Eresus_Kernel::app()->getPage()->addErrorMessage('Error creating user account');
        }
        HTTP::redirect(arg('submitURL'));
    }
1078825
public function delete()
    {
        // нельзя удалить корневой раздел
        if ($this->id == 0) throw new Exception\CMS(Exception\CMS::NO_RIGHTS);
    
    	$tree = new CDBTree('dir_structure');
		
		$ids_arr = array($this->id);
		
		if (!$this->isLink()) {
    
			$r = self::getDbConnection()->query('SELECT A.data_id, A.level, C.tablename, D.alias 
							  FROM dir_structure A, dir_structure B, dir_data C, types D 
							  WHERE C.id=A.data_id and B.data_id='.$this->id.' and A.lft BETWEEN B.lft and B.rght and D.id=C.typ');
			
			while ($f = $r->fetch()) {
				try {
					$r1 = self::getDbConnection()->query('SELECT id FROM '.$f['alias'].' WHERE idcat='.$f['data_id']);
					while ($f1 = $r1->fetch(\PDO::FETCH_NUM)) {
					   $m = Material::getById($f1[0], 0, $f['alias']);
					   $m->delete();
					}
				} catch (Exception $e) {}
				$ids_arr[] = $f['data_id'];
			}
		
		}
    
    	$parent = array();
    	$r = self::getDbConnection()->query('SELECT A.id, B.data_id 
                          FROM dir_structure A, dir_structure B 
                          WHERE A.data_id='.$this->id.' and B.lft<A.lft and B.rght>A.rght and B.level=A.level-1
            			  ORDER BY A.lft DESC');
    	$res = TRUE;
    	while ($f = $r->fetch()) {
    		$parent[] = $f['data_id'];
    		if (!$tree->deleteAll($f['id'])) $res = FALSE;
    	} // while
		
    	if ($res && sizeof($ids_arr))
		{
    		$ids = implode(',',$ids_arr);
        
			self::getDbConnection()->executeQuery("DELETE FROM dir_data WHERE id IN ($ids)");
			self::getDbConnection()->executeQuery("DELETE FROM types_fields_catalogs WHERE catalog_id IN ($ids)");
        
    		$r = self::getDbConnection()->query("SELECT name FROM server_aliases WHERE id IN ($ids)");
    		while ($f = $r->fetch()) {
        		$slot = new Cache\Slot\ServerByDomain($f['name']);
        		$slot->remove();	
    		}
        
    		self::getDbConnection()->executeQuery("DELETE FROM server_aliases where id IN ($ids)");
			self::getDbConnection()->executeQuery("DELETE FROM theme_config where server_id IN ($ids)");
        
    		foreach ($ids_arr as $id1) {
        		self::getDbConnection()->executeQuery("DELETE FROM users_groups_allow_cat where catalog_id=$id1");
                $tpl = new Cache\Tag\CatalogID($id1);
                $tpl->clean();
    		}
			
			// удаляем разделы-ссылки, ссылающиеся на раздел
			$r = self::getDbConnection()->query('SELECT id FROM dir_data WHERE type&'.Catalog::LINKED.'>0 and typ IN ('.$ids.')'); 
			while ($f = $r->fetch()) {
				$c = Catalog::getById($f['id']);
				$c->delete();
			}			
    	}
    	
    	$this->updateCache();
    }
1180329
public function boot()
    {
        Route::pattern('id', '^[0-9]*$');
        Route::pattern('article', '^[\w\-0-9]+$');
        Route::pattern('tag', '^[\w\-0-9\+\%\s]+$');
        Route::pattern('category', '^[\w\-0-9\/]+$');
        Route::pattern('commentable_id', '^[0-9]*$');
        Route::pattern('commentable_type', '^[a-zA-Z_]+$');

        /*Для новостей , статей не надо этого. Для пользователей не знаю
        Route::model('article', \BBCMS\Models\Article::class);
        Route::model('category', \BBCMS\Models\Category::class);
        Route::model('users', BBCMS\Models\User::class);*/

        // Backend
        Route::pattern('module', '^[a-z_]+$');
        Route::pattern('module_id', '^[0-9]*$');
        Route::pattern('setting_id', '^[0-9]*$');

        // Common
        Route::pattern('model', '^[a-zA-Z_]+$');
        Route::pattern('attribute', '^[a-zA-Z_]+$');

        // $router->bind('articles', function($id) {
        //     return \BBCMS\Models\Article::active()->findOrFail($id);
        // });

        parent::boot();
    }
634697
public function addMails()
	{
		//Выбор адресатов в зависимости от условий
		$this->clearMails();
		foreach ($this->config->mails as $name => $mail) {
			if ($this->name == $name  && !empty($name)){
				$this->_mails[] = $mail;
			}
		}
		if(empty($this->_mails)){
			foreach ($this->config->mails as $name => $mail) {
				foreach ($this->config->mailExc as $exc) {
					if($name !== $exc){
						$this->_mails[] = $mail;
					}
				}
			}
		}
		return $this->_mails;
	}
1062638
private function loadFromCookies()
    {
        if ($this->items !== null)
        {
            return;
        }
        $this->items = array();

        if (isset($_COOKIE[$this->getName()]))
        {
            $cookieValue = $_COOKIE[$this->getName()];
            @$items = unserialize($cookieValue);

            /* Проверяем, прошла ли десериализация */
            if ($items === false)
            {
                Eresus_Kernel::log(__METHOD__, LOG_NOTICE, 'Cannot unserialize cookie value: "%s"',
                    $cookieValue);
                return;
            }

            // Записываем результат
            $this->items = $items;
        }
    }
27130
protected function createFileStructure()
    {
        $dirs = array(
            '/var/log',
            '/var/cache',
            '/var/cache/templates',
        );

        foreach ($dirs as $dir)
        {
            if (!file_exists($this->getFsRoot() . $dir))
            {
                $umask = umask(0000);
                mkdir($this->getFsRoot() . $dir, 0777);
                umask($umask);
            }
            // TODO Сделать проверку на запись в созданные директории
        }
    }
1083222
public function delete() {
        $r = DbConnection::getDbConnection()->fetchAll( "select id from dir_data where typ=?", [$this->id] );
        foreach ($r as $f) {
            $c = Catalog::getById($f[0]);
            $c->delete();
        }
        DbConnection::getDbConnection()->executeQuery("drop table ".$this->table);
        DbConnection::getDbConnection()->executeQuery("delete from types where id=".$this->id);
        DbConnection::getDbConnection()->executeQuery("delete from types_fields where id=".$this->id);
        
        // удалить все поля - ссылки на материалы этого типа
        $r = DbConnection::getDbConnection()->fetchAll('SELECT A.field_id, A.name, B.alias FROM types_fields A, types B WHERE A.type=? and A.len=? and A.id=B.id', [FIELD_MATSET, $this->id]);
        foreach ($r as $f) {
            DbConnection::getDbConnection()->executeQuery('DROP TABLE '.$f['alias'].'_'.$alias.'_'.$f['name']);
      	    DbConnection::getDbConnection()->executeQuery('DELETE FROM types_fields WHERE field_id='.$f['field_id']);
        }    
    }
295162
public function rewind()
    {
        $this->items = array();

        $this->prepareUrlTemplate();

        /*
         * Если страниц больше чем задано показывать за один раз, то будем показывать только часть
         * страниц, наиболее близких к текущей.
         */
        if ($this->total > $this->size)
        {
            // Начинаем показ с текущей, минус половину видимых
            $first = (int) floor($this->current - $this->size / 2);
            if ($first < 1)
            {
                // Страниц меньше 1-й не существует
                $first = 1;
            }

            $last = $first + $this->size - 1;
            if ($last > $this->total)
            {
                // Но если это больше чем страниц всего, вносим исправления
                $last = $this->total;
                $first = $last - $this->size + 1;
            }
        }
        else
        {
            $first = 1;
            $last = $this->total;
        }


        if ($first > 1)
        {
            $pageNumber = $this->current - $this->size;
            if ($pageNumber < 1)
            {
                $pageNumber = 1;
            }
            $this->items []= $this->itemFactory($pageNumber, '&larr;');
        }

        for ($pageNumber = $first; $pageNumber <= $last; $pageNumber++)
        {
            $item = $this->itemFactory($pageNumber);
            $item['current'] = $pageNumber == $this->current;
            $this->items []= $item;
        }

        if ($last < $this->total)
        {
            $pageNumber = $this->current + $this->size;
            if ($pageNumber > $this->total)
            {
                $pageNumber = $this->total;
            }
            $this->items []= $this->itemFactory($pageNumber, '&rarr;');
        }

        $this->iteration = 1;
    }
497836
private function adminRenderImagesList()
    {
        // Определяем текущую страницу списка
        $pg = arg('pg') ? arg('pg', 'int') : 1;

        $section = arg('section', 'int');

        $maxCount = $this->settings['useGroups'] ?
            $this->settings['groupsPerPage'] :
            $this->settings['itemsPerPage'];

        $startFrom = ($pg - 1) * $maxCount;

        /* @var Gallery_Entity_Table_AbstractContent $table */
        if ($this->settings['useGroups'])
        {
            $table = ORM::getTable($this, 'Group');
        }
        else
        {
            $table = ORM::getTable($this, 'Image');
        }

        $items = $table->findInSection($section, $maxCount, $startFrom, false);

        // Данные для подстановки в шаблон
        $vars = array();
        $vars['this'] = $this;
        $vars['page'] = Eresus_Kernel::app()->getPage();
        $vars['Eresus'] = Eresus_CMS::getLegacyKernel();
        $vars['sectionId'] = arg('section', 'int');
        $vars['items'] = $items;

        /* Шаблоны адресов действий */
        $vars['urlEdit'] = str_replace('&', '&amp;',
            Eresus_Kernel::app()->getPage()->url(array('id' => '%s')));
        $vars['urlToggle'] = str_replace('&', '&amp;',
            Eresus_Kernel::app()->getPage()->url(array('toggle' => '%s')));
        $vars['urlCover'] = str_replace('&', '&amp;',
            Eresus_Kernel::app()->getPage()->url(array('cover' => '%s')));
        $vars['urlUp'] = str_replace('&', '&amp;',
            Eresus_Kernel::app()->getPage()->url(array('up' => '%s')));
        $vars['urlDown'] = str_replace('&', '&amp;',
            Eresus_Kernel::app()->getPage()->url(array('down' => '%s')));
        $vars['urlDelete'] = str_replace('&', '&amp;',
            Eresus_Kernel::app()->getPage()->url(array('delete' => '%s')));

        $totalPages = ceil($table->countInSection($section) / $maxCount);

        if ($totalPages > 1)
        {
            $pager = new PaginationHelper($totalPages, $pg,
                Eresus_Kernel::app()->getPage()->url(array('pg' => '%s')));
            $vars['pager'] = $pager->render();
        }
        else
        {
            $vars['pager'] = '';
        }

        /* Создаём экземпляр шаблона */
        if ($this->settings['useGroups'])
        {
            $tmpl = $this->templates()->admin('image-grouped-list.html');
            // Изображения вне групп
            $table = ORM::getTable($this, 'Album');
            /* @var Gallery_Entity_Album $album */
            $album = $table->find($section);
            $vars['orphans'] = $album->getOrphans();
        }
        else
        {
            $tmpl = $this->templates()->admin('image-list.html');
        }

        // Компилируем шаблон и данные
        $html = $tmpl->compile($vars);

        return $html;
    }
403577
public function doSuccess()
	{
		$date = date('Y-m-d H:i:s', time() - 60);
		$dateRefund = $this->updated_at; //даём минуту для прохождения оплаты
		if ($date > $dateRefund) {
			Refund::find($this->id)
				->whereStatus(self::C_STATUS_PROCESSING)
				->update(array('status' => self::C_STATUS_SUCCESS));
		}

		return Refund::find($this->id);
	}
724853
public function validate()
    {
        $preFunctions = $this->getPreFunctions();
        $postFunctions = $this->getPostFunctions();
        $validators = $this->getValidators();
        $conditionalResults = $this->getConditionalResults();

        ValidationHelper::validate($preFunctions);
        ValidationHelper::validate($postFunctions);
        ValidationHelper::validate($validators);
        ValidationHelper::validate($conditionalResults);

        $unconditionalResult = $this->getUnconditionalResult();
        if (null === $unconditionalResult && $conditionalResults->count() > 0) {
            $name = (string)$this->getName();
            $errMsg = sprintf('Действие %s имеет условные условия, но не имеет запасного безусловного', $name);
            throw new InvalidWorkflowDescriptorException($errMsg);
        }

        $restrictions = $this->getRestriction();
        if ($restrictions !== null) {
            $restrictions->validate();
        }

        if ($unconditionalResult !== null) {
            $unconditionalResult->validate();
        }
    }
1141109
function rss_body($foo_object=NULL, $foo_strip=0)
	{
		//TODO: Этот config пока используется только на лентах топиков:
		//TODO: http://www.wrk.ru/society/2014/08/topic-89787-rss.xml
		//TODO: Подумать, как сделать красиво и локально
		if(!\B2\Cfg::get('rss_skip_images') && ($image = object_property($this, 'image')))
 			$image_html = "<p>".$image->thumbnail('300x300')->html_code() . "</p>\n";
		else
			$image_html = '';

		if(($body = $this->description()))
			return $image_html . '<p>'.bors_lcml::bbh($body).'</p>';

//		if(($body = $this->source()))
//			return $image_html . '<p>'.bors_lcml::bbh($body).'</p>';

		return $image_html . '<p>'.$this->body().'</p>';
	}
658304
public function init()
    {
        // Если гость ...
        if (Yii::$app->getUser()->isGuest) {
            // ... то корзину храним в сессии
            $this->basket = new SessionBasket();
        } else {
            // ... иначе в БД
            $this->basket = new DbBasket();
            $this->basket->idUser = Yii::$app->user->identity->getId();
        }

        $this->basket->owner  = $this;

        // Если в сессии осталась корзина, а пользователь уже не гость => сливаем в БД
        if(!is_null(Yii::$app->session->get($this->storageName, null)) && !Yii::$app->getUser()->isGuest) {
            $this->basket->merge();
        }

        // Кешируем товары
        // Это нужно, чтобы для проверки в корзине товар или нет, не делать запросы в БД для каждого товара
        $this->cache = $this->basket->getBasketProducts();
    }
1061370
private function adminRenderProperties()
    {
        $sections = Eresus_Kernel::app()->getLegacyKernel()->sections;
        $item = $sections->get(arg('section', 'int'));

        $form = array(
            'name' => 'contentEditor',
            'caption' => 'Текст на странице',
            'width' => '800px',
            'fields' => array(
                array('type' => 'hidden', 'name' => 'action', 'value' => 'props_update'),
                array('type' => 'hidden', 'name' => 'textupdate', 'value' => '1'),
                array('type' => 'edit', 'name' => 'title', 'label' => 'Название', 'width' => '150px'),
                array('type' => 'edit', 'name' => 'created', 'label' => 'Дата создания',
                    'width' => '150px', 'comment' => 'ГГГГ-ММ-ДД ЧЧ:ММ:СС'),
                array('type' => 'checkbox', 'name' => 'active', 'label' => 'Активна'),
                array('type' => 'html', 'name' => 'content', 'height' => '400px',
                    'label' => 'Описание<div class="ui-state-warning"><em>Внимание!</em> Для того, чтобы ' .
                    'это описание показывалось посетителям, надо добавить в ' .
                    '<a href="admin.php?mod=plgmgr&id=gallery">шаблон</a> вывод текста страницы (альбома).' .
                    '</div>'),
            ),
            'buttons'=> array('ok', 'apply', 'cancel'),
        );

        /* @var TAdminUI $page */
        $page = Eresus_Kernel::app()->getPage();
        $result = $page->renderForm($form, $item);
        return $result;
    }
166554
public function sortableAction()
    {
        $admin = $this->getAdmin();

        $admin->checkAccess('edit');

        $request = $this->getRequest();

        /** @var EntityManager $em */
        $em = $this->getDoctrine()->getManager();

        $repository = $em->getRepository($admin->getClass());

        $object = $repository->find($request->request->get('id'));

        // Получаем позицию элемента, после которого должен стоять текущий

        $after_object = $repository->find($request->request->get('after_id'));

        $after_pos = 0;

        if ($after_object) {
            $after_pos = $after_object->getPosition();
        }

        $new_pos = 0;

        // Если позиция не определена, то 1, иначе + 1 от позиции после которого должен стоять.
        if ($after_object) {
            $new_pos = $after_pos + 1;
        }

        // Обновляем позиции текущего
        $object->setPosition($new_pos);

        $admin->update($object);

        return $this->renderJson(
            [
                'result' => 'ok',
                'objectId' => $admin->getNormalizedIdentifier($object),
            ]
        );
    }
917885
public function delete()
    {
        // удаление ссылок с удаляемого материала
        $r = $this->getDbConnection()->query("select B.name, B.len, B.type, B.pseudo_type from types A, types_fields B where A.alias='".$this->table."' and B.id=A.id and (B.type=".FIELD_LINKSET." or B.type=".FIELD_MATSET.")");
        while ($f = $r->fetch(\PDO::FETCH_NUM)) {
            $tbl = ObjectDefinition::get_table($f[2], $f[1], $this->objectDefinition->id, $f[3]);
            if ($f[2] != FIELD_LINKSET && $f[3] != PSEUDO_FIELD_TAGS) {
            	$r1 = $this->getDbConnection()->query("select dest from ".$this->table."_".$tbl."_".$f[0]." where id=".$this->id);
            	while ($f1 = $r1->fetch(\PDO::FETCH_NUM)) {
            	   $m = Material::getById($f1[0], $f[1], $tbl);
            	   $m->delete();
            	}
            }
            $this->getDbConnection()->executeQuery("delete from ".$this->table."_".$tbl."_"."$f[0] where id=".$this->id);
        }
        
        // удаление ссылок на этот материал
        if (property_exists($this, 'idcat') && $this->idcat >= 0) {
        	$r = $this->getDbConnection()->query("select A.alias, B.name, B.type from types A, types_fields B where B.id=A.id and B.len=".$this->idcat." and (B.type=".FIELD_LINK." or B.type=".FIELD_LINKSET.")");
        	while ($f = $r->fetch(\PDO::FETCH_NUM)) {
              if ($f[2] == FIELD_LINK) {
        	    $this->getDbConnection()->executeQuery("update $f[0] set $f[1]=0 where $f[1]=".$this->id);
        	  } else {
        	    $this->getDbConnection()->executeQuery("delete from $f[0]"."_".$this->table."_"."$f[1] where dest=".$this->id);
        	  }
        	}
        } else {
        	$r = $this->getDbConnection()->query("select A.alias, B.name from types A, types_fields B where B.id=A.id and B.len = ".$this->objectDefinition->id." and B.type=".FIELD_MATSET);
            while ($f = $r->fetch(\PDO::FETCH_NUM)) {
        	  $this->getDbConnection()->executeQuery("delete from $f[0]"."_".$this->table."_"."$f[1] where dest=".$this->id);
        	}
        }
                
        // удаление самого материала
        $this->getDbConnection()->executeQuery("delete from ".$this->table." where id=".$this->id);
        
    }
223565
public function getRegionString()
    {
        //Оно может быть не сохранено если определяли по ip
        $result = [];

        $result[] = ArrayHelper::getValue($this->data, 'region_with_type');
        $result[] = ArrayHelper::getValue($this->data, 'area_with_type');
        $result[] = ArrayHelper::getValue($this->data, 'city_with_type');
        $result[] = ArrayHelper::getValue($this->data, 'settlement_with_type');

        $result = array_unique($result);

        foreach ($result as $key => $value)
        {
            if (!$value)
            {
                unset($result[$key]);
            }
        }

        return implode(", ", $result);
    }