Создать dev crash course (DCC), который будет содержаться пример работы функционала и ссылку на файл с кодом, который его реализует

Выглядеть это будет так:

[Page Header]

[Short description]

Code File: /ow_plugins/skeleton/routing.php

При этом, в коде, через комментарии указать всю необходимую техническую инфу: какие параметры принимаются, какие отдаются. У человека, читающего код, не должно возникать вопросов какие данные передаются и отдаются.

Ниже следует пример функционала, сделанный по сценарию.

Skeleton

Это должен быть самодостаточнй плагин, который устанавлиается/активируется/деактивируется и работает на сайте без дополнительных телодвижений. Он должен содержать весб набор дефолтных папок и файлов для работы плагина в Oxwall

Сценарий

File structure

- схема папок и файлов, с описанием где что лежит и за что отвечает. Положить read.info в каждую подпапку, в котором добавить краткое описание предназначения этой подпапки

Debug/Dev tools

Указать инструменты в софте для debug и dev.

Расписать каждую константу:

  1. где активируется
  2. зачем нужно, на что влияет

указать адрес странички по добавлению ключей. ( dev tools).

plugin.xml
  1. указать в кратце зачем он нужен
  2. указать путь, по которому он находится
  3. описать каждый параметр в этом файле: зачем он нужен и какие возможные значения может принимать
Routing

URL: /skeleton/routing

-name: "Item name". type "input box". invitation label:"My item". required
-name: "Menu name". type "select box". values: val1=footer, val2=header. required.
-name: "Page Title". type "input pox". invitation label: "My page title". required
-name: "Page Meta Tags". type "text area". invitation label: "My meta tags"
-name: "Page Content". type: "text area". invitation label: "My page content". required
-name: "Visible for". type "select box". values: val1=guests, val2=registered members. required.
-name: "Сreate". type: "submit".   
-table name: "Created Pages". columns:2. rows:min 1. 
 column1="Page title"; column2="Actions": button name "Delete". 

*Количество cтраниц которые можно создавать не ограничено.

*Все добавленные страницы выводить в таблице. table name: “Created Pages”

*Если не все required поля заполнены display notice. notice text: “Fill in the form properly”.

*Если все поля заполнены то создать страницу и добавить меню айтем в указанное место.

*Если нажимают на “Delete”, то страница и ее item в меню удаляются

Localization

URL: /skeleton/localization

-name: "Enter text key". type: "text-input". invitation label: "Hello World". 
-name: "Enter original value". type: "text-input". invitation label: "Welcome to my site". 
-name: "Create". type: "submit". 
-table name: "Сreated Text Keys". columns: 3. rows: min.1

      column1= "Text Key Values"             сolumn2= "Original Values"   column3="Actions"
      {text key='skeleton+hello_world'}      Welcome to my site           name:"Delete". type:"button"
      
*Количество ключей которые можно создавать не ограничено. Все ключи после создания выводить в таблицу Created Text Keys (см. выше).

*Ко всем созданным ключам автоматически добавлять префикс 'skeleton+'.

*Если нажимают “Delete” ключ и его значение удаляются и убираются с таблицы.

*Если нажимают “Create” не заполнив “Enter text key” и “Enter original value” выводить notice. notice text: “Fill in the form properly”.

*Если нажимают “Create”, но создаваемый ключ уже существует, то выводить notice.notice text: “Text key already exists”. То есть должна быть проверка на дублирующиеся ключи.

Forms

URL: /skeleton/forms

	- name: text("Text") / type: text-input / description: text("additional field's description")
- name: text("Extended text") / type: textarea 
- name: text("Single Choice(dropdown)") / type: selectbox / values: invitation=text("Select any"), val1=text("Red"), val2=text("Blue") 
- name: text("Multiple Choice") / type: multicheckbox / values: val1=New York, val2=Boston, val3=Chicago
- name: text("Upload files") / type: file
- name: text("Hidden") / type: hidden
- name: text("Submit ME") / type: submit

* для каждого элемента добавить PHP/JS проверки валидации
** указать ссылку на form_element.php и validator.php и сказать что там лежит полный список возможных типов и их валидаторов
	
- указать все возможные опции у формы 
- дать инструкции, как вывести на той же странице введенные данные в табличном виде. Для файла вывести только название подгруженного файла
Using database
  1. как выполнить несколько самых частоиспользуемых типов запросов
  2. DBO и DTO на примере полей из пункта Forms. Для файлов записать в таблицу только имя файла
File storage

URL: /skeleton/file-storage.

  - name: "Upload Image". type "file". button name "Browse".
  - name: "Image Description". type "text". predefined label:("describe your image")
  - name: "Upload". type: "submit"
  - После успешной загрузки отобразить изображение с Short Description.
  - Если изображение не подгрузилось то display notice. notice text: "Unacceptable file extension".

Decorators

пропускаем

Mail sending

URL: /skeleton/mail-sending

-name: "From". type: "text-input".invitation label: "youremail@example.com"
-name: "To". type: "text-input". invitation label: "recepientemail@example.com"   
-name: "Topic". type: "text input". invitation label: "enter email title"
-name: "Body". type: "text area". invitation label: "enter email body"
-name: "Deliver". type: "radio-button". values: 
       val1=Immediately
       val2=Add to Queue.Рядом  отобразить notice.notice text: "Email will be sent when Cron runs"
-name: "Send". type: "submit".

*invitation label: это текст который отображается по дефолту. При клике на поле, текст исчезает.

*К полям “To” и “From” добавить простейшую проверку на формат email (ex: что бы была @ и не было запрещенных символов).

*Если письмо было отправлено успешно то display notice. notice text: “Your message was sent successfully”. Если письмо не было отправлено по какой то причине display notice: notice text: “Error sending message”.

Activity Notifications

URL: /skeleton/notifications

name: "Notification sender"|"<img src="{$link_to_loged_in_user_avatar}"/> {$username}
name: "Notification Content". type: "input text". invitation label: "My new notification". required
name: "Notification URL". type: "input text". invitation label:"www.mysitename.com/dashboard".
name: "Attach image". type "file". button name: "Browse". optional.
name: "Notify by email". type "check box". optional 
      NOTE: created real time notification will be delivered by email depending on your profile's email notification settings
name: "Send". type "Submit"

* Сделать проверку на загрузку изображения ( что бы можно было добавлять только картинки а не .doc или .pdf к примеру)

* Можно создавать хоть сколько нотификейшенов.

* Если были заполнены не все required поля выводить ностис. notice text: “Fill in the form properly”. Если все было заполнено корректно то создать нотфикейшен

* Если подгружаемый файл не является картинкой выводить нотис. notice text: “Unacceptable file extension”.

Newsfeed

URL: /skeleton/newsfeed

name: название и аватрка того кто залогинен.( sender)
name: "Newsfeed Item Content". type "text input".required.
name: "Place on:". type "select-box". val1=Dashboard Newsfeed val2=Index Newsfeed. val3=Profile Newsfeed. required
name: "Add entry". type "Submit".     

* Если все заполнено правильно вывести нотис “You have successfully added newsfeed item added to {$ место тут}”.

Widgets

URL: /skeleton/widgets

name: "Widget Content"|{$profiles_list_widget} ( заметка: отобразить стандартный виджет с latest users  
      profiles).
name: "Place widget on page". type "select box". vales: val1="User Profile", val2="User Dashboard", val3="Index".
name: "Add". type:"Submit". 
table name: "Created widgets". number of col=2. rows=min 1
 col1="Latest Users Widget" col2= "Widget placement". col=3 "Actions" (delete)

Floatbox

URL: /skeleton/floatbox

text: "This is a component"

button: "Reload me", after click text changes to "Component has been reloaded via ajax"

button: "Close floatbox"

Ping request

раз в секунду. посоветоваться с Зарифом как добить его.

Сron Jobs

подумать

Profile questions

URL: /skeleton/profile_questions

name: "Username", type: text, value
name: "Gender", type: radio, selected value
name: "Birthday", type: date (birthday), selected value

name: "Save" 

ACL

URL: /skeleton/access_level

Описать метод проверки action для текущего юзера

Описать метод проверки для модератора

Описать метод добавления action при установке плагина

Admin Settings

URL: /skeleton/admin_settings/

name: "Configuration name". type: "text-input". invitation label: "My New Configuration". required.
name: "Place configuration under:". type: "list". val1=Dashboard, val2=Users, val3=Settings, 
       val4=Privacy&Permissions, val5=Appearance, val6=Pages&Menus, val7=Plugins. required
name: "Configuration URL". not editable. Заметка: cгенерить и отобразить УРЛ admin/skeleton 
       /{$selected_menu_item_name}/configuration_name
name: "Upload your php code:". type: "file". required. Ex:  СONFIG type . select box с типами.( узнать у девелоперов). и если юзер выбирает малтипль значение то попросить ввести возможные значения.

name: "Add". type "submit".
name: "Created Configurations". type: "Table". number of cols=2, number of rows=min1
      col1=Configuration name, col2=Actions (delete).

для зарифа. конфига обязательно должан появиться в сетингах плагина Skeleton. *Если поля какое то из обязательных полей не было заполнено display notice: “Fill in the form properly”.

*Если все поля были заполнены display notice: “Configuration was added successfully. Configuration URL: {$configuration-url}.”

*После перехода по урлу открыть страницу с залитым кодом юзера.

Pre Installation/Activation

сценарий добавления какого то функционала плагином при установке. Больше Серегеина работа.

Post Uninstallation/Deactivate

то же самое. Сереге