Фреймворк(англ. Framework) – это набор всевозможных библиотек (инструментов) для быстрой разработки повседневных задач
Фреймворк в информационных системах – структура программной системы; программное обеспечение, облегчающее разработку и объединение разных компонентов большого программного проекта. В отличие от библиотек, которые объединяют набор подпрограмм близкой функциональности, фреймворк содержит в себе большое количество разных по назначению библиотек. Употребляется также слово каркас, а некоторые авторы используют его в качестве основного, в том числе, не базируясь вообще на англоязычном аналоге.
Можно также говорить о каркасном подходе как о подходе к построению программ, где любая конфигурация программы строится из двух частей: первая, постоянная часть – каркас, не меняющийся от конфигурации к конфигурации и несущий в себе гнезда, в которых размещается вторая, переменная часть – сменные модули (или точки расширения).
2.3.1 Концепция PHP-фреймворков.
PHP-фреймворки за последнее время приобрели популярность и стали базовой платформой для разработки веб-приложений. Другими словами, можно сказать, что они обеспечивают основную структуру приложения. Использование этих инструментов позволяет экономить большое количество времени, уменьшить нагрузку на процесс разработки, избавиться от проблемы повторяющегося кода и быстро создавать приложения. Без использования их становится гораздо сложнее создавать веб-приложения, сопровождать и модернизировать их.
Между тем, использование PHP-фреймворков делает процесс создания приложения гораздо более легким и функциональным.
Сейчас большинство PHP-проектов построены при помощи архитектуры Model View Controller (MVC). MVC – это архитектурный шаблон проектирования, который используется в большинстве языков программирования и позволяет отделить бизнес-логику от пользовательского интерфейса, а так же выделить область логики, которая производит обмен информации между базой данных и пользовательским интерфейсом.
Таким образом, можно изменить логику приложения, не затрагивая интерфейсной части, либо наоборот, что очень хорошо для дизайнеров и верстальщиков. Это позволяет избежать путаницы и упрощает весь процесс разработки.
Когда говорится о MVC, то имеется в виду: Model – та часть архитектуры, которая взаимодействует с базой данных, View – представляет ту часть, которую непосредственно видит пользователь, то есть графический интерфейс, и Сontroller – это область логики, которая контролирует и управляет всеми ее составляющими и данными. Большинство современных фреймворков берут за основу именно архитектуру MVC. Также в современном фреймворке используется шаблон проектирования Front Controller, который, в зависимости от запроса, перенаправляет его на нужный контроллер. Без Front Controller разработка с применением фреймворка не имела бы смысла [22].
2.3.2 Случаи использования PHP-фреймворка
Для того чтобы воспользоваться всеми возможностями данного инструментария, необходим немалый багаж знаний в разработке приложений. PHP-фреймворки могут помочь устранить очень частую ошибку при программировании приложений – повторение кода, а также систематизировать процесс разработки. Они являются мощным инструментом для быстроразвивающегося языка программирования как PHP, которые помогут организовать ваш код.
Каждый человек имеет различные предпочтения и потребности. Для одного разработчика использование фреймворков может помочь в ускорении процесса программирования, а для другого это может показаться пустой тратой времени. В большинстве случаев это зависит от уровня профессионализма, но, в целом, PHP-фреймворки предназначены, чтобы сэкономить время и абстрагироваться от рутинных задач.
2.3.3 Обзор современных фреймворков
С точки зрения удобства разработки, скорости, стабильности было выделено 6 популярных PHP-фреймворков, которые отвечают большинству требований.
Zend framework
Zend framework – это PHP-framework, созданный и поддерживаемый компанией Zend, сотрудники которой являются непосредственными авторами языка PHP. Поэтому он следует традициям и духу PHP – базируется на простоте, объектно-ориентированных принципах, дружественной лицензии и тщательно тестируемом коде с применением «agile» методов [23].
Основные особенности:
· все компоненты полностью ориентированы на PHP 5 и E_STRICT– совместимы;
· встроенный генератор кода;
· архитектура «используй только то, что необходимо» с минимальными зависимостями компонентов;
· использует легко расширяемый шаблон проектирования MVC, поддерживает макеты и PHP-скрипты представления по умолчанию;
· поддерживает множество различных баз данных, включая MariaDB, MySQL, Oracle, IBM DB2, Microsoft SQL Server, PostgreSQL, SQLite, and Informix Dynamic Server;
· специальные классы для создания, отправки, получения email с помощью mbox, Maildir, POP3 и IMAP4;
· гибкая подсистема кэширования с поддержкой множества хранилищ.
Недостатки:
· слишком большой;
· чересчур многослойный;
· очень медленный без кэширования;
· очень сложная архитектура, без глубокого понимания шаблонов проектирования сложен в освоении;
· слабое русскоязычное сообщество;
· много мелких недочетов;
· очень медленная скорость развития.
Фреймворк CakePHP
CakePHP является быстроразвивающимся фреймворком для PHP, который предоставляет расширяемую архитектуру для разработки, обслуживания и развертки веб-приложений. Использует известный шаблон проектирования MVC, как и в объектно-реляционных фреймворках.
Основной парадигмой CakePHP является увеличение продуктивности разработки и помощь программисту в написании кода. Изначально создавался как клон популярного языка Ruby on Rails, и многие идеи были заимствованы именно оттуда [24].
Особенности:
· компоненты для авторизации, ограничения доступа (ACL), управления сессиями, cookies, представления древовидной информации (в виде Nested Sets);
· хелперы (компоненты) для генерации и заполнения форм, деления на страницы (paginate), управления кэшем, JavaScript (в том числе и AJAX);
· механизм интернационализации для работы сайта на множестве языков;
· генерация SQL-запросов, в том числе для таблиц с отношениями один ко многим и многие ко многим, ORM;
· генерация CRUD-страниц для сущностей, Router::mapResources c Put Delete Get Post;
· автогенератор кода Bake;
· миграции;
· консольная интеграция, класс Shell и задачи Task;
· плагины (как отдельные расширяемые приложения), компоненты и поведения;
· поддержка Simple Test;
· слои (layouts) и темы (Themes);
· низкий порог вхождения – быстрая разработка основана на соглашениях (взят курс на Ruby On Rails).
Недостатки:
· низкая производительность;
· слабая документация;
· нет сформированного русскоязычного сообщества;
· сложный в понимании ACL;
· строгие соглашения по именованию;
· низкая скорость развития.
Фреймворк Kohana
Проект «Kohana» был создан как ветвь PHP-фреймворка CodeIgniter под именем «Blue Flame». Главной причиной ответвления был переход к более открытой для общественности модели разработки, потому, что многие пользователи были недовольны скоростью разработки и исправления ошибок в CodeIgniter. Rick Ellis – создатель и владелец CodeIgniter подтолкнул новый фреймворк к созданию собственной документации и посоветовал переименовать проект. В июле 2007 «Blue Flame» был переименован в «Kohana», для того чтобы избежать проблем с авторскими правами в будущем [25].
Особенности:
· высокая безопасность;
· хорошо прокомментированный код и встроенные средства отладки и профилирования;
· простота в понимании;
· использует парадигму MVC;
· поддержка UTF-8;
· очень легко расширяем;
· распространяется по лицензии BSD, то есть полностью свободен как для коммерческого, так и бесплатного использования.
Недостатки:
· документация местами устаревшая, редко обновляется;
· слабая обратная совместимость между версиями;
· слаборазвитый форум, большинство разработчиков общается через IRC;
· нет никаких гарантий, что проект будет развиваться в будущем;
· нет сформированного русскоязычного сообщества.
Фреймворк CodeIgniter
CodeIgniter – популярный MVC фреймворк с открытым исходным кодом, написанный на языке программирования PHP, для разработки полноценных веб-систем и приложений. Разработан компанией EllisLab, а также Риком Эллисом (Rick Ellis) и Полом Бурдиком (Paul Burdick) [26].
CodeIgniter отличает простота, которая достигается благодаря следующим факторам:
· хорошая документация;
· развитое сообщество;
· фреймворк дает свободу программисту, не создавая каких–либо структурных ограничений и конвенций;
· программисту не требуется учиться пользоваться генераторами кода из командной строки;
· CodeIgniter работает практически на любом хостинговом плане, который имеет поддержку PHP версии 5.1 и выше;
· CodeIgniter считается одним из быстрых и не требовательных к ресурсам фреймворков;
· поддержка баз данных MySQL, PostgreSQL, MSSQL, SQLite, Oracle.
Недостатки:
· поддержка PHP4 тянет за собой лишний код;
· нет встроенной системы разделения прав;
· медленно развивается;
· неустойчивость к CSRF-атакам.
Фреймворк Symfony
Symfony – PHP фреймворк, имеющий большую библиотеку классов, который написан на PHP5. Архитектура имеет полезные компоненты и отличные инструменты, предназначенные для создания сложных веб-приложений. Symfony – свободный каркас, написанный на PHP5, который использует паттерн Model-View-Controller (MVC). Symfony предлагает быструю разработку и управление веб-приложениями, позволяет легко решать рутинные задачи веб-программиста. Symfony бесплатен и публикуется под лицензией MIT [27].
Особенности:
· поддерживает множество баз данных (MySQL, PostgreSQL, SQLite или любая другая PDO-совместимая СУБД);
· встроенные классы для работы с email;
· гибкая система шаблонов в представлении;
· встроенный кодогенератор;
· поддержка французского спонсора Sensio;
· очень гибок;
· высокая производительность.
Недостатки:
· сложен в освоении;
· подходит только для больших проектов;
· отсутствие русской документации;
· нет встроенной ORM;
· нет русскоязычного сообщества.
Фреймворк Yii
Yii – это высокоэффективный, основанный на компонентной структуре PHP-фреймворк для разработки масштабных веб-приложений. Он позволяет максимально применить концепцию повторного использования кода и может существенно ускорить процесс веб-разработки. Название фреймворка изначально значило «Yes It Is» [22].
Особенности:
· высокая производительность;
· интерфейсы DAO и ActiveRecord для работы с базами данных (PDO);
· поддержка интернационализации;
· кэширование страниц и отдельных фрагментов;
· перехват и обработка ошибок;
· ввод и валидация форм;
· использование AJAX и интеграция с jQuery;
· генерация базового PHP-кода для CRUD-операций (скаффолдинг);
· поддержка тем оформления для их лёгкой смены;
· возможность подключения сторонних библиотек;
· миграции базы данных;
· автоматическое тестирование;
· поддержка REST.
· активное русскоязычное сообщество.
2.3.4 Преимущества использования фреймворка
1. Гибкость разработки и развития проекта.
2. Эффективное использование ресурсов сервера.
3. Открытый код фреймворка.
4. Легкость и надежность веб-разработок. Фреймворк состоит из базовых, проверенных, отлаженных функций и операций. Построен на базе объектно-ориентированного программирования.
5. Постоянное развитие и совершенствование фреймворка.
6. Большой объем сопроводительной документации, примеров по разработке на разных языках.
7. Мировая популярность, большое количество разработчиков.
8. Легкость сопровождения проекта в дальнейшем, так как разработка с применением фреймворка основана на определенных соглашениях.
9. Фреймворк позволяет сконцентрироваться на решении архитектурных задач, а не базовых, как при разработке без его применения.
Фреймворк позволяет узко решать поставленную задачу.
Одно из главных преимуществ фреймворка – это удобная разработка нестандартных проектов. Ни один крупный нестандартный проект (например, twitter.com, фотобанк с онлайн покупкой фотографий, сайт знакомств и т.д.) не делают на готовой CMS – они для этого не предназначены. Все оригинальные проекты разрабатывают на фреймворках.
2.3.5 Обоснование выбора фреймворка
На основании сравнительного анализа ряда фреймворков выбор был сделан в пользу Yii.
Yii – очень быстрый, современный и гибкий фреймворк. Имеет множество плюсов:
· высокая скорость разработки;
· высокая скорость работы;
· поддержка модулей, компонентов и виджетов;
· интеграция с javascript фреймворком jQuery;
· удобная работа с базой данных: возможно использование как Data Access Objects, так и Active Record;
· удобная и гибкая система кеширования и ивалидирования кеша
· удобный встроенный генератор кода Gii;
2.4 Выбор СУБД
База данных является набором перманентных данных, используемых прикладными программными системами. Все данные находящиеся в БД зачастую логически взаимосвязаны между собой [28]. В зависимости от используемой базы данных для разработки проекта приходится выбирать тот или иной PHP-фреймворк.
Базы данных классифицируются по среде физического хранения.
· БД во вторичной памяти (традиционные): средой постоянного ранения является периферийная энергонезависимая память (вторичная память) – как правило, жёсткий диск. В оперативную память СУБД помещает лишь кэш-данные для текущей обработки;
· БД в оперативной памяти (in-memory databases): все данные находятся в оперативной памяти;
· БД в третичной памяти (tertiary databases): средой постоянного хранения является отсоединяемое от сервера устройство массового хранения (третичная память). Во вторичной памяти сервера хранится лишь каталог данных третичной памяти, файловый кэш и данные для текущей обработки; загрузка же самих данных требует специальной процедуры.
Универсальный язык программирования (SQL) применяется для управления данными в реляционных базах данных, основанных на реляционной алгебре. Самой популярной и открытой СУБД на сегодняшней день является MySQL. Основное внимание разработчиков MySQL всегда было направлено на эффективную реализацию самых распространённых функций.
2.4.1 Реляционная СУБД MySQL
MySQL – реляционная система управления базами данных.
Плюсы использования MySQL[29]:
· Размер и скорость.MySQL способна работать при малых ресурсах. Быстрая скорость извлечения информации.
· Лёгкость установки. MySQL прост и лёгок в установке. Более того, в некоторые дистрибутивы Linux он уже встроен.
· Соблюдение стандартов.MySQL является стандартной системой с обширными возможностями разработками.
· Реагирование на требования общества. Сотрудники MySQL A B расположены по всему земному шару, благодаря чему может своевременно реагировать на требования пользователей. Также программист всегда может посмотреть код программы для поиска и решения проблем.
· Простой интерфейс для связывания с другим программным обеспечением.MySQL можно использовать как часть более крупной системы, например, программы, которые будут напрямую взаимодействовать с СУБД MySQL.
Для работы с MySQL необходимы сервер и клиент. Сервером является программа mysql, представленная компанией MySQL AB и доступная в большинстве инсталляций MySQL. Также в дистрибутив включено приложение phpMyAdmin, которое является клиентом, позволяющее выполнять административные задачи на сервере.
2.5 Организация системы контроля версий
Система контроля версий (СКВ) – это система, регистрирующая изменения в одном или нескольких файлах с тем, чтобы в дальнейшем была возможность вернуться к определённым старым версиям этих файлов [30]
СКВ даёт возможность возвращать отдельные файлы к прежнему виду, возвращать к прежнему состоянию весь проект, просматривать происходящие со временем изменения, определять, кто последним вносил изменения во внезапно переставший работать модуль, кто и когда внёс в код какую–то ошибку, и др. При возникновении ошибки можно восстановить все изменения. Вдобавок, накладные расходы на всё, что вы получаете, будут очень маленькими.
Локальная СКВ с простой БД, в которой хранятся все изменения нужных файлов (рис.2.3).
Рис. 2.3 Схема локальной СКВ
СКВ является системой централизованного типа. Она позволяет нескольким разработчикам работать над единым проектом. При этом данные хранятся на сервере, доступ к которому есть у каждого члена группы разработчиков. Серьёзным недостатком является необходимость наличия сервера, т. к. если доступа к нему не будет, то разработчики не смогут взаимодействовать, и работа будет остановлена.
Рис 2.3 Схема централизованной СКВ
Распределённые СКВ. В данной системе клиенты выгружают не последние версии файлов, а весь репозиторий, что обеспечивает некую защиту от выхода из строя сервера или жёстких дисков. Каждый раз, когда разработчик скачивает последнюю версию, он копирует последнюю версию репозитория.
Используя такую модель СКВ, можно работать с несколькими удалёнными репозиториями, что позволяет параллельно работать с несколькими группами людей по-разному, в рамках одного проекта, можно вести несколько типов рабочих процессов, что невозможно при централизованных системах.
Описание СКВ Git
Основное преимущество Git от других СКВ – это то, как Git воспринимает свои данные. Git считает хранимые данные набором слепков небольшой файловой системы. При внесении изменений в текущую версию проекта Git сохраняет слепок проекта в том виде, в котором они находятся в данный момент. Если файл не меняется, Git не сохраняет файл снова, а делает ссылку на ранее сохранённый файл.
Каждая СКВ имеет поддержку ветвления. Ветвление позволяет отклониться от основной линии разработки и продолжить работу, не вмешиваясь в основную линию.
Git как контенто-адресуемая система – это очень мощный инструмент, который можно использовать не только как систему контроля версий [30].
2.6 Набор инструментов «Bootstrap»
Bootstrap создан компанией Twitter, и сначала использовался для собственных продуктов и назывался «Twitter Bootstrap», а позже был запущен в свободное распространение, лишившись из названия бренда Twitter.
«Bootstrap» – это CSS/HTML фреймворк для создания сайтов. Другими словами, это набор инструментов для вёрстки. В нём есть ряд преимуществ, благодаря которым BS считается самым популярным среди себе подобных[31].
Преимущества Bootstrap
1. Скорость работы, благодаря множеству готовых элементов, вёрстка с Bootstrap занимает значительно меньше времени.
2. Масштабируемость: добавление новых элементов не нарушает общую структуру.
3. Лёгкая настраиваемость: редактирование стилей производится путём создания новых css-правил, которые исполняются вместо стандартных.
4. Огромное сообщество разработчиков.
5. Широкая сфера применения – Bootstrap используется в создании тем для практически любой CMS (OpenCart, Prestashop, Magento, Joomla, Bitrix, WordPress и любые другие), в том числе для одностраничных приложений.
Шаблоны в Bootstrap позволяют менять уже изменённые элементы под свои потребности. Множество разработчиков предлагают свои шаблоны (как платно, так и бесплатно). Подключить шаблон в Bootstrap очень легко: после подключения нужно только добавить вызов CSS пользовательского шаблона.
2.7 Библиотека «Highcharts»
«Highcharts» – библиотека для создания графиков, написанная на JavaScript, позволяет легко добавлять интерактивные, анимированные графики на сайт или в веб-приложение. На данный момент библиотека поддерживает большое количество диаграмм: линейных, круговых, колоночных, рассеивающих и множество других [32].
Построенные графики работоспособны во всех популярных браузерах, включая Safari на iPhone.
Минимальная версия для Internet Explorer составляет 6+. Также браузеры, поддерживающие Canvas-элемент, и в некоторых случаях SVG для графического рендеринга.
Библиотека бесплатна для некоммерческого использования, однако цена для коммерческого использования на одном сайте составляет $80, безлимитное использование – 360 долларов.
Поддерживаются следующие типы вывода графиков:
line, spline, area, areaspline, column, bar, pie и scatter. И они могут быть комбинированы друг с другом при выводе конечному пользователю, и обладают возможностью отключения любого из них в режиме реального времени непосредственно пользователем для удобства разборки информации.
Данные для построения графиков могут быть взяты как из самого JS, так из локального файла, базы данных или с удаленного сервера.
Особенности:
· библиотека работает на чистом JS и не требует каких-либо плагинов или Flash;
· вывод графиков довольно прост, и они могут быть использованы даже новичками в веб-разработке;
· есть увеличение отдельных областей;
· поддержка скинов/тем оформлений;
· поддержка tooltip с выводом информации;
· в большинстве типов графиков есть поддержка date-time X-оси;
· размер библиотеки ~18кб.
3. ПРАКТИЧЕСКАЯ ЧАСТЬ
В ходе выполнения работы были созданы скрипты на языке PHP c использованием фреймворка Yii и библиотек «Bootstrap» и «Highcharts», реализующие следующие задачи:
1. Интерфейс регистрации.
2. Интерфейс модерации.
3. Визуализация.
Вёрстка сайта была осуществлена с использованием фреймворка «Bootstrap». Визуализация реализована при помощи библиотеки «HighCharts».
Разработанная система предназначается для работы с кластером «Synergy» на кафедре информационных компьютерных технологий РХТУ им. Д. И. Менделеева. Данный программный продукт позволяет получить удаленный доступ к кластеру для обычных пользователей. Следует отметить возможность доступа помимо стационарных персональных компьютеров и с мобильных устройств.
3.1 Интерфейс для регистрации пользователей
Данный элемент интерфейса реализован при помощи скриптов: SiteController.php, LoginForm.php, RegistrationForm.php, activate.php, login.php, registration.php, registrationSuccess.php (см. приложение 1). С их помощью обеспечивается ввод информации о пользователе в поля и контроль правильности заполнения формы (рис 3.1, 3.2).
В случае успешного завершения регистрации создается новая учетная запись и на экран выводится сообщение с инструкциями (рис. 3.3.)
Реализована отсылка регистрационной информации на электронный адрес пользователя (рис. 3.4).
Рис. 3.1 Пример заполнения регистрационной формы
Рис. 3.2 Пример ошибочного заполнения формы регистрации
Рис. 3.3 Сообщение после завершения регистрации
Рис. 3.4 Сообщение об успешной активации учётной записи
После завершения операций регистрации становится доступен вход в учётную запись пользователя через форму рис.3.5.
Рис. 3.5 Экран входа пользователя
Войдя в систему, пользователь может изменить настройки своего профиля (рис. 3.6), а также изменить пароль (рис. 3.7).
Рис. 3.6 Экран профиля пользователя
Рис. 3.7 Экран смены пароля
3.2 Интерфейс для модерации пользовательских учетных записей и задач
Интерфейс для администрирования учетных записей реализован скриптами: UsersController.php, Users.php, index.php, form.php (см. приложение 1). Модератор имеет возможность добавлять (рис.3.8), сортировать, удалять, редактировать учетные записи пользователей, а также авторизовываться под именем пользователя.
Скриншот интерфейса администратора приведен на рис. 3.9.
Кроме того модератор может управлять запущенными задачами. Данная функция реализована скриптами: TasksController.php, Task.php, TaskData.php, index.php, tabs.php, result.php, form.php, form2.php, form3.php . С помощью этих скриптов модератор имеет возможность редактировать, удалять и менять статус задачи, чтобы пользователь мог отслеживать состояние своих задач (рис. 3.10 – 3.13). Также он может просматривать результаты визуализации пользовательских задач. Подробнее о визуализации см. ниже.
Рис. 3.8 Форма создания нового пользователя из администраторской учётной записи
Рис. 3.9 Интерфейс администратора
Рис. 3.10 Интерфейс администрирования задач
Рис. 3.11 Создание тестовой задачи. Вкладка «Общие»
Рис.3.12 Создание тестовой задачи. Вкладка «Свойства атомов»
Рис. 3.13 Создание тестовой задачи. Вкладка «Свойства расчета»
3.3 Визуализация результатов
Для визуализации результатов применялась библиотека «HighCharts», предлагающая широкий спектр доступных графиков. Пользователю доступны функции самостоятельного форматирования построенных графиков.
Управление настройками библиотеки осуществлялось при помощи виджета result.php на примере тестовой задачи, в качестве которой была взята работа аспиранта Хорошавина Л. «Квантово-механический расчет зонной структуры углеродной нанотрубки». Результаты построения графиков для данной задачи при различных опциях форматирования приведены на рис. 3.14 – 3.15.
Рис. 3.14 Пример графика
Рис. 3.15 Пример интерактивного изменения графика пользователем. Выполнено выделение области для дальнейшего масштабирования
4. ОПИСАНИЕ ПРОГРАММЫ
4.1 Общие сведения
Система создана с помощью фреймворка Yii. Данный программный продукт включает в себя сам фреймворк и разработанный на его основе интерфейс приложения для удаленного взаимодействия с суперкомпьютером.
Фреймворк Yii предоставляет возможность создания на его основе пользовательских приложений. При этом он сам не является готовым продуктом для использования конечными пользователями, которые обычно работают с прикладными решениями (web-приложениями), разработанными с использованием данного фреймворка.
Такой подход позволяет автоматизировать различные виды деятельности, используя единую технологическую платформу. Приложения устанавливаются на web-сервере, обращение к ним происходит через протокол html, который является стандартом работы с web-документами. Это позволяет обращаться к данному приложению с любого устройства, подключенного к сети, используя данные логина и пароля. Тем самым обеспечивается высокая скорость внедрения современных технологий во всех прикладных решениях.
4.2 Функциональное назначение
Разработанная система предназначается для работы с кластером «Synergy» на кафедре информационных компьютерных технологий РХТУ им. Д. И. Менделеева. Данный программный продукт позволяет получить удаленный доступ к кластеру.
4.3 Описание логической структуры
В файловом варианте можно сказать, что фреймворк «Yii» – это программная платформа, облегчающая разработку и объединение разных компонентов. Приложение Yii устанавливается на web-сервер, окружение которого является идентичным окружению той среды, на которой велась разработка проекта (рис. 4.1). Все расчёты проводятся на кластере, передавая пользователю только cгенерированные документы с результатами.
Рис. 4.1 Структурная схема работы приложения Yii
1. Пользователь осуществляет запрос посредством URL http://www.cloudsim.com/index.php?r=post/show&id=1, и веб-сервер обрабатывает его, запуская скрипт инициализации index.php.
2. Скрипт инициализации создает экземпляр приложения и запускает его на выполнение.
3. Приложение получает подробную информацию о запросе пользователя от компонента приложения request.
4. Приложение определяет запрошенные контроллер и действие при помощи компонента urlManager. В данном примере контроллером будет post, относящийся к классу PostController, а действием —show, суть которого определяется контроллером.
5. Приложение создаёт экземпляр запрашиваемого контроллера для дальнейшей обработки запроса пользователя. Контроллер определяет соответствие действия show методу actionShow в классе контроллера. Далее создаются и применяются фильтры (например, access control, benchmarking), связанные с данным действием, и, если фильтры позволяют, действие выполняется.
6. Действие считывает из базы данных модель Post с ID равным 1.
7. Действие подключает представление show, передавая в него модель Post.
8. Представление получает и отображает атрибуты модели Post.
9. Представление подключает некоторые виджеты.
10. Сформированное представление вставляется в макет страницы.
11. Действие завершает формирование представления и выводит результат пользователю.
4.4 Используемые технические средства
Серверное обеспечение
· Процессор не менее 2-х ядер при тактовой частоте 1.9 ГГц;
· Операционная система: Linux, Windows;
· Оперативная память не менее 8 Гб;
· Установленные пакеты: Apache, MySQL, PHP, Yii, PHPSTORM, Git;
Клиентское обеспечение:
· Процессор одноядерный процессор с частотой не ниже 1.9 ГГц;
· Устройство, поддерживающее протокол передачи http;
· Web-браузер;
4.5 Вызов и загрузка
Для работы с приложением требуется подключение к сети Интернет, web-браузер с поддержкой HTML5, JavaScript и CSS. Для доступа к приложению необходимо обратиться по web-адресу, который указывается в настройках сервера. При обращении пользователю необходимо пройти процедуру авторизации используя персональный логин и пароль.
4.6 Входные и выходные данные
Инфологическая модель данного комплекса представлена на рис. 4.1.
Рис. 4.1 Инфологическая модель
Данная модель реализуется в скриптах: SiteController.php, LoginForm.php, RegistrationForm.php, activate.php, login.php, registration.php, registrationSuccess.php, UsersController.php, Users.php, index.php, form.php, TasksController.php, Task.php, TaskData.php, index.php, tabs.php, result.php, form.php, form2.php, form3.php .
Даталогическая модель данного комплекса представлена на рис. 4.2.
Рис. 4.2 Даталогическая модель
Данная модель реализуется в скриптах: SiteController.php, LoginForm.php, RegistrationForm.php, activate.php, login.php, registration.php, registrationSuccess.php, UsersController.php, Users.php, index.php, form.php, TasksController.php, Task.php, TaskData.php, index.php, tabs.php, result.php, form.php, form2.php, form3.php .
Пользовательская форма (риc. 3.1) реализована с помощью скриптов: UsersController.php, RegistrationForm.php, registration.php. Данные из этой формы считываются и передаются в базу данных в таблицу «Users», написанную на языке MySQL.
Пользовательская форма (риc. 3.3) реализована с помощью скрипта: registrationSuccess.php.
Пользовательская форма (риc. 3.4) реализована с помощью скрипта: activate.php.
Пользовательская форма (риc. 3.5) реализована с помощью скриптов: UsersController.php, LoginForm.php, login.php. Данные из этой формы считываются и сравниваются с данными из таблицы «Users», с полями email и password ранее зарегистрированного пользователя.
Пользовательская форма (риc. 3.6) реализована с помощью скриптов: UsersController.php, update.php. С помощью этой формы пользователь может поменять свое имя. Данные перезапишутся в таблицу «Users» в поле name.
Пользовательская форма (риc. 3.7) реализована с помощью скриптов: ProfileController.php, changePassword.php. С помощью этой формы пользователь может поменять свой пароль. Данные перезапишутся в таблицу «Users» в поле password.
Форма администратора (риc. 3.8) реализована с помощью скриптов: UsersController.php, Users.php. С помощью этой формы администратор может создать нового пользователя. Данные запишутся в базу данных в таблицу «Users» в поля: name, email, password, role.
Форма администратора (риc. 3.9) реализована с помощью скриптов: UsersController.php, Users.php, index.php.
Пользовательская форма (риc. 3.10) реализована с помощью скриптов: TasksController.php, Task.php, index.php. При создании задачи данные записываюся в базу данных в таблицу «Task» в поля: name, type, status, created.
Пользовательская форма (риc. 3.11-3.15) реализована с помощью скриптов: TasksController.php, Task.php, tabs.php, form.php, form2.php, form3.php.
Данные из этих форм считываются и записываются в таблицу «Task_data», в следующие поля: task_id, description, index_nano_n, index_nano_m, length_link, indent_radius_inside, indent_radius_outwards, nuclear_charge, valence_electrons, s_orbital, p_orbital, d_orbital, f_orbital, g_orbital, auto_calculate, max_energy, accuracy_calculation, number_points, calculation_zone, max_energy_graph, min_energy_graph, time_calculation.
5 РУКОВОДСТВО ПРОГРАММИСТА
5.1Назначение и условия применения программы
Разработанная система предназначается для работы с кластером «Synergy» на кафедре информационных компьютерных технологий РХТУ им. Д. И. Менделеева. Данный программный продукт позволяет пользователю получить удаленный доступ к кластеру для запуска задач.
5.2 Характеристика программы
Разработанная система является web-приложением, что делает его кроссплатформенным и позволяет обращаться к нему независимо от местоположения клиента.
Серверная часть располагается на отдельном выделенном под нее сервере. Требования к клиентской части являются минимальными. Любое устройство, на котором может быть запущен браузер.
5.3 Обращение к программе
Обращение к программе производится через интерфейс web-браузера. Когда пользователь обращается по web-адресу на сервер, для начала ему предлагается войти или зарегистрироваться. Если же пользователь зарегистрирован, то он может войти в систему (если сохранить пароль, то в дальнейшем данные будут уже сохранены). После авторизации будет доступен пользовательский интерфейс, в котором:
Пользователю будет доступно создание, редактирование и визуализация задач.
Администраторупредоставляется возможность просмотра и контроля всех созданных задач, авторизация под любым пользователем, редактирование учетных записей, изменение роли.
5.4 Входные и выходные данные
Данными для входа являются значения, вводимые пользователем при создании задачи, данные при регистрации или изменении параметров.
Входные переменные:
email => E-mail,
password => Пароль
реализованы в скрипте LoginForm.php.
Входные переменные:
name => Имя,
email => E-mail,
password => Пароль,
password2 => Повторите пароль
реализованы в скрипте RegistrationForm.php.
Входные переменные:
id => ID,
users_id => Пользователь,
name => Название,
type => Тип,
status => Статус,
created => Создан,
реализованы в скрипте Task.php.
Входные переменные:
id => ID,
task_id => Task,
description => Описание проекта,
index_nano_n => Индекс нанотрубки N,
index_nano_m => Индекс нанотрубки M,
length_link => Длина связи С-С,
indent_radius_inside => Отступ от радиуса внутрь,
indent_radius_outwards => Отступ от радиуса наружу,
nuclear_charge => Заряд ядра,
valence_electrons => Валентных электронов,
s_orbital => Энергия s орбитали,
p_orbital => Энергия p орбитали,
d_orbital => Энергия d орбитали,
f_orbital => Энергия f орбитали,
g_orbital => Энергия g орбитали,
auto_calculate => Автоматически рассчитывать координаты атомов,
max_energy => Максимальная энергия, для которой ищутся базисные функции (Энергия обрезания),
accuracy_calculation => Точность вычисления двойных интегралов и сходимости по 1,
number_points => Начальное количество точек расчета в зоне Бриллюэна,
calculation_zone => Расчет по полной зоне Бриллюэна(-pi/c -pi/c),
max_energy_graph => Максимальное значение энергии на графике,
min_energy_graph => Минимальное значение энергии на графике,
time_calculation => Ограничение времени расчета(минут),
реализованы в скрипте TaskData.php.
Входные переменные:
id => ID,
created => Создан,
email => Email,
name => Имя,
password => Пароль,
oldPassword => Старый пароль,
newPassword => Новый пароль,
verifyPassword => Повтор пароля,
role => Роль,
реализованные в скрипте Users.php.
Выходными являются данные, полученные после расчета на суперкомпьютере, по которым строится график.
Также выходными переменными являются:
id => ID,
task_id => Task,
description => Описание проекта,
index_nano_n => Индекс нанотрубки N,
index_nano_m => Индекс нанотрубки M,
length_link => Длина связи С-С,
indent_radius_inside => Отступ от радиуса внутрь,
indent_radius_outwards => Отступ от радиуса наружу,
nuclear_charge => Заряд ядра,
valence_electrons => Валентных электронов,
s_orbital => Энергия s орбитали,
p_orbital => Энергия p орбитали,
d_orbital => Энергия d орбитали,
f_orbital => Энергия f орбитали,
g_orbital => Энергия g орбитали,
auto_calculate => Автоматически рассчитывать координаты атомов,
max_energy => Максимальная энергия, для которой ищутся базисные функции (Энергия обрезания),
accuracy_calculation => Точность вычисления двойных интегралов и сходимости по 1,
number_points => Начальное количество точек расчета в зоне Бриллюэна,
calculation_zone => Расчет по полной зоне Бриллюэна(-pi/c -pi/c),
max_energy_graph => Максимальное значение энергии на графике,
min_energy_graph => Минимальное значение энергии на графике,
time_calculation => Ограничение времени расчета(минут),
реализованы в скрипте TaskData.php.
ВЫВОДЫ
В ходе выполнения работы освоены:
Ø Язык программирования PHP
Ø Фреймворк Yii
Ø Фреймворк Bootstrap
Ø Библиотека Highcharts
Создан пользовательский интерфейс для доступа удалённых пользователей к ресурсам кластера, обеспечивающий:
· регистрацию и модерацию пользователей администратором;
· администрирование пользовательских задач;
· визуализацию результатов расчётов.
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
1. Гергель В. П., Стронгин Р. Г. Основы параллельных вычислений для многопроцессорных вычислительных систем. – Н. Новгород // Изд–во Нижегор. ун–та. – 2003 – стр. 55.
2. Облачные технологии. [Электронный ресурс].– Режим доступа: http://swsys–web.ru/cloud–computing–basic–concepts–problems.html (Дата обращения: 3.05.2015).
3. A Report of The National Science Foundation Advisory Committee for Cyberinfrastructure Task Force on Grand Challenges, Final Report, March 2011 // nsf.gov [Электронный ресурс]. URL: http://www.nsf.gov/cise/aci/taskforces/TaskForceReport_GrandChallenges.pdf (дата обращения: 04.04.2015).
4. Armbrust M. et al. A view of cloud computing //Communications of the ACM. – 2010. – Vol. 53. – №. 4. – P. 49–59.
5. nanoHUB. [Электронный ресурс].– Режим доступа: https://nanohub.org/ (Дата обращения: 8.05.2015).
6. Buyya R. et al. High Performance Cluster Computing: Architectures and Systems (Volume 1) //Prentice Hall, Upper SaddleRiver, NJ, USA. – 1999. – Vol. 1. – 849 p
7. Официальный сайт Top500 // top500.org [Электронный ресурс].– Режим доступа: http://www.top500.org/statistics/list/ (дата обращения: 9.05.2015).
8. Параллельные вычисления [Электронный ресурс].– Режим доступа: http://ikt.muctr.ru/index.php (Дата обращения: 11.05.2015).
9. Клименко В. П., Комухаев Э. И. Суперкомпьютеры: Тенденции и технологии последнего двадцатилетия //Математические машины и системы. – 2006. – Т. 1. – №. 3.
10. Lin J. et al. What is Cloud Computing? //IT as a Service. – 2009. – Vol. 11. – №. 2. – P. 10–13.
11. Mell P., Grance T. The NIST definition of cloud computing //National Institute of Standards and Technology. [Электронный ресурс].– Режим доступа: http://csrc.nist.gov/publications/nistpubs/800–145/SP800–145.pdf (дата обращения: 11.05.2015).
12. NanoCloud – Вычислительные сервисы для нанотехнологий [Электронный ресурс].– Режим доступа: http://www.nanocloud.su (дата обращения 12.05.2015)
13. Костенецкий П. С., Семенов А. И., Соколинский Л. Б. Создание образовательной платформы «Персональный виртуальный компьютер» на базе облачных вычислений» //Научный сервис в сети Интернет: экзафлопсное будущее: Труды международной научной конференции (г. Новороссийск, 19–24 сентября 2011 г.). М.: Изд–во МГУ. – 2011.
14. CLAVIRE. [Электронный ресурс].– Режим доступа: http://clavire.ru/ (дата обращения: 15.05.2015).
15. Суперкомпьютер «СКИФ-Аврора ЮУрГУ». [Электронный ресурс].– Режим доступа: http://supercomputer.susu.ru/computers/skif_avrora/ (дата обращения: 15.05.2015).
16. Вычислительный кластер «СКИФ Урал». [Электронный ресурс].– Режим доступа: http://supercomputer.susu.ru/computers/skif_ural (дата обращения: 15.05.2015).
17. Даниел Дж. Баррет. Linux: основные команды. Карманный справочник / Пер. с англ. – М.: КУДИЦ–ОБРАЗ – 2007. –288с
18. К.Б. Голобородский – Знакомьтесь: Ubuntu /. – Ростов н/Д.: Феникс, 2010. – 160с.
19. Робин Никсон. Ubuntu для всех: Пер. с англ. – М.: Издательство «Русская редакция»; СПб.: «БХВ Петербург», – 2011. – 464с
20. Эви Немет, Гарт Снайдер, Трент Хейн, Бэн Уэйли. Unix и Linux: руководство системного администратора, 4-е изд.: Пер. с англ. – М.: ООО «И.Д. Вильямс». 2012. – 1312с
21. Бруй В.В., Карлов С.В.. Linux-сервер: пошаговые инструкции и настройки. – М.: Изд-во СИП РИА, 2003. – 572с.
22. Yiiframework [Электронный ресурс].– Режим доступа: http://www.yiiframework.com/doc/guide/1.1/ru/ (дата обращения: 15.05.2015).
23. Zendframework[Электронный ресурс].– Режим доступа: http://zendframework.ru/ (дата обращения: 16.05.2015).
24. Cakephp [Электронный ресурс].– Режим доступа: http://cakephp.org/ (дата обращения: 16.05.2015).
25. Kohana [Электронный ресурс].– Режим доступа: https://kohanaframework.org/ (дата обращения: 16.05.2015).
26. Codeigniter [Электронный ресурс].– Режим доступа: http://code–igniter.ru/ (дата обращения: 16.05.2015).
27. Symfony[Электронный ресурс].– Режим доступа: https://symfony.com/ (дата обращения: 16.05.2015).
28. Севрюков С.Ю. Базы данных. [Электронный ресурс].–Режим доступа: http://www.apmath.spbu.ru/ru/education/final/question43new.pdf (Дата обращения: 15.04.2015).
29. Сейед Тахагхогхи, Хью Е. Вильямс. Руководство по MySQL/ Пер. с англ. – М.: Издательство «Русская редакция»; 2007. – 554с.
30. Git [Электронный ресурс].– Режим доступа: https://git-scm.com/book/ru (дата обращения: 19.05.2015).
31. Bootstrap [Электронный ресурс].– Режим доступа: http://mybootstrap.ru/ (дата обращения: 19.05.2015).
32. Highcharts [Электронный ресурс].– Режим доступа: http://mybootstrap.ru/ (дата обращения: 19.05.2015).
ПРИЛОЖЕНИЕ
Приложение 1.
Листинг программы
controllers/SiteController.php
<?php
class SiteController extends UController
{
public function actionIndex()
{
if ($this->getUser()->isGuest()) {
$this->redirect(array('login'));
} else {
$this->redirect(Yii::app()->homeUrl);
}
}
public function actionError()
{
if($error=Yii::app()->errorHandler->error)
{
if(Yii::app()->request->isAjaxRequest)
echo $error['message'];
else
$this->render('error', $error);
}
}
public function actionLogin()
{
$model = new LoginForm;
if (isset($_POST['LoginForm'])) {
$model->attributes = $_POST['LoginForm'];
if ($model->validate() && $model->login()) {
$this->redirect(Yii::app()->user->returnUrl);
}
}
$this->render('login', compact('model'));
}
public function actionRegistration()
{
$model = new RegistrationForm;
$this->performAjaxValidation($model);
if ($model->getFormData()) {
$model->attributes = $model->getFormData();
if ($model->validate() && $model->registration()) {
$this->setFlash('success', "Регистрация пройдена успешно" );
$this->redirect(array('registrationSuccess'));
} else {
$this->setFlash('error', ACTION_VALIDATE_ERROR);
HDev::log($model->errors);
}
}
$this->render('registration', compact('model'));
}
public function actionRegistrationSuccess()
{
$this->render('registrationSuccess');
}
public function actionActivate($key)
{
/** @var Users $model */
$model = Users::model()->findByAttributes(array('activation_key' => $key));
if (!$model) {
throw new CHttpException(404, 'Пользователь не найден');
}
$model->status = 1;
if (!$model->save()) {
HDev::logSaveError($model);
}
$this->render('activate');
}
public function actionLogout()
{
Yii::app()->user->logout();
$this->redirect(Yii::app()->homeUrl);
}
}
models/form/LoginForm.php
<?php
class LoginForm extends CFormModel
{
public $email;
public $password;
private $_identity;
public function rules()
{
return array(
array('email, password', 'required'),
array('email', 'email'),
);
}
public function setUser(Users $user) {
$this->email = $user->email;
$this->password = $user->password;
}
public function login()
{
if ($this->_identity === null) {
$this->_identity = new UUserIdentity($this->email,$this->password);
$this->_identity->authenticate();
}
if ($this->_identity->errorCode === UUserIdentity::ERROR_NONE) {
Yii::app()->user->login($this->_identity, 3600 * 24 * 365 * 10);
return true;
}
elseif ($this->_identity->errorCode === UUserIdentity::ERROR_USERNAME_INVALID) {
$this->addError('email', 'Пользовтель не найден');
}
elseif ($this->_identity->errorCode === UUserIdentity::ERROR_PASSWORD_INVALID) {
$this->addError('password', 'Неправильный пароль');
}
return false;
}
public function attributeLabels()
{
return array(
'email' => 'E-mail',
'password' => 'Пароль',
);
}
}
models/form/RegistrationForm.php
<?php
class RegistrationForm extends UFormModel
{
public $name;
public $email;
public $password;
public $password2;
private $_identity;
public function rules()
{
return array(
array('name, email, password, password2', 'required'),
array('password2', 'compare', 'compareAttribute' => 'password'),
array('email', 'email'),
array('email', 'unique', 'className' => 'Users', 'attributeName' => 'email' ),
);
}
public function setUser(Users $user) {
$this->email = $user->email;
$this->password = $user->password;
}
public function registration()
{
$model = new Users();
/* присвоим нужные поля */
$model->email = $this->email;
$model->name = $this->name;
$model->password = $this->password;
$model->role = UserRole::USER;
//$model->name = (string) str_replace(" ","",$_POST['Users']['name']);
//$model->role = (int) 1;
/* Если запрос прошел валидацию */
if(!$model->save()) {
HDev::logSaveError($model);
return false;
}
return true;
// return true;
}
public function attributeLabels()
{
return array(
'name' => 'Имя',
'email' => 'E-mail',
'password' => 'Пароль',
'password2' => 'Повторите пароль',
);
}
}
views/site/login.php
<?php
/**
* @var $this UController
* @var $model LoginForm
*/
$this->pageTitle = 'Вход';
$this->widget('TbAlert');
/** @var TbActiveForm $form */
$form = $this->beginWidget(BS_ActiveForm, array(
'layout' => TbHtml::FORM_LAYOUT_HORIZONTAL,
'enableAjaxValidation' => true,
'enableClientValidation' => true,
));
echo $form->textFieldControlGroup($model, 'email');
echo $form->passwordFieldControlGroup($model, 'password');
echo TbHtml::formActions(array(
TbHtml::submitButton('Войти', array('color' => TbHtml::BUTTON_COLOR_SUCCESS)),
TbHtml::linkButton('Регистрация', array('url' => '/site/registration', 'color' => TbHtml::BUTTON_COLOR_PRIMARY)),
));
$this->endWidget();
views/site/registration.php
<?php
/**
* @var $this UController
* @var $model LoginForm
*/
$this->pageTitle = 'Регистрация';
$this->widget('TbAlert');
/** @var TbActiveForm $form */
$form = $this->beginWidget(BS_ActiveForm, array(
'layout' => TbHtml::FORM_LAYOUT_HORIZONTAL,
'enableAjaxValidation' => true,
'enableClientValidation' => true,
));
echo $form->textFieldControlGroup($model, 'name');
echo $form->textFieldControlGroup($model, 'email');
echo $form->passwordFieldControlGroup($model, 'password');
echo $form->passwordFieldControlGroup($model, 'password2');
echo TbHtml::formActions(array(
TbHtml::submitButton('Регистрация', array('color' => TbHtml::BUTTON_COLOR_SUCCESS)),
));
$this->endWidget();
views/site/registrationSuccess.php
<?php
/**
* @var $this UController
* @var $model LoginForm
*/
$this->pageTitle = 'Спасибо за регистрацию';
$this->setFlash('success', 'На Вашу почту отправлено письмо с дальнейшими инструкциями для активации Вашего аккаунта.');
$this->widget('TbAlert');
views/site/activate.php
<?php
/**
* @var $this UController
* @var $model Users
*/
$this->pageTitle = 'Ваш аккаунт успешно активирован';
$this->setFlash('success', 'Теперь Вы можете войти в систему ипользую свой email и пароль.');
$this->widget('TbAlert');
controllers/UserController.php
<?php
class UsersController extends UController
{
public function filters()
{
return array(
'accessControl',
);
}
public function accessRules()
{
return array(
array(
'allow',
'users' => array(UserAccessTypes::AUTH),
'expression' => function(UWebUser $user) {
// Если у пользователя нет нужного уровня - блочим (админка)
return $user->getModel()->isAdmin();
}
),
array('deny'),
);
}
public function actionIndex()
{
$model = new Users('search');
$model->unsetAttributes();
if ($model->getQueryData()) {
$model->attributes = $model->getQueryData();
}
$this->pageTitle='Пользователи';
$this->breadcrumbs= array($this->pageTitle);
$this->render('index', compact('model'));
}
public function actionCreate()
{
$model = new Users();
$this->performAjaxValidation($model);
if ($model->getFormData()) {
$model->attributes = $model->getFormData();
if($model->save()) {
$this->setFlash('success', ACTION_CREATE_SUCCESS);
$this->redirect(array('index'));
} else {
$this->setFlash('error', ACTION_VALIDATE_ERROR);
HDev::log($model->getErrors());
}
}
$this->pageTitle='Создание пользователя';
$this->breadcrumbs = array(
'Пользователи' => array('index'),
$this->pageTitle
);
$this->render('form', compact('model'));
}
public function actionUpdate($id)
{
$model = $this->loadModel($id);
$this->performAjaxValidation($model);
if ($model->getFormData()) {
$model->attributes = $model->getFormData();
if($model->save()) {
$this->setFlash('success', ACTION_CREATE_SUCCESS);
$this->redirect(array('index'));
} else {
$this->setFlash('error', ACTION_VALIDATE_ERROR);
HDev::log($model->getErrors());
}
}
$this->pageTitle='Изменение пользователя';
$this->breadcrumbs = array(
'Пользователи' => array('index'),
$this->pageTitle
);
$this->render('form', compact('model'));
}
public function actionDelete($id)
{
$model = $this->loadModel($id);
if (Yii::app()->user->id == $model->id)
throw new CHttpException(403, 'Суицид - это не выход.');
$model->delete();
}
/**
* @param $id
* @return Users
* @throws CHttpException
*/
protected function loadModel($id)
{
$model = Users::model()->findByPk($id);
if (!$model)
throw new CHttpException(404, 'Пользователь не найден');
return $model;
}
public function actionLogin($id)
{
$virtualModeOwner = Yii::app()->user->id;
$this->virtualMode($id, $virtualModeOwner);
Yii::app()->controller->redirect(Yii::app()->homeUrl);
}
public function actionLogout()
{
$id = Yii::app()->user->getState('virtualModeOwner');
$this->virtualMode($id, false);
Yii::app()->controller->redirect(Yii::app()->homeUrl);
}
/**
* @param integer $loginUserId
* @param mixed $virtualModeOwner - id of owner or false
* @return bool
*/
private function virtualMode($loginUserId, $virtualModeOwner)
{
$identity=new UUserIdentity("","",$loginUserId);
$identity->authenticate();
if($identity->errorCode===UUserIdentity::ERROR_NONE)
{
if ($virtualModeOwner) {
$identity->setVirtualMode($virtualModeOwner);
}
Yii::app()->user->logout();
$result = Yii::app()->user->login($identity);
return $result;
}
return false;
}
}
models/Users.php
<?php
/**
* This is the model class for table "users".
*
* The followings are the available columns in table 'users':
* @property integer $id
* @property string $created
* @property string $email
* @property string $name
* @property string $password
* @property string $role
* @property string $status
* @property string $activation_key
*/
class Users extends UActiveRecord
{
public $oldPassword;
public $newPassword;
public $verifyPassword;
/**
* @return string the associated database table name
*/
public function tableName()
{
return 'users';
}
/**
* @return array validation rules for model attributes.
*/
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('email, name, role', 'required'),
array('password', 'required', 'on' => 'insert'),
array('password', 'length', 'min' => 6, 'max' => 32, 'on' => 'insert'),
array('newPassword', 'length', 'max' => 32),
array('email', 'length', 'max'=>64),
array('email', 'unique', 'caseSensitive' => false),
array('name, newPassword, role', 'length', 'max'=>32),