close

Вход

Забыли?

вход по аккаунту

?

Отчёт

код для вставкиСкачать
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ПРИДНЕСТРОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИМ. Т.Г. ШЕВЧЕНКО
РЫБНИЦКИЙ ФИЛИАЛ
Отчет по производственно-технологической практике
на тему "Написание модуля автоматического создания схем БД для проекта orcl.rfpgu.ru"
(место прохождения: ОАО Молдавский металлургический завод, УАИТиС, бюро программирования и сопровождения задач АСУ "Персонал")
Руководитель практики от предприятия: Охонько И.И.
Руководитель практики от вуза:
ст.преподаватель Глазов А. Б.
Выполнил: студент V курса
специальности "ПОВТ и АС"
Свириденко Д.Ю. г.Рыбница
2013 г.
Оглавление
ВВЕДЕНИЕ............................................................................................................3
ГЛАВА 1. СТРУКТУРА ПРЕДПРИЯТИЯ4
1.1. Общие положения4
1.2. Задачи выполняемые УАИТиС7
1.3. Функции отдела УАИТиС8
ГЛАВА 2. ЗАДАЧИ ПРОИЗВОДСТВЕННОЙ ПРАКТИКИ14
2.1. Задачи выполняемые во время практики14
2.2. Oracle Database 10g Express Edition15
2.3. Локальный сервер apache15
2.4. CodeIgniter16
ГЛАВА 3. ОПИСАНИЕ ПРОГРАММНОГО ПРОДУКТА20
ЗАКЛЮЧЕНИЕ.......................................................................................................25
СПИСОК ЛИТЕРАТУРЫ..........................................................................................26
ПРИЛОЖЕНИЕ.......................................................................................................27
Введение
Проходил практику на ОАО "Молдавский Металлургический завод" в отделе УАИТиС, в бюро АСУ "Персонал".
Целью данной производственно-технологической практики является создание модуля, реализующего автоматическое создание схем БД для пользователей в СУБД Oracle на основе схемы hr.
В соответствии с указанной выше целью поставлены следующие основные задачи:
1. Написать процедуру автоматического создания схемы для пользователей в СУБД Oracle на основе схемы hr.
2. Создать возможность оставлять заявку на регистрацию в проекте.
3. Создать графический интерфейс для просмотра всех данных о гостях.
4. Реализовать функцию регистрации нового пользователя на основе его заявки.
5. Реализовать функцию для автоматического создания схемы в БД для зарегистрированных пользователей.
ГЛАВА 1. СТРУКТУРА ПРЕДПРИЯТИЯ
1.1. Общие положения
Управление автоматизации, информационных технологий и связи (УАИТиС) является самостоятельным структурным подразделением завода, подчиняется помощнику генерального директора и функционально техническому директору в области систем связи, сетей передачи данных, компьютерного оборудования и систем АСУТП в рамках настоящего положения.
Структура и штаты УАИТиС согласовываются с помощником генерального директора и утверждаются генеральным директором. Распределение обязанностей между работниками управления осуществляет начальник УАИТиС в соответствии с настоящим положением, должностными инструкциями и распоряжениями о разграничении обязанностей. Руководителем УАИТиС является начальник УАИТиС, который назначается, освобождается от занимаемой должности приказом генерального директора по представлению помощника (советника) генерального директора.
На должность начальника УАИТиС назначается лицо с высшим профессиональным (инженерно - техническим) образованием и практическим стажем работы не менее 5 лет.
Начальник УАИТиС должен знать:
* законодательные и нормативные правовые акты, методические и нормативные материалы, касательно автоматизации и информационных технологий, эксплуатации и обслуживания средств вычислительной техники, коммуникаций и связи;
* рынок информационных услуг;
* профиль, специализацию и перспективы развития предприятия;
* средства сбора, передачи и обработки информации;
* технические характеристики, конструктивные особенности, назначение и режим работы основного и комплектующего оборудования, правила его технической эксплуатации;
* технологию механизированной и автоматизированной обработки информации и проведения вычислительных работ;
* сетевые технологии применения средств вычислительной техники и телекоммуникаций;
* виды технических носителей информации, правила их хранения и эксплуатации;
* основы проектирования автоматизированной обработки информации и программирования;
* порядок разработки планов работы УАИТиС, графиков работы оборудования, регламентов решения задач;
* организацию разработки нормативно-методической базы информационно-вычислительных систем;
* перспективы и направления развития средств вычислительной техники и средств связи;
* действующие положения об оплате труда и формах материального стимулирования работников;
* методы расчета объемов выполняемых работ;
* организацию ремонтного обслуживания оборудования;
* порядок заключения договоров по оказанию информационных услуг и оформления технической документации;
* передовой отечественный и зарубежный опыт использования средств вычислительной техники, коммуникаций и связи;
* технологию производства продукции предприятия, производственные и функциональные связи между его подразделениями;
* порядок разработки и внедрения проектов автоматизации, информационных технологий и связи и ее подсистем;
* порядок постановки задач, и их алгоритмизации;
* порядок разработки и оформление технической документации;
* основы трудового законодательства;
* основы заводской системы управления качеством;
* правила и нормы охраны труда.
В своей работе начальник УАИТиС руководствуется:
* действующим законодательством;
* нормативными и организационно - распорядительными документами;
* документацией заводской системы управления качеством; * настоящим Положением и другими регламентирующими документами;
* правилами внутреннего трудового распорядка, охраны труда и промсанитарии.
Начальник УАИТиС имеет право:
* представлять в установленном порядке завод в других организациях и учреждениях, в пределах своей компетенции;
* вносить предложения по совершенствованию управленческой деятельности, технологии управления агрегатами основного и вспомогательного производства и существующих систем АСУТП;
* Запрашивать и получать от руководителей служб и структурных подразделений завода необходимые информационные материалы, для выполнения функций, предусмотренных настоящим положением; * требовать согласования с УАИТиС всех изменений, вносимых в технические, плановые и учётные документы, участвующие в заводском документообороте; * участвовать в выборе поставщика средств вычислительной техники, специализированного программного обеспечения, средств и систем связи;
* представлять руководству завода предложения по совершенствованию работы УАИТиС и о применении мер поощрения и взыскания к работникам управления.
Начальник УАИТиС несёт всю полноту ответственности за качество и своевременность выполнения возложенных настоящим положением на управление задач и функций. Степень ответственности других работников устанавливается соответствующими должностными инструкциями и распоряжениями начальника управления.
1.2. Задачи выполняемые УАИТиС
Задачи, выполняемые отделом УАИТиС, включают в себя следующее:
* разработка концептуальных направлений по развитию и модернизации систем управления технологическими процессами, внедрение наиболее эффективных средств вычислительной техники и средств связи, информационных сетей и передовых методов в области управления технологическими процессами;
* развитие и модернизация информационных технологий, телекоммуникационных систем, эксплуатируемых на заводе в соответствии с мировыми тенденциями развития вычислительной техники, информационных и телекоммуникационных технологий;
* разработка предложений по внедрению перспективных технологий и систем связи, снижению затрат на эксплуатацию и ремонт систем связи;
* обеспечение структурных подразделений завода всеми необходимыми видами связи на основе постоянного повышения их технического уровня;
* анализ эффективности используемых телекоммуникационных систем, разработка и проведение мероприятий по оптимизации затрат на услуги связи;
* разработка, внедрение и сопровождение программного обеспечения и информационных систем, систем управления технологическими процессами и создание эргономического человеко-машинного интерфейса для их визуализации;
* проведение технического обслуживания, ремонта и наладки технологических и информационных сетей, средств вычислительной техники и программно-технических комплексов, средств и систем связи для управления производством и технологическими процессами. 1.3. Функции отдела УАИТиС
В области автоматизации и информационных технологий отдел УАИТиС включает в себя следующие функции:
* проведение анализа информационных систем, эксплуатируемых на заводе и выбор направления их развития в соответствии с мировыми тенденциями развития вычислительной техники и информационных технологий;
* обследование объектов автоматизации, проведение анализа существующих автоматизированных систем управления технологическим процессом (АСУТП), систем визуализации, программного обеспечения, внедрение и сопровождение модернизируемых АСУТП, повышение их надёжности;
* участие в разработке технических и рабочих проектов на вновь строящиеся и реконструируемые объекты в части внедрения АСУТП;
* разработка структуры технических и программных средств, проектирование систем автоматизации, выполнение работ по программированию, настройке системного и прикладного программного обеспечения и сдаче его в промышленную эксплуатацию;
* проведение экспертного анализа всех проектов реконструкции технологического оборудования в части выбора уровней автоматизации и управления, вычислительной техники, систем диспетчерского контроля и сбора данных , программного обеспечения (в том числе в части базовой автоматизации);
* привлечение к разработке и внедрению на заводе автоматизированных систем специализированных научно-исследовательских, проектно-конструкторских организаций, других подразделений завода к участию в решении вопросов, касающихся проектирования и внедрения АСУ;
* обеспечение соответствия систем АСУТП фактическим потребностям производства и согласование вопросов с технологическим персоналом завода;
* участие в работе комиссий по приёму и сдаче в эксплуатацию технических и программных средств АСУТП и технологических агрегатов, в состав которых входят средства АСУТП;
* оперативный ремонт и наладка средств вычислительной техники, оборудования технологических и информационных сетей, систем АСУТП, в соответствии с утверждёнными планами и графиками;
* обеспечение качественной разработки, внедрения и сопровождения прикладных программных комплексов в структурных подразделениях завода и общесистемного программного обеспечения;
* участие в разработке и внедрении заводских норм, процедур и стандартов на разработку систем и задач в области информационных технологий;
* разработка производственно-технологических инструкций для пользователей, планов обучения персонала подразделений завода работе с ПТК (проведение инструктажа о порядке ввода первичных документов, подлежащих машинной обработке, правильной интерпретации полученных в результате обработки данных, действиям в нештатных ситуациях);
* разработка, внедрение и обеспечение надзора за функционированием: > программного обеспечения единой информационной среды функционирования подразделений завода;
> программного обеспечения для управления и визуализации технологических процессов;
> программного обеспечения мониторинга и управления серверным и сетевым оборудованием;
> технологических и информационных Web-серверов;
> средств передачи данных из систем автоматики, технологических агрегатов в системы АСУТП в соответствии с протоколами разграничения зон ответственности.
* проектирование, монтаж, эксплуатация и обеспечение надзора за функционированием, рациональным использованием и содержанием в надлежащем состоянии технологических и информационных сетей;
* подключение пользователей к технологическим и информационным сетям, сетевым ресурсам и определение прав доступа к ним;
* обеспечение безопасности и сохранности служебной информации, сетей завода от несанкционированного доступа, выполнение антивирусных мероприятий, разработка и выполнение мероприятий по обеспечению их бесперебойной работы;
* координация работ подразделений при разработке, внедрении и эксплуатации информационных систем. * предконтрактная проработка договоров в соответствии с требованиями заводской системы управления качеством, "Положением о порядке ведения договорной работы на ММЗ" и контроль исполнения договоров в части своевременного приобретения вычислительной техники, сетевого оборудования, оборудования систем связи, По и оказания услуг;
* составление графиков проведения профилактических работ и ликвидации аварийных ситуаций на технических и программных средствах завода;
* проведение планово-предупредительных ремонтов в установленные сроки с соблюдением правил техники безопасности;
* разработка и реализация предложений по совершенствованию работы лабораторий, обучению специалистов, повышению квалификации рабочих;
* изучение отечественного и зарубежного опыта по развитию технологий и подготовка предложений по совершенствованию действующих;
* ведение учёта и отчётности по управлению УАИТиС в соответствии с утверждёнными положениями и инструкциями;
* экономное расходование материалов и других ресурсов;
* организация работ по ремонту и техническому обслуживанию оборудования, выполняемых сторонними организациями;
* составление и предоставление отчётов, справок по всем вопросам, связанным с деятельностью УАИТиС;
* своевременное изучение и ведение рабочей документации в соответствии с требованиями заводской системы управления качеством;
* обеспечение работников спецодеждой, средствами защиты, моющими средствами, необходимыми бытовыми условиями, согласно действующим нормам;
* проведение мероприятий, предупреждающих аварии и несчастные случаи;
* проведение первичных и повторных инструктажей по правилам техники безопасности и пожарной безопасности в установленные правилами сроки;
* соблюдение правил внутреннего трудового распорядка, охраны труда, промсанитарии и пожарной безопасности. В области систем связи отдел УАИТиС включает в себя следующие функции:
* организация работы и контроль в процессе эксплуатации за качеством, надёжностью и бесперебойностью всех видов связи;
* проведение анализа работы систем связи, эксплуатируемых на заводе, выбор направления их развития в соответствии с мировыми тенденциями развития телекоммуникационных технологий;
* участие в разработке технических и рабочих проектов на вновь строящиеся и реконструируемые объекты в части внедрения систем связи, подборе комплектации и установке оборудования связи в структурных подразделениях завода, их модернизации и участие в работе комиссий по приёму и сдаче их в эксплуатацию;
* обеспечение соответствия систем связи фактическим потребностям производства и согласование вопросов с технологическим персоналом завода;
* проведение маркетинговых исследований рынка услуг связи, анализ работы существующих систем, выполнение мероприятий по их модернизации и снижению затрат;
* проектирование, монтаж и обеспечение надзора за функционированием, рациональным использованием и содержанием в надлежащем состоянии средств и систем связи;
* выполнение заявок структурных подразделений по увеличению, переоборудованию средств связи в служебных, производственных и бытовых помещениях завода, в пределах установленных лимитов;
* надзор за функционированием и использованием систем и сетей связи, в соответствии с утвержденными правилами.
ГЛАВА 2. ЗАДАЧИ ПРОИЗВОДСТВЕННОЙ ПРАКТИКИ
2.1. Задачи выполняемые во время практики
Во время прохождения производственной технологической практики мною была изучена структура ОАО ММЗ. Был ознакомлен с работой различных отделов предприятия. Было предоставлено рабочее место и поставлены следующие задачи:
* Настройка необходимого для работы ПО.
* Изучить framework CodeIgniter 2.
* Изучить структуру программного кода проекта orcl.rfpgu.ru.
* Изучить структуру базы данных проекта orcl.rfpgu.ru.
* Изучить необходимые для проекта особенности языка PL/SQL. * Написать процедуру автоматического создания схемы для пользователей в СУБД Oracle на основе схемы hr.
* Создать возможность посетителям оставлять заявку для регистрации в проекте.
* Создать графический интерфейс, где будут отображаться все данные о подавших заявки "гостях" проекта.
* Реализовать функцию регистрации нового пользователя на основе его заявки.
* Реализовать функцию для автоматического создания схемы в БД для зарегистрированных пользователей.
Для реализации поставленной задачи был выбран framework CodeIgniter и СУБД Oracle. Связывающим элементом является локальный сервер Apache.
2.2. Oracle Database 10g Express Edition
Oracle 10g Express Edition http://www.compress.ru/Archive/CP/2006/soft/Oracle/ (XE) - бесплатная версия СУБД Oracle.
Версия XE содержит ряд ограничений:
* поддерживается база данных размером до 4 Гбайт;
* на одном компьютере может быть запущен только один экземпляр базы Oracle XE;
* при наличии на сервере нескольких процессоров Oracle XE использует только один из них;
* Oracle XE использует не более 1 Гбайт независимо от объема доступной оперативной памяти.
Несмотря на данные ограничения, на основе Oracle XE можно создавать приложения для решения широкого круга задач. А если по мере роста базы данных и увеличения количества пользователей Oracle XE перестанет справляться с поставленными задачами или будeт достигнут предельный для Oracle XE размер базы, то превести задачи на одну из платных версий Oracle не составит особого труда.
В настоящее время существуют версии Oracle XE для платформ Linux (Debian, Mandriva, Novell, RedHat и Ubuntu) и Windows.
2.3. Локальный сервер apache
Apache - самый популярный веб-сервер в мире. Он является кроссплатформенным ПО, поддерживает операционные системы: Linux, BSD, Mac OS, Microsoft Windows, Novell NetWare, BeOS.
Основными достоинствами Apache считаются надёжность и гибкость конфигурации. Существует множество модулей, добавляющих к Apache поддержку различных языков программирования и систем разработки.
К ним относятся:
* PHP (mod_php).
* Python (mod python, mod wsgi).
* Ruby (apache-ruby).
* Perl (mod perl).
* ASP (apache-asp).
* Tcl (rivet)
Кроме того, Apache поддерживает механизмы CGI и FastCGI, что позволяет исполнять программы на практически всех языках программирования, в том числе C, C++, Lua, sh, Java.
2.4. CodeIgniter
CodeIgniter - популярный Modelviewcontroller (MVC) фреймворк с открытым исходным кодом, написанный на языке программирования PHP, для разработки полноценных веб-систем и приложений.
Концепция MVC позволяет разделить данные, представление и обработку действий пользователя на три отдельных компонента:
* Модель. Модель предоставляет знания: данные и методы работы с этими данными, реагирует на запросы, изменяя своё состояние. Не содержит информации, как эти знания можно визуализировать.
* Представление. Оно отвечает за отображение информации (визуализацию). Часто в качестве представления выступает форма (окно) с графическими элементами.
* Контроллер. Он обеспечивает связь между пользователем и системой: контролирует ввод данных пользователем и использует модель и представление для реализации необходимой реакции.
Важно отметить, что как представление, так и контроллер зависят от модели. Однако модель не зависит ни от представления, ни от контроллера. Тем самым достигается назначение такого разделения: оно позволяет строить модель независимо от визуального представления, а также создавать несколько различных представлений для одной модели.
Рис. 1 Структура MVC
Особенности:
* CodeIgniter отличает простота, которая достигается благодаря следующим факторам:
* Качественная и полная документация с примерами, а также большое сообщество и Wiki
* Множество видео уроков, которые можно найти как на официальном сайте, так и на сторонних ресурсах
* Фреймворк дает свободу программисту, не создавая каких-либо структурных ограничений и конвенций
* Программисту не требуется учиться пользоваться генераторами кода из командной строки
* CodeIgniter работает практически на любом хостинговом плане, который имеет поддержку PHP версии 5.1 и выше
* CodeIgniter считается одним из быстрых и не требовательных к ресурсам фреймворков
* Малый размер дистрибутива (размер версии 2.1.1 составляет всего 2.2 Мб)
* Фреймворк позволяет отказаться от моделей (несмотря на то, что это не приветсвуется и не является хорошей практикой)
* Документация CodeIgniter пропагандирует "толстые" контроллеры и "тонкие" модели. Валидация и построение бизнес-логики происходят в основном в контроллере. Несмотря на это, фреймворк дает свободу разработчику, поэтому он может самостоятельно выбрать подход к разработке приложения
Возможности:
* Поддержка баз данных MySQL, PostgreSQL, MSSQL, SQLite, Oracle.
* Поддержка псевдо-ActiveRecord, который по большей части повторяет синтаксис языка SQL
* Легко расширяемая система за счет возможности использования сторонних и самописных библиотек, а также дополнения или переопределения существующих.
* Поддержка как сегментированных ЧПУ, так и обычных URL-ов с передачей параметров.
* Фреймворк содержит в себе множество необходимых библиотек, которые создают функционал для работы с файлами, отправки электронных писем, валидации форм, поддержки сессий, работы с изображениями и так далее.
* Обладает возможностью кеширования на стороне сервера SQL-запросов и генерируемых html-страниц. С версии 2.0 для кеширования могут использоваться XCache или APC.
* В 2011 году появился менеджер пакетов под названием Sparks, который позволяет легко установить сторонние библиотеки с помощью командной строки.
* В 2011 году появилось дополнение, которое делает возможным поддержку миграций.
* Поддержка модульности (HMVC) с помощью дополнений
* Немотря на отсутствие ORM в стандартом пакете, существует возможность использования PHP ActiveRecord, Doctrine, Propel и некоторых других ORM после небольших изменений или дополнений в исходном коде фреймворка.
По умолчанию CodeIgniter не использует шаблонизаторы, но есть возможность использовать его собственный или один из альтернативных шаблонизаторов (Smarty,TinyButStrong).
ГЛАВА 3. ОПИСАНИЕ ПРОГРАММНОГО ПРОДУКТА
Исходя из поставленных задач, было выполнено следующее:
1. Создана возможность оставлять заявку на регистрацию в проекте.
Рис. 2 Форма подачи заявки на регистрацию.
Посетитель обязан ввести все поля, на каждое из которых стоит своя особая проверка. После того как введена почта и Ф.И.О, посетитель должен указать почту реферала, то есть почту уже зарегистрированного в проекте пользователя. Последним этапом заполнения формы является ввод каптчи, где программой генерируется случайная строка из 8 символов с рандомным углом наклона.
После того как все поля заполнены, программа выдаст ошибку, если какое-то поле введено неверно, либо оповестит об успешной подаче заявки:
Рис. 3 Страница с оповещением об успешной отправке заявки.
2. Создан графический интерфейс для просмотра всех данных о гостях:
Рис. 4 Страница с отображением всех данных "гостей"
В пункте меню "Гости" выводится порядковый номер гостя, его Ф.И.О, почта, id реферала и дата заявки. Также отображаются 3 кнопки:
"Добавить выделенных", "Удалить выделенных", "Все" и 2 иконки с функциями добавления и удаления. Подробнее о функциях данных элементов указано пунктом ниже. 3. Реализована функция регистрации нового пользователя на основе его заявки.
3.1 При нажатии на кнопку "Все", выделяются все отображенные в таблице пользователи, с которыми требуется работа:
Рис. 5 Результат работы кнопки "Все"
3.2 При нажатии на кнопку "Добавить выделенных", каждый выбранный "гость" будет зарегистрирован в проекте, при этом программа сгенерирует ему случайный пароль и отправит ему на почту оповещение об успешной регистрации и созданный для него пароль. 3.3 Аналогичные операции происходят при нажатии на иконку: , только функция сработает для текущего "гостя", в строке которого была нажата данная иконка. 3.4 При нажатии на кнопку "Удалить выделенных", каждый выбранный "гость" будет удалён из проекта.
3.5 Аналогичные операции происходят при нажатии на иконку: , только функция сработает для текущего "гостя", в строке которого была нажата данная иконка. После того как пользователь был зарегистрирован, его можно будет увидеть в таблице пользователей:
Рис. 6 Страница с данными о пользователях.
4. Создан пакет хранимых процедур для автоматического создания схемы для пользователей в СУБД Oracle на основе схемы hr.
Реализовано на PL/SQL - язык программирования, является расширением языка SQL. Процедура написана на основе DATA PUMP API, который обеспечивает высокоскоростной механизм для перемещения данных из 1 базы в другую. В данной процедуре происходит импортирование схемы hr, и на её основе создаётся новая схема, имя и пароль которой будет передаваться в качестве параметров.
Исходный код можно посмотреть в Приложении п.1.
5. Реализована функция для автоматического создания схемы в БД для зарегистрированных пользователей.
Чтобы создать схему, нужно зайти на страницу с отображением всех пользователей и нажать на иконку: в строке с пользователем, для которого хотим создать схему.
После нажатия отображается модальное окно, где мы можем задать имя схемы. Пароль генерируется автоматически, поэтому поле пароля заблокировано для ввода, и служит только для отображения пароля схемы текущего пользователя, если такая есть:
Рис. 7 Диалоговое окно для редактирования данных пользователя.
После нажатия кнопки "Создать схему", с помощью Ajax вызывается функция контроллера, которая вызывает PL/SQL процедуру из модели, создающую в свою очередь схему, имя которой мы задали в поле "Имя схемы*" и случайный пароль которой генерируется автоматически. Если схема создана успешно, то её данные добавляются в таблицу схем вместе с id её нового владельца. Затем делается отправка пользователю на почту оповещения об успешном создании схемы, где указывается её имя и пароль.
Если мы ввели уже существующее имя схемы, то программа выдаст ошибку. Если у пользователя уже существует схема, а мы попытаемся создать новую, то программа также выдаст соответствующую ошибку. Заключение
В результате прохождения производственной практики изучил framework CodeIgniter, основы PL/SQL, усвоил среду разработки TOAD и ознакомился с Data Pump API.
Основными результатами практики является: 1. Процедура автоматического создания схемы для пользователей в СУБД Oracle на основе схемы hr.
2. Возможность для посетителей проекта оставлять заявку на регистрацию в самом проекте.
3. Графический интерфейс для просмотра всех данных о подавших заявку "гостях".
4. Функцию регистрации нового пользователя на основе его заявки.
5. Возможность автоматического создания схемы в БД через простой и удобный интерфейс.
Дальнейшими улучшениями в проекте, согласно поставленных на практику задач, могут являться:
1. Улучшение инвайтной системы, где посетитель может оставить заявку на регистрацию в проекте через специально сгенерированную ссылку, которую получит от уже зарегистрированного в проекте пользователя.
2. Отправка заявки на регистрацию в проекте с помощью AJAX.
3. Добавление возможности создания нескольких схем баз данных для пользователя проекта.
4. Добавление оповещения для администратора проекта о поступлении новых заявок на регистрацию. Список литературы
1. http://code-igniter.ru/ - документация по CodeIgniter
2. http://docs.oracle.com/cd/B19306_01/server.102/b14215/dp_api.htm - документация по Data Pump API
3. http://firststeps.ru/sql/oracle/oracle1.html - основы PL/SQL
4. http://habrahabr.ru/post/181772/ - о шаблоне проектирования MVC
5. http://www.php.net/manual/ru/ - документация по PHP
6. http://ellislab.com/codeigniter/user-guide/ - документация по CodeIgniter на английском
7. http://habrahabr.ru/post/26518/ - настройка почтового сервера
Приложение
1. Пакет хранимых процедур PL/SQL для автоматического создания схемы для пользователей в СУБД Oracle на основе схемы hr:
CREATE OR REPLACE package STE.user_utl as
procedure create_schema(p_schema_name in varchar2, p_schema_password in varchar2);
procedure stop_schema_import_job;
end;
/
CREATE OR REPLACE package body STE.user_utl as
G_SCHEMA_IMPORT_JOB_NAME CONSTANT VARCHAR2(30) := 'HR_IMPORT'; procedure create_schema(p_schema_name in varchar2, p_schema_password in varchar2)
is
l_dp_handle NUMBER;
l_last_job_state VARCHAR2(30) := 'UNDEFINED';
l_job_state VARCHAR2(30) := 'UNDEFINED';
l_sts KU$_STATUS;
percent_done NUMBER; -- Percentage of job complete
job_state VARCHAR2(30); -- To keep track of job state
le ku$_LogEntry; -- For WIP and error messages
js ku$_JobStatus; -- The job status from get_status
jd ku$_JobDesc; -- The job description from get_status
sts ku$_Status; -- The status object returned by get_status
ind number;
begin
-- Create a (user-named) Data Pump job to do a "full" import (everything
-- in the dump file without filtering).
l_dp_handle := DBMS_DATAPUMP.open(
operation => 'IMPORT',
job_mode => 'FULL',
remote_link => NULL,
job_name => G_SCHEMA_IMPORT_JOB_NAME
);
-- Specify the single dump file for the job (using the handle just returned)
-- and directory object, which must already be defined and accessible
-- to the user running this procedure).
DBMS_DATAPUMP.add_file(
handle => l_dp_handle,
filename => 'HR.dmp',
directory => 'DATA_PUMP_DIR'
);
-- Specify the single log file for the job.
DBMS_DATAPUMP.add_file(
handle => l_dp_handle,
filename => 'HR.log',
directory => 'DATA_PUMP_DIR',
filetype => DBMS_DATAPUMP.KU$_FILE_TYPE_LOG_FILE
);
-- A metadata remap will map all schema objects from HR to <p_schema_name>.
DBMS_DATAPUMP.metadata_remap(
handle => l_dp_handle,
name => 'REMAP_SCHEMA',
old_value => 'HR',
value => upper(p_schema_name)
);
-- A metadata remap will map tablespase from EXAMPLE to USERS.
DBMS_DATAPUMP.metadata_remap(
handle => l_dp_handle,
name => 'REMAP_TABLESPACE',
old_value => 'EXAMPLE',
value => 'USERS'
);
-- If a table already exists in the destination schema, skip it (leave
-- the preexisting table alone). This is the default, but it does not hurt -- to specify it explicitly.
DBMS_DATAPUMP.SET_PARAMETER(l_dp_handle, 'TABLE_EXISTS_ACTION', 'SKIP'); DBMS_DATAPUMP.start_job(l_dp_handle);
-- The import job should now be running. In the following loop, the job is -- monitored until it completes. In the meantime, progress information is -- displayed. Note: this is identical to the export example.
percent_done := 0;
job_state := 'UNDEFINED';
while (job_state != 'COMPLETED') and (job_state != 'STOPPED') loop
dbms_datapump.get_status(l_dp_handle,
dbms_datapump.ku$_status_job_error +
dbms_datapump.ku$_status_job_status +
dbms_datapump.ku$_status_wip, -1, job_state, sts
);
js := sts.job_status;
-- If the percentage done changed, display the new value.
if js.percent_done != percent_done
then
dbms_output.put_line('*** Job percent done = ' || to_char(js.percent_done));
percent_done := js.percent_done;
end if;
-- If any work-in-progress (WIP) or Error messages were received for the job,
-- display them.
if (bitand(sts.mask, dbms_datapump.ku$_status_wip) != 0) then
le := sts.wip;
else
if (bitand(sts.mask,dbms_datapump.ku$_status_job_error) != 0)
then
le := sts.error;
else
le := null;
end if;
end if;
if le is not null then
ind := le.FIRST;
while ind is not null loop
dbms_output.put_line(le(ind).LogText);
ind := le.NEXT(ind);
end loop;
end if;
end loop;
-- Indicate that the job finished and gracefully detach from it. dbms_output.put_line('Job has completed');
dbms_output.put_line('Final job state = ' || job_state);
DBMS_DATAPUMP.detach(l_dp_handle);
-- set new schema password execute immediate 'ALTER USER ' || upper(p_schema_name) || ' IDENTIFIED BY ' || p_schema_password;
end;
procedure stop_schema_import_job
is
h1 NUMBER;
begin
/*
SELECT owner_name, job_name, operation, job_mode, state, attached_sessions
FROM dba_datapump_jobs
WHERE job_name NOT LIKE 'BIN$%'
ORDER BY 1,2;
*/
-- Format: DBMS_DATAPUMP.ATTACH('[job_name]','[owner_name]');
h1 := DBMS_DATAPUMP.ATTACH(G_SCHEMA_IMPORT_JOB_NAME, 'STE');
DBMS_DATAPUMP.STOP_JOB (h1,1,0);
end;
end;
/
2. Функция контроллера для создания схемы:
public function _ajax_create_schema()
{
//Загружаем хэлпер строки
$this->load->helper('string');
//Загружаем модель регистрации
$this->load->model('Registration_model', 'registration'); //Загружаем модель пользователей
$this->load->model('User_model', 'user'); $p_user_id = $this->input->post('user_id');
$p_schema_name = $this->input->post('schema_name');
//Генерируем пароль для схемы
$p_schema_password = random_string('alnum', 10); //Проверяем, если есть аткая схема
$check_schema = $this->user->get_by_schema_name($p_schema_name);
foreach($check_schema as $key=>$value)
{
if(isset($value['SCHEMA_NAME']))
{
echo json_encode(array('status'=>'0', 'errmsg'=>lang('schema_already_exists')));
return;
}
}
//Если всё норм, создаём схему
$pl = $this->registration->create_schema($p_schema_name, $p_schema_password);
if($pl)
{
//Если схема создалась, добавляем её в таблицу
$this->registration->add_schema($p_user_id, $p_schema_name, $p_schema_password); //Добавляем схему в таблицу
//Отправляем на почту юзеру имя и пароль схемы
$subject = 'Ваша схема на orcl.rfpgu.ru';
$message = "Поздравляем с созданием вашей собственной схемы! "; $message .="\n<b>Имя схемы:</b> ".$p_schema_name."\n<b>Пароль схемы:</b> ".$p_schema_password;
$message = wordwrap($message, 75); // На случай если какая-то строка письма длиннее 70 символов
$headers = "From: [email protected] <[email protected]>\r\n";
$headers .= "Content-type: text/html; charset=utf-8 \r\n";
mail($mail, $subject, $message, $headers);
echo json_encode(array('status'=>'1', 'msg'=>lang('create_schema')));
}
else
{
//Если схема не добавилась, выдаём аяксом ошибку
echo json_encode(array('status'=>'0', 'errmsg'=>lang('schema_was_not_created')));
}
}
3. Функция модели для создания схемы:
public function create_schema($p_schema_name, $p_schema_password)
{
$stmt = oci_parse($this->db->conn_id, "begin user_utl.create_schema(:p_schema_name, :p_schema_password); end;"); oci_bind_by_name($stmt, ':p_schema_name', $p_schema_name, 10); oci_bind_by_name($stmt, ':p_schema_password', $p_schema_password, 30); $pl = oci_execute($stmt);
return $pl;
}
4. Каптча:
<?php
session_start();
//Сколько символов
$nchars = 7;
//Массив с символами
$arr = array("a","b","c","d","e","f","g","h","i","j",
"k","l","m","n","o","p","q","r","s","t",
"u","v","w","x","y","z","1","2","3","4",
"5","6","7","8","9","0");
//Генерируем строку в каптче
for($i = 0; $i <= $nchars; $i++)
{
$str .= $arr[rand(0,35)];
}
//Добавляем строку в сессию
$_SESSION['randStr']=$str;
//Работа с gd2 библиотекой
$img = imageCreateFromJpeg("noise.jpg");
$red = imageColorAllocate($img,120,0,0);
imageAntiAlias($img,true); $x = 7;
$y = 30;
$deltaX = 20;
$size = rand(18,30);
//В цикле рандомно размещаем символы
for($j = 0; $j <= $nchars; $j++)
{
$size = rand(18,30);
$angle = -30 + rand(0,60);
$x+=$deltaX;
imageTtfText($img,$size,$angle,$x,$y,$red,"georgia.ttf",$str{$j});
}
//Добавляем фигуры в каптчу
imageArc($img,30,10,20,10,90,0,$red);
imageLine($img,5,5,200,5,$red);
imageLine($img,5,30,200,30,$red);
imageLine($img,5,40,200,40,$red);
//Отправляем тип заголовока header("Content-Type: image/jpg");
imageJPEG($img,"",90);
?>
5. Функция контроллера для регистрации и удаления всех выбранных "гостей":
public function add_delete_all()
{
//Если нажата кнопка "Добавить выделенных"
if($this->input->post('add_all'))
{
//Подключаем модель регистрации
$this->load->model('Registration_model', 'registration'); //подключаем хэлпер для строк
$this->load->helper('string');
//Генерируем пароль
$password = random_string('alnum', 10);
//Если ни один гость не выбран, то ошибка
if(!$this->input->post('check'))
{
$this->session->set_flashdata('errmsg', lang('no_rows_selected'));
redirect('admin/guests/show_all'); return;
}
//Проходимся по всем чекбоксам
$arr = array();
foreach($this->input->post('check') as $key=>$value)
{
$guest_arr = $this->registration->get_guest_by_id($value);
//С каждого выделенного гостя, считываем данные
foreach($guest_arr as $row)
{
$guest_id = $row->GUEST_ID;
$mail = $row->EMAIL;
$last_name = $row->LAST_NAME;
$first_name = $row->FIRST_NAME;
$middle_name = $row->MIDDLE_NAME;
$ref_id = $row->REF_USER_ID;
//И с их помощью создаём юзера
$this->registration->add_user($mail, $last_name, $first_name, $middle_name, $ref_id, md5($password));
//После чего удаляем гостя
$this->registration->delete($guest_id);
}
}
//Отправляем на почту юзеру его пароль
$subject = 'Регистрация на orcl.rfpgu.ru';
$message = "Поздравляем, вы были успешно зарегистрированы на проекте "; $message .="<a href='http://www.orcl.rfpgu.ru/'>orcl.rfpgu.ru</a>\n<b>Ваш пароль:</b> ".$password;
$message = wordwrap($message, 75); // На случай если какая-то строка письма длиннее 70 символов
$headers = "From: [email protected] <[email protected]>\r\n";
$headers .= "Content-type: text/html; charset=utf-8 \r\n";
mail($mail, $subject, $message, $headers);
redirect('admin/users/show_all'); return;
//Если нажата кнопка "Удалить выбранных"
if($this->input->post('delete_all'))
{
//Создаём модель регистрации
$this->load->model('Registration_model', 'registration'); //Если не выбран ни один гость, выдаём ошибку
if(!$this->input->post('check'))
{
$this->session->set_flashdata('errmsg', lang('no_rows_selected'));
redirect('admin/guests/show_all'); return;
}
//Удаляем всех выбранных гостей
foreach($this->input->post('check') as $key=>$value)
{
$this->registration->delete($value);
}
redirect('admin/guests/show_all'); return;
}
}
6. Используемые в работе таблицы БД:
STE_USERS
Column Descriptions
NameNull?TypeDescriptionUSER_IDNOT NULLNUMBER(11)USER_TYPENULLVARCHAR2(30)EMAILNULLVARCHAR2(60)PASSWORDNULLVARCHAR2(60)LAST_NAMENULLVARCHAR2(60)FIRST_NAMENULLVARCHAR2(60)MIDDLE_NAMENULLVARCHAR2(60)ACTIVE_YNNULLVARCHAR2(1)INVITED_BYNULLNUMBER(11)CREATION_DATENULLDATEMODIFIED_DATENULLDATE
Indexes
Index nameIndex typeSequenceColumn nameSTE_USERS_PKUNIQUE1USER_IDSTE_USERS__UNUNIQUE1EMAIL
STE_USER_SCHEMAS
Column Descriptions
NameNull?TypeDescriptionSCHEMA_NAMENOT NULLVARCHAR2(30)USER_IDNOT NULLNUMBER(11)SCHEMA_PASSWORDNULLVARCHAR2(60)DEFAULT_YNNULLVARCHAR2(1)
Indexes
Index nameIndex typeSequenceColumn nameSTE_USER_SCHEMAS_PKUNIQUE1SCHEMA_NAME
STE_GUESTS
Column Descriptions
NameNull?TypeDescriptionGUEST_IDNOT NULLNUMBER(11)EMAILNOT NULLVARCHAR2(80)LAST_NAMENOT NULLVARCHAR2(60)FIRST_NAMENOT NULLVARCHAR2(60)MIDDLE_NAMENULLVARCHAR2(60)REF_EMAILNULLVARCHAR2(80)REF_USER_IDNULLNUMBER(11)CREATED_ATNULLDATEMODIFIED_ATNULLDATE
Indexes
Index nameIndex typeSequenceColumn nameSTE_GUESTS_PKUNIQUE1GUEST_ID
38
Документ
Категория
Рефераты
Просмотров
302
Размер файла
523 Кб
Теги
отчет
1/--страниц
Пожаловаться на содержимое документа