17.12.2015 / 17:23 | |
aRiGaTo Пользователь Сейчас: Offline
Имя: Snork Откуда: Yerevan Регистрация: 03.02.2010
| Ксакеп, ну, это лучше, чем было.
__________________
don't tread on me |
18.12.2015 / 00:11 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| Финальный вариант, со всеми оптимизациями и комментариями Было Было if ((($rights == 3 || $rights >= 6) && $rights >= $res['rights']) || (($res['user_id'] == $user_id && !$set_forum['upfp'] && ($start + $i) == $colmes && $res['time'] > $realtime - 900)AND !$type1['edit']) || (($res['user_id'] == $user_id && $set_forum['upfp'] && $start == 0 && $i == 1)AND !$type1['edit']) || (($type1['user_id']==$user_id && $i==1 && $start == 0) AND !$type1['edit'])) {
if((($rights == 3 || $rights >= 6) && $rights > $res['rights']) and $user_id != $res['user_id']) {
Стало Стало function rightsToControlPost($post_info, $topic_info, $start, $i, $post_count, $is_descending_sort, $is_current_user_curator)
{
global $rights, $user_id, $realtime;
$can_edit_post = false;
$can_delete_post = false;
$can_ban_user = false;
$is_post_by_current_user = ($post_info['user_id'] == $user_id);
$is_current_user_moderator = ($rights == 3 || $rights >= 6);
if ($is_current_user_moderator)
{
// Модератор может изменять все посты
$can_edit_post = true;
// Модератор может удалять все посты
$can_delete_post = true;
// Модератор может банить младших по званию, но не себя
$can_ban_user = $rights > $post_info['rights'] && !$is_post_by_current_user;
return array($can_edit_post, $can_delete_post, $can_ban_user);
}
if ($is_current_user_curator)
{
// Куратор может изменять все посты
$can_edit_post = true;
// Куратор может удалять все посты
$can_delete_post = true;
return array($can_edit_post, $can_delete_post, $can_ban_user);
}
$is_ascending_sort = !$is_descending_sort;
$is_first_post = ($start == 0 && $i == 1);
$is_last_post = (($start + $i) == $post_count);
$is_first_post_in_all_sorting_modes = ($is_ascending_sort && $is_first_post) || ($is_descending_sort && $is_last_post);
$is_current_user_topicstarter = ($topic_info['user_id'] == $user_id);
if ($is_current_user_topicstarter)
{
// Автор темы может изменять первый пост
$can_edit_post = $is_first_post_in_all_sorting_modes;
}
// Пользователь может изменять и удалять свой последний пост в течение 15 минут
$is_time_to_edit_post = $post_info['time'] > $realtime - 15 * 60;
$can_edit_post = $can_edit_post || $is_time_to_edit_post;
$can_delete_post = $can_delete_post || $is_time_to_edit_post;
return array($can_edit_post, $can_delete_post, $can_ban_user);
}
list ($can_edit_post,
$can_delete_post,
$can_ban_user) = rightsToControlPost($res, $type1, $start, $i, $colmes, $set_forum['upfp'], $is_curator_user);
if ($can_edit_post)
{
if ($can_ban_user)
{
Так как эти проверки были в двух местах (веб-версия и мобильная версия), то пришлось засунуть в функцию. __________________
let live Изменено aNNiMON (18.12 / 00:12) (всего 1 раз) |
18.12.2015 / 00:16 | |
Dinisimys Пользователь Сейчас: Offline
Имя: Денис Регистрация: 30.07.2012
| aNNiMON, не понял это за тихий ужас? ООП не улучшило бы код или это противоречит совершенному коду?
Изменено Dinisimys (18.12 / 00:17) (всего 1 раз) |
18.12.2015 / 00:22 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| Dinisimys, ООП бы улучшило, но там где были эти изменения, ООП встроить тяжело. ООП, JohnCMS. ООП, JohnCMS. __________________
let live |
18.12.2015 / 00:25 | |
Dinisimys Пользователь Сейчас: Offline
Имя: Денис Регистрация: 30.07.2012
| aNNiMON, не знал что джон на столько бездушно относился к прогерам. Но смысл тогда писать этот код сюда, если он все же не совершенный? Изменено Dinisimys (18.12 / 00:26) (всего 1 раз) |
18.12.2015 / 00:31 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| Dinisimys, не нашёл темы по рефакторингу, поэтому написал сюда. Тот пост - продолжение этого поста. Просто на память оставил и как пример возможного рефакторинга. На совершенный код не претендую. __________________
let live Изменено aNNiMON (18.12 / 00:32) (всего 1 раз) |
18.12.2015 / 03:58 | |
ВитаминКО Супермодератор Сейчас: Offline
Имя: Василиус Откуда: RZN Регистрация: 20.04.2012
| Для джона это уже совершенный код Один и тот же код в функцию запилить __________________
わからない!! |
3.07.2017 / 09:19 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| Naik, Пост #489764, ну вот InsertSectorsType превратить в интерфейс с методом Date getDate(Context context, int index, BaseEvent model); и строчки с 22 по 57 превратятся в date = getDate(context, i, model);, а если избавиться от костыля if (i == 0 || ..) на 36 строке, то int index уберётся и будет красивее. Объект Date today у тебя используется только в ветке SEE_EVENT_STATUS, так что можно его перенести с начала метода туда. На 19 строке у тебя удар по перформансу, если объектов в events много и кому-то приспичит LinkedList передать. events.size() в отдельную переменную до цикла и будешь спокоен. Тем более, что размер списка у тебя и так на 12 строке впервые используется. На 18 строке у тебя лишнее создание объекта. Год можешь взять с todayLocalDate. Ну а то, что дальше внутри ветки if (date != null), какой-то легаси-велосипед, там без пяти капель не разобраться. __________________
let live Изменено aNNiMON (3.07 / 09:28) (всего 1 раз) |
3.07.2017 / 09:25 | |
Naik Пользователь Сейчас: Offline
Имя: %name% Регистрация: 14.03.2010
| там сама суть Проверка нужно ли вставлять категорию (если уже вставлено к примеру Today то уже не нужно его вставлять. Ну и месяц вставляется если нужно. Также в сектор даты записывается сколько дней до той даты, т.к. при выводе если дата в пределах недели то она отображается по другому и может развернуться в почасовый таймлайн Изменено Naik (3.07 / 09:29) (всего 1 раз) |