Скажем хакам "нет!" или как использовать плагины

Часто возникают ситуации, когда надо вставить свои изменения в чужой код. Причем такие изменения которые не будут там постоянно, а нужны толко на какое-то время. Например на время конкурса.
Обычно это делается при помощи if'ов, констант и других тем (т.н. «Хаки»). Код становится запутанным, непонятным. Можно обойтись и без этого.

Расскажу про конкретный случай — «конкурс блогов», который проходил на Wsetut.uz.



( Читать дальше )

Использование модели Site_User

Каждый раз когда надо выбрать данные ползователей, приходиться ваять запрос который эти самые данные берет из базы.
Мне это порядком надоело. Запихал этот запрос в модель Site_User.

Допустим у нас есть пачка id пользователей и нам надо получить их детали, чтобы вывести на странице. Делаем так:

$user_list = array(10,11);
$users = Site_User::getByIdArray($user_list);


Функция принимает два параметра: getByIdArray(Array $idArray, $onlyActiveUsers = TRUE).

NB! Если код используется вне фреймворка, то надо предварительно вызвать функцию init_fw(), которая инициализирует фреймворк. Ресурсов это много не берет. Просто прописываются нужные пути для загрузки классов. Если не уверены нужно ее вызывать или нет, то лучше вызвать — там стоит проверка на то, запускалась она уже или нет.

В массиве $users теперь лежат объекты пользователей. Ключ массива — id ползователя.

Очень часто бывает нужно для какой-нибуть старой функции преобразовать объект в массив данных. МОжно сделать с объектом так:

printr($users[10]->as_array());


Этот код выведет:
Array
(
    [id] => 10
    [status] => 1
    [username] => zebra
    [password] => 123
    [mail] => yetrix007@hotmail.com
    [hide] => 1
    [news] => 0
    [gender] => F
    [height] => 172
    [birthdate] => 1976-10-24
    [birthday] => 298
    [age] => 30
    [hide_age] => 0
    [country] => 239
    [region] => 2013
    [town] => 38
    [site] => 
    [greeting] => 
    [lastip] => 80.235.48.249
    [registered] => 2002-04-30 14:47:19
    [visited] => 2009-05-11 14:50:20
    [changed] => 2007-05-15 16:10:42
    [added_pics] => 2007-05-18 22:46:35
    [added_pics_id] => 11339586
    [last_pics_id] => 11339586
    [changed_status] => 2008-10-20 15:09:27
    [postings] => 3
    [p1] => 2
    [p2] => 0000-00-00 00:00:00
    [p3] => 
    [p4] => 0
    [skin] => 1
    [pics] => 5
    [friends] => 1
    [friends2] => 1
    [type] => 13
    [family] => 3
    [style] => 11
    [speciality] => 4
    [education] => 5
    [j_postings] => 4
    [online_type] => 1
    [orientation] => 0
    [teacher_id] => 0
    [time_spent] => 0
    [slideshow] => 0
    [smile_service] => 1
    [status_with_smiles] => 
    [is_online] => 0
)


Вторая тема, которую мне лень делать каждый раз это получать руками картинку пользователя.
Чтоб не думать про то как добыть картинку юзера, я добавил вот такую вот функцию:

$url = $users[10]->getPictureUrl(Site_Pic::PICTURE_60x60);
printr($url);


или просто:

$url = $users[10]->getPictureUrl();
printr($url);


Тогда вернется дефолтовая маленькая картинка 60x60.

Вообще есть три размера:

Site_Pic::PICTURE_BIG
Site_Pic::PICTURE_SMALL
Site_Pic::PICTURE_60x60


Юзайте на здоровье.

Ссылки на дизайн

Страница с выбором провайдера и вводом пароля:
http://pics.rate.ee/incoming/clients2/redesign/html_2/invite_2.html

Страница со списком людей, которые уже ест на сайте:
http://pics.rate.ee/incoming/clients2/redesign/html_2/invite_4.html

Страница со списком пользователей для отправки приглашений:
http://pics.rate.ee/incoming/clients2/redesign/html_2/invite_3.html

Автоматическая вбивалка htacces паролей

Надоело вбивать пароли, поэтому решили автоматизировать это дело.
Т.к. готовых расширений firefox'a не было, пришлось похакать один из наиболее подходящих.

Взяли за основу Modify Headers, добавили туда возможость задавать заголовки только для определныых URL'ов по regexp'у.

Установка

1) Качаем вот похаканый экстеншн:

docz.rate.ee/files/modify_headers_for_rate.xpi

2) Открываем firefox'ом (можно просто перетащить файл на окно firefox'a)

3) Перегружаем firefox

Настройка

1) Идем в tools -> Modify Headers

2) В появившемся окне выбираем Configure, там ставим галку Always On



3) Возвращаемся в главное окно и вбиваем вот такие параметры в строку вверху:

Modify :: Authorization :: Basic xxxxxxxxxxxxxx :: www\..*\.rate\.ee



Modify — занчение из select box'a

Authorization — так и оставояем

Basic xxxxxxxxxxxxxx — можно сгенерить вот тут:
http://docz.rate.ee/tools/encode.php

www\..*\.rate\.ee — regexp (синтаксис такойже как у match() в яваскрипте). Header будет вставляться для всех хостов подходяших под regexp.

Жмем кнопку Add.

Все. Пароль на rate сайтах спрашиваться больше не будет.

В блог про ежедневный скрам писать больше не будем

Для нас инфа походу бесполезаня — все все и так знают кто и что делает, задания меняются по три раза на день. Такчто постить сюда записи а-ля «Scrum xx.xx.2009» не будем.
  • 0
  • 11 сентября 2009, 08:45
  • RiboZz
  • 1+1

Информация для тестирования sandbox'a

Перед тестированием надо обновить весь фреймворк.

Sandbox — среда для разработчиков, где собраны все инструменты, которые могут помочь в написании гаджета + среда где гаджет можно запустить и потестить перед публикацией.

Сценарий тестирования:
1) www.alex.rate.ee/sandbox
Сылки должны работать

2) Добавить гаджет «www.guangzhouenglish.com/translator/remotefind.xml»

3) запустить гаджет

4) Опубликовать гаджет

5) Отмодерировать гаджет, поставив ему статус «accepted»

6) www.alex.rate.ee/sandbox
Проверить появился ли гаджет на сайте

7) Попробовать установить гаджет

8) Попробовать запустить гаджет как пользователь

Scrum 09.09.09

Забыл про то что пост писать надо, но лучше поздно, чем никогда.

Zed — Пишет таск и настраивает dev.rate.ee, разобрался с Activity. Делает рефакторинг API.
Cravler и RiboZz прикоучивают каталог.
Vostrilov — копается в коде, тестирует, разбирается как сгенерить документацию автоматом.

За вчерашний день сделано сторипойнтов: 0. Осталось: 40.
Отстаем по графику на день, но на самом деле это не так, просто готовые фишки не прошли тестирование.

RateDbFetcher => messages

Это маленькое описание как получать, посылать, удалать и обновлять письма в почте.
Все доложно работать.

1. Как надо посылать маил кому-то:
метод: POST
прл: messages/16/@self
дата: {«recipients»:[1699148],«title»:«tipa tuitle =)»,«entity»:«ura, rabotaet :)»}
где «recipients» — это массив йзуеров кому можно посылать (на данным момент можно посылать только одному человеку, потом можно будет посылать друзьям). «entity» — это техт письма. «title» — это тема письма.
НБ! Все поля обязательны!

2. Удаление одного или нескольких писем из инбокса и аутбокса
метод: DELETE
урл: messages/16/@self?messageId[]=724&messageId[]=723
«messageId» — массив содержит ид майлов, которые надо удалить. @inbox и @outbox показывает откуда их надо удалить (в приницпе это не важно, функция сама определяет кто есть человек, хозяин письма или читатель)

3. Получение писем
метод: GET
урл: messages/@me/@inbox, messages/@me/@outbox
так же тут работаю фильтры по «fromuser», «touser» и сортировака по «date». спроси меня как и что…
@inbox и @outbox — обязательны поля! Если передать @self, то мы получим все что относится к @inbox

4. Обновление (делаем письма прочитыными)
метод: PUT
урл: messages/@me/@self?messageId[]=727
где «messageId» это массив с ид писем, которые надо отметит прочитыными

RateDbFetcher => getPeople();

Вот список полей, которые можно передавать в параметре «fields»:


relationshipStatus- returns signgle/not set/in relation
profileVideo - direct url to video in user profile
jobInterests - "speciality" from user profile
currentLocation - full location name and also country and town ids
thumbnailurl - url to main pic in profile (small image)
birthday - birtdate from profile
photos - all photos in user profile (moderated)
urls - url/site from userprofile
emails - email from userprofile
age - number (if hide_age == 1, then do not show it)
gender - Female/Male
ims - list of messengers with types
organizations - list of schools
phoneNumbers - phones list
status - greeting
profileUrl - www.rate.ee/users/username
aboutMe - note/info


НБ! регистр букв учитыващется!