суббота, 29 января 2011 г.

Получить что есть:)

Мегаполезные функции php:
get_defined_vars -- получить многоуровневый массив всех переменных, которые были инициализированы в скрипте.

get_defined_functions -- получить массив функций, которые были инициализированны на данный момент и доступны для выполнения.

get_defined_constants -- получить константы.

пятница, 28 января 2011 г.

дамп базы mysql

Так дапм можно слить:
mysqldump -uusername -ppassword -hhostname --add-drop-table databasename > dumpname.sql

А вот так поднять:
mysql -uusername -ppassword -hhostname databasename < dumpname.sql

среда, 26 января 2011 г.

svn серверная часть и администрирование

Subversion -- это клиент-серверное приложение. Расмотрим что же такое сервер.
Для управления репозиториями используется утилита svnadmin. Чтобы создать новый репозиторий нужно написать в поточном каталоге, который выбран под хранение репозиториев:

svnadmin create REPOSNAME

воскресенье, 23 января 2011 г.

Шпаргалка

services.msc -- окно консоли управления службами винды.
sc.exe -- консольное приложение для запуска, остановки, создания служб виндоус.

*.msi -- расширение инсталяционных пакетов.

services.exe(Service Control Manager) -- сервер, который управляет службами виндоус, общение со службами реализовано RPC(remote procedure call) технологией. Этот сервер может также управлять службами удаленных компьютеров. Доступ к нему осуществляется через консоль управления MMC, название у этой консоли services.msc(именно это расширение указывает на то, что это консоль управления MMC).


Сервисы поумолчанию запускаются под правами юзера LocalSystem, права этого юзера даже превышают права Administrator. Рабочим каталогом будет %WinDir% (это либо C:\WINDOWS или С:\WINNT), а каталогом временных файлов %WinDir%\TEMP. Можно также создать юзера под конкретную службу и настроить ему необходимый набор прав, теперь рабочим каталогом будет каталог новосозданного юзера. LocalSystem юзер виртуальный, поэтому у него нет домашнего каталога, что означает

суббота, 22 января 2011 г.

Что нового в очередном тесте знаний?

PHP
Обратил внимание на установку register_globals. Она была до php 4.3 включена по умолчанию. Делела она следующее - переменные EGPCS (Environment, GET, POST, Cookie, Server) регистрирует как глобальные. Тоесть у нас если есть некая переменная, которая хранит результат аутентификации, инициализируется она где-то в скипте и хранит булиновское значение. При включенной опции мы можем угадать имя этой переменной и прислать ее например как гет переменную со значением 1, что означает взлом входа. Это все можно исключить, но ceществование этой дыры решили прикрыть, так что из php 5.3 это деприкейтид опция.

среда, 19 января 2011 г.

Связь между таблицами баз данных

Наконец-то понял, почему слева на схемах мало обьектов, а справа много в связе many-to-one. Смысл вот в чем:

Слева находится обьек, который может быть связанным со многими правыми обьектами. А справа обьект может быть связан только с одним левым обьектом.
One-to-many все точно также только наоборот.
Many-to-many, это когда левый обьект может быть связан с каким угодно количеством правых обьектов, а правый обьект - с каким угодно количеством  левых.

воскресенье, 16 января 2011 г.

Апдейтсейвное добавление полей в модули

Это нужно сделать в каталоге /custom/Extension/modules/modulename/.
Например:
/custom/Extension/modules/Products/Ext/Vardefs/kc_orders_products_Products.php
$dictionary['Products']['fields']['kc_order_name']= array(
   'name' => 'kc_order_id',
   'type' => 'id',
   ...
);

Таким же образом мы можем редактировать уже существующие поля(изменять их параметры):
$dictionary['Bug']['fields']['fixed_in_release']['importable'] = 'required';

Связи в SugarCRM

В папках "/metadata"("/custom/metadata") хранятся связи под которые созданы отдельные таблицы в базе данных. Это видно по тому что связь указывается в переменной:
$dictionary['product_bundle_quote']=...

В файле vardef.php любого модуля тоже все его поля хранятся в этой переменной:
$dictionary['Product']=...


Связи же, под которые не нужны отдельные таблицы в базе, определяются в файле vardef.php, и тоже хранятся в переменной дикшенери, но уже под индексом своего модуля:
$dictionary['Product']['relationships']['products_accounts']=...

Так что такое переменная $dictionary?
Это переменная, которая представляет таблицы базы данных, которые могут выражаться либо модулями, либо связями между модулями. Под индексом первого уровня этого массива находится следующая структура:
'table' - имя этой таблицы в базе данных
'fields' - поля, которые находятся в этой таблице (также могут быть поля которые и не хранятся в базе, а просто временно сохранятся в обьекте, которые отображает эту таблицу. Нужен соответсвующий флаг в таком поле. Такие поля скорее всего калькуляционные -- динамически вычисляются по определенным состояниям приложения)
'indexes' - пометка на поля, которым нужно индексирование в базе.
'relationships' - определяются связи с другими таблицами в базе данных.
'comment' - описание предназначения таблицы
'audited' - булиновское значение, которое определяем хранить ли история этой таблицы в отдельной таблице(логи).

понедельник, 10 января 2011 г.

Система меню Drupal

Система меню друпала стоит на трех китах:


1. Колбек маппинг.
2. Контроль доступа.
3. Кастомизация.


Ядро системы живет в /include/menu.inc, а опциональная часть (такая как кастомизация) в modules-menu.


Задачей системы меню является диспетчеризация (или роутинг), это еще один синоним первого кита "коллбек маппинга". В таблице menu_router храняться пути сайта и имена функций, которые обрабатывают каждый конкретный путь, а также параметры для передачи в эти функции. В таблице menu_link хранятся айтемы менюшек(которые присутсвуют на сайте) связанные с путями в menu_router.

среда, 5 января 2011 г.

Во что выводят модули

Тема имеет следующие шаблоны:

page.tpl.php -- это каркас страницы, модуль может воспользоваться этим шаблоном, чтобы представить свой результат.

node.tpl.php -- это каркас елементарного контент тайпа, в него тоже модули могут выводить, можно также создавать более специализированные шаблоны под контент-тайпы наследники от нода. Если контент-тайп не видит под себя шаблон, то он ищет ближайший отцовский.

block.tpl.php -- это каркас блока, блоки можно размещать в разных регионах страницы. При этом все модули, которые делают вывод в блоки, пользуются этим шаблоном. С помошью panels/ctools можно из блока узнать, на какой странице располагается результат данного модуля через блок.

вторник, 4 января 2011 г.

cck

С 6-го друпала уже в ядре включен функционал создания нового типа нода. Сontent Сonstruction Кit же позовляет создавать новые поля к этому ноду в базу.

понедельник, 3 января 2011 г.

Архитектура приложения

SugarApplication не расширяется, но зато в SugarController есть метод preProcess(), в котором до вызова контроллера можно выполнить дополнительные проверки или инициализации.
Когда приходит запрос приложение получает контроллер от ControllerFactory, который основываясь на строке запроса выбирает нужный.
Эта фабрика ищет в /custom/modules/moduleName/ файл contoller.php, потом в modules/moduleName/, если не там не там файла нет, то создает екземпляр из includes/MVC/Controller/SugarController.php.

SugarBean

У шугарбина есть метод
function retrieve_by_string_fields($fields_array, $encode=true)

Который позволяет по набору полей выбрать запись из модуля который представляет этот бин. Такой себе поиск. Метод возвращает ссылку на свой обьект ($this), при этом в него уже заполнены остальные поля из базы. Наверно если введенный массив не четко определяет одну запись из базы, то обьект будет представлять массив записей, которым подходят поля. Проверил, выбирает первый из списка подошедших.

SugarCRM Studio

Применяется для:
1) Добавление кастомных полей.
2) Изменение лейблов полей.
3) Изменение лейаутов во вьюшках(эдит, серч и т.д.,), сабпанелях.
4) Создание релейшинов.

SugarCRM hooks & Workflows

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

Module Builder SugarCRM

Система в шугарте для быстрого создания новых модулей, а такеже для тех, кто не знаком с php. Его функционал очень похож на стидию.

Для начала создается пакет, а уже в пакете модуль, так мы можем поставлять связанный функционал одним пакетом.