Cms subdreamer: Subdreamer CMS 4.2.1 движок сайта

Содержание

Доработка сайта на CMS Subdreamer • фриланс-работа для специалиста • категория Веб-программирование ≡ Заказчик Александр Моисеенко

Разработка внутреннего мессенджера

Общий функционал похож на скайп. 

Слева контакты: пользователи, групповые чаты, «прикрепленные» чаты (обсуждения объектов, задач, событий, формируемых в других модулях), а также — в дальнейшем — контакты, подтянутые из сторонних мессенджеров по API. Сортировка — по важности и хронологии. Т.е. сообщения, помеченные как «экстренные» и «срочные» выталкивают контакт наверх, независимо от того, сколько «обычных» сообщений пришло позже.

Все однажды начатые чаты хранятся в отдельной таблице и не удаляются (но могут быть помечены как «удаленные» юзером с соответствующими правами и не показываться в списке контактов).

Каждый чат хранит следующую инфу:

— ID

— Тип чата (ниже)

— id автора (создателя чата)

— Тип объекта, к которому «привязан» чат (типы — отдельная таблица), 0 — ни к чему не привязан. Чат, привязанный к объекту 1, привязанный к объекту 2 и не привязанный ни к чему — это три разных чата, даже если участники одни и те же.

— ID объекта (может быть пустым)

— Время создания

— Время последнего сообщения

— список участников (отд. таблица).

Типы чатов:

— Диалог (юзер-юзер) — создается, как только один юзер написал другому.

— Групповой — создается юзером по соответствующей кнопке «создать групповой чат» с последующим выбором участников. В чат можно добавлять участников в процессе, при этом он становится групповым. Если чат до этого был диалогом, диалог сохраняется неизменным, и формируется новый (пустой) групповой чат.

— Привязанный — то же, что и групповой, но создается «извне». 

 Каждый юзер в системе имеет реквизиты своих мессенджеров, доступных по API, и может добавлять в чат контакты оттуда. Т.е. если в чате юзер1 и юзер2, затем юзер2 добавил своего абонента из ватсапа, то в чате участвуют трое, все сообщения попадают в чат и отсылаются в мессенджер добавленному абоненту.

 

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

 — таблица с типами мессенджеров: ID, название.

 — таблица с их реквизитами для юзеров: id юзера. id мессенджера. логин, пароль, дополнительные дланные (пока просто текстовое поле, что и как там будем хранить — будет зависеть от мессенджера).

 — Таблица с внешними контактами: юзер, мессенджер, имя контакта, доп инфа (свободное текстовое поле).

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

Функция создания чата должна принимать параметры: тип чата, тип объекта, id объекта, id юзера, список юзеров-участников, список «сторонних» контактов. Обязательный параметр — только тип. Возвращает ID созданного чата.

Переписка: обычный текст, тэги сообщения (отдельная строка с функцией автозаполнения. можно последовательно выбрать несколько тэгов) плюс отправка файлов. Файлы складируются в папке attachments/files_messenger. В базе фиксируется каждое сообщение: id чата, юзера-отправителя, стороннего контакта-отправителя, дата-время (все даты в timestamp), id файла, приоритет. Для файлов отдельная таблица: id, источник (пока пусть будет 1 — чат, дальше будут и другие), оригинальное название, «внутреннее» название (формируется при сохранении, можно использовать uniquid или что-то другое, обеспечивающее уникальность) — под этим именем файл сохраняется на диске.

Приоритет — обычное, срочное, экстренное.

Настройки доступа: Есть специальный модуль plugins/p1001_options, страница nastrojki.html, где можно создать свой набор настроек, задаваемых отдельно для каждой группы пользователей. Эти настройки попадают в таблицы qx2_plugin_options (собственно описание настроек) и qx2_plugin_optval (их значения для групп). Дальше их можно использовать внутри плагина. При помощи этих настроек нужно организовать права доступа:

— управление списком чатов: видны все чаты, фильтрация и сортировка по пользователю, типу/id объекта, дате создания, дате последнего сообщения. Возможность удалять чаты (не удалять физически. а помечать в базе как «удаленные», после чего юзеры перестают их видеть, но управляющий может восстановить)

— отправка срочных и экстренных сообщений

Функции, используемые извне: создание чата (уже описывал), отправка сообщения в чат — указывается id чата, юзера-отправителя (0 — системное), собственно сообщение (текст, тэги, файл, статус). Возвращает true|false

проверка новых сообщений для пользователя. Как лучше организовать (признак «прочитано», по времени захода юзера в чат/последнего сообщения в чате, или как-то еще) — без разницы, главное, чтобы функция возвращала ID сообщений, которых юзер еще не видел.

10 лет! Новости — InstantCMS Community

Привет, друзья.

Так уж вышло, что в этот самый день, ровно 10 лет назад состоялся первый релиз InstantCMS версии 1.0.0. Пропустить такую дату было никак нельзя, поэтому приглашаю вас к милой ностальгической беседе о том, с чего всё началось и куда в итоге пришло. Никогда раньше мне не приходилось писать подобных постов, так что, если он скатится в через чур личные мемуары — извиняйте заранее. Раз уж этот проект тесно связан с моей личностью, то и рассказ придется начать с себя, как бы нескромно это не выглядело.

InstantCMS 1.0.0

На дворе лето 2007 года. Провинциальные российские пользователи интернета заканчивают свой плановый переход с диал-апа на выделенки, впервые постигая радость от непонятных доселе слов «аська», «торрент» и «p2p». Никому неизвестный сайт «Вконтакте» еще не отпраздновал свою первую годовщину, а мало кому известный (и дико лагающий) сайт Youtube совсем недавно отметил два года. Группа Кровосток еще пишет свой культовый альбом «Гантеля», а я — защищаю диплом и заканчиваю вуз.

Этим же летом 2007-го я устраиваюсь на свою первую официальную работу в Екатеринбурге — штатным программистом в интернет-провайдер «Новатор», ныне уже несуществующий. Надо сказать, что программирование всегда было лишь моим хобби, поскольку вуз я закончил педагогический и на последних курсках работал преподавателем в «Уральской академии современных информационных технологий» — вёл курсы по Flash и HTML. Собственно, мой опыт программирования на тот момент был больше связан с написанием десктопных утилит на Delphi и Borland C++ (продажа курсовых и дипломов по программированию неплохо помогала бедному студенту). Ничего серьезного под веб я еще не делал, но уже очень хотел, изучая PHP в перерывах между убойным весельем в своей общаге.

Первый свой «сайт» (если можно назвать сайтом полдюжины сверстанных в блокноте HTML-страничек) я сделал еще в школе, году наверно в 1998-м. Но интерес к PHP и вебдеву в целом у меня появился гораздо позже. Его мне привил друг, который в 2005-2006 годах делал какие-то сайты на движках и даже (по слухам) получал за это деньги. Он же и показал мне первую CMS в моей жизни. Это был Subdreamer.

Не знаю, как с ним обстоят дела сейчас, но помню, что тогда меня очень поразила возможность править сайт из админки. Хотя, это уже не было чем-то революционно новым (тот же WordPress вышел уже в 2003, а предок Joomla — Mambo — и того раньше). В итоге, к окончанию вуза у меня был опыт создания пары сайтов на PHP (один из них — для родной кафедры) и куча добра на Flash. Показав всё это на собеседовании в Новаторе, я был сразу принят. В мои задачи входила разработка внутренних сайтов провайдера — сервисов для абонентов, каталогов пиратских фильмов и игр — в общем всего того, чем должен был обладать любой приличный провайдер в 2007 году. Разумеется, для этого необходимо было использовать какой-то движок. Я остановился на Joomla, которая тогда была бесспорным лидером в этой области. Однако, что-то пошло не так и Joomla мне довольно быстро разонравилась. Уже не помню, что именно с ней было не так, но это, наверно, и не важно. Гораздо важнее то, что моё руководство понимало во всей этой кухне еще меньше меня и мои руки были полностью развязаны. Всё это привело к тому, что в ноябре того же 2007 года молодость и глупость заставили меня сесть и начать изобретать свой велосипед. Впрочем, тогда это не выглядело так странно, как выглядело бы сейчас.

Помню, что работа над собственной CMS настолько увлекла, что я посвящал ей не только рабочее время, но и кучу свободного. О, этот восторг понимающих зрителей, когда ты показываешь им переставку модуля из одной колонки в другую через админку! Его не спутать ни с чем. Энтузиазма придавало и то, что все новые фишки моментально шли в дело — применялись на служебных сайтах и обкатывались реальными пользователями.

Ближе к весне самодельная CMS без названия начала обретать какие-то формы законченного продукта и настала пора задумываться над тем, какого будет её будущее. Первым делом, необходимо было имя. Оно пришло совершенно случайно, когда я обходил один банк за другим, пытаясь получить первый в жизни кредит на первый в жизни новый(!) компьютер. В одном из банков я увидел рекламу новой линейки кредитных карт — Visa Instant. Не знаю почему, но слово Instant меня зацепило — казалось, что в сочетании с аббревиатурой «CMS» оно будет звучать неимоверно круто. Спустя 10 лет, вроде бы, не было ни разу, когда бы я пожалел о том выборе.

Приближаясь к апрелю 2008 я был почти готов сделать официальный «релиз». Правда, вдохновленный собственными успехами, я собирался сделать CMS платной. И даже вёл какие-то переговоры с дизайнерами, готовыми наверстать шаблонов для «новой коммерческой CMS» за какие-то деньги. Домен у меня уже был — еще с конца января — и вот, в конце марта я залил на него первый официальный сайт для (тогда еще) «платной CMS» и начал гордо чего-то жsдать. Какие-то останки того первого сайта помнит даже веб-архив.

Впрочем, ждать пришлось недолго. Ровно до того момента, как один из старших товарищей в сфере IT, выслушав мою, полную оптимизма, презентацию и посмотрев на движок, сказал — «Круто. Только как ты собираешься это продавать?». Это поставило меня в тупик. Как продавать я действительно не имел понятия. Уже не помню всю цепочку дальнейших рассуждений, но результат нам всем известен — буквально через пару недель я сменил вывеску на «опенсорс» и 4 апреля выложил для свободной загрузки InstantCMS 1.0.0:

(кликните на иконку фотоаппарата в нижнем левом углу и выберите Toggle Fullscreen, чтобы увеличить скриншоты)

InstantCMS 1.

x

После релиза 1.0.0 я неожиданно быстро начал получать обратную связь от первых пользователей. Люди начали присылать свои отзывы, пожелания и даже куски кода. Всё это довольно сильно мотивировало и я работал над движком буквально как сумасшедший, по началу выдавая по 1-2 обновления в месяц. Скажем, версия 1.0.1 появилась уже через 10 дней и существенно преобразила движок.

Все эти бесконечные обновления исправляли старые баги, добавляли новые, портили нервы, но всё равно — процесс был безумно веселым для вчерашнего студента. Потом, конечно, энтузиазм стал угасать, но чаще по довольно объективным причинам. Уже через пару лет я женился, устроился на новую престижную работу в компанию Ideco (они до сих пор делают крутейшие штуки, рекомендую). Но, тем не менее, процесс развития неуклонно шел. Не буду подробно описывать что и когда было сделано в тот период, ибо список огромен. Любой желающий может ознакомиться с ним здесь.

Отмечу лишь некоторые, скажем так, наиболее значимые этапы. Например, версию 1.5.2, что вышла 1 сентября 2009 года. В ней самой не было ничего особо примечательного, но она стала стартом для человека, который в дальнейшем сильнее всего повлиял на судьбу всего проекта в целом — ровно через неделю после её выхода на сайте регистрируется Fuze. Я смутно помню как он попал в мои контакты в ICQ и донимал вопросами по коду. Еще хуже помню тот момент, когда меня это окончательно достало (в хорошем смысле) и я пустил этого парня к полноценной работе над релизами. Пожалуй, это было самое грамотное моё решение из всех, что я принимал за эти 10 лет. Что было дальше вы знаете сами.

Так же отмечу версию 1.7, над которой мы очень плотно работали совместно с Fuze, пытаясь успеть сделать релиз до начала нового 2011 года. В итоге, она вышла 7 декабря. Именно в этой версии впервые появился тот темно-синий дизайн фронта и светлый дизайн админки, который идет по-дефолту во всех последующих версиях линейки 1.x.

InstantCMS 2

Версия 1.9 была последней, над которой мы плотно работали вместе с Fuze. Далее, нам обоим стало очевидно, что текущая архитектура движка сильно морально устарела и, несмотря на её кажущуюся простоту, уже не позволяла внедрять новые фишки гибко и красиво, без необходимости каждый раз затевать глобальный рефакторинг. Нужно было что-то менять.

И вот, где-то ближе к концу 2011 года (точных дат, опять же, не вспомню) я начал работу над долгостроем — InstantCMS 2, а Fuze продолжил активную поддержку первой ветки. За первые несколько месяцев не было написано ни строчки кода для «двойки» — я ждал, пока в голове сложится более-менее полная картина того, что и как необходимо сделать. Хотелось добиться универсальности и простоты кода одновременно. Чтобы не нужно было больше писать новый компонент на каждый чих. Так родилась концепция «типов контента». Примерно в то же время я узнал, что нечто похожее уже есть в Drupal — только весьма запутанно, судя по отзывам. Встала задача сделать «примерно так же», только лучше. Не мне судить, получилось ли это в итоге, но лично меня результат вполне устроил.

Работа над InstantCMS 2 заняла несколько лет. Это по-прежнему самый объемный проект из всех, что я когда-либо делал. Думаю, многие из вас прекрасно помнят тот период, который можно озаглавить одной общей фразой — «Когда уже??».

К лету 2012 года пазл уже начал складываться, было готово первое сырое ядро и основа для главной фишки — типы контента. Первое видео о новом движке я выложил 29 мая 2012 года. Спустя еще год, в августе 2013, «двойка» уже была близка к готовности. Но потребовался еще несколько месяцев, прежде чем было решено впервые дать её пользователям. В ноябре 2013 вышел «первый релиз-кандидат», которые многие обозвали «сырой альфой». Что ж, это было довольно справедливо, поскольку до нормального релиза пришлось подождать еще полгода.

И вот, 1 мая 2014 года, исторический момент таки настал — релиз InstantCMS 2.0.0. Всё, что было дальше, происходило уже при непосредственном участии многих из вас. Не вижу смысла подробно об этом рассказывать, ибо раздел «Новости» на этом сайте помнит всё и без меня.

Главное, к чему мы пришли с InstantCMS 2 — это полноценное вовлечение сообщества в работу над движком. Огромное спасибо всем вам — тем, кто присылает свои правки кода или документации, сообщает об ошибках в отведенных для этого местах, да и просто рассказывает своим друзьям о нашем проекте.

Подводя итоги

Я восхищаюсь вашим мужеством, если вы дочитали до этого момента. Настало время немного похвастаться. Думаю, мы все заслужили это право.

И так, что же представляет из себя InstantCMS сейчас? Будем откровенны, это по-прежнему малоизвестный движок для «ценителей», коим он и был с самого своего рождения. Да, счёт реализованных сайтов перевалил за десятки тысяч, но мы так и не стали частью «поп-культуры» в мире веб-строительства. Не берусь судить, хорошо это или плохо, это просто факт. Но у нас есть кое-что, чем мы по праву можем гордиться без всяких оговорок:

  1. Мы всё еще живы. Звучит глупо, но, думаю, многие из вас представляют насколько это сложно — не перегореть и не забросить всё к чертям за столько лет. И дело здесь даже не в деньгах, вернее не столько в них. Потому что, возьмем, например, LiveStreet — перспективный движок, появившийся почти в одно время с InstantCMS, но наделавший гораздо больше шума. Я уверен, что он принес своим авторам неплохие деньги. Однако, это не спасло его от гибели, к сожалению. Мы же продолжаем развиваться. Сейчас, в основном, благодаря титаническим усилиям Fuze и его воле к достижению целей. Но и у вашего покорного слуги есть кое-какие идеи в запасе. И я обязательно их реализую, как только снова смогу себе это позволить. Думаю, уже скоро.
  2. У нас — лучшее сообщество. Несмотря на частые склоки, ссоры и ругань, мне кажется, что сообщество InstantCMS — это большая семья по-настоящему добрых и открытых людей. И я пишу это не ради банальной лести. Любой из вас подтвердит, что это факт.
  3. InstantCMS — единственная российская опенсорс CMS с полной и подробной документацией. Наш мануал — это особая гордость. Сотни страниц текста, множество часов обучающих видео, работающая ссылка «Помощь» в каждом(!) разделе админки — это уровень серьезного коммерческого продукта, а не проекта группы энтузиастов. Большую роль в этом, опять же, сыграли вы — дорогие участники нашего сообщества.
  4. InstantCMS — это гибкий универсальный движок. Думаю, это утверждение весьма справедливо и нам таки удалось сделать систему, которая является одновременно мощной, но при этом — очень легко расширяемой.

Что дальше?

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

Никто не знает, что дальше. Не буду писать здесь больше оптимистичных дежурных фраз, напишу лишь, что думаю — дальше нас ждут следующие 10 лет развития. И мне будет безумно интересно посмотреть, куда они нас приведут. Надеюсь, и вам тоже.

Большое спасибо, что вы с нами, друзья. InstantCMS — это не программный код. InstantCMS — это все мы. С юбилеем!

CMS Subdreamer | Страница 2

JavaScript отключен. Для лучшего опыта, пожалуйста, включите JavaScript в вашем браузере, прежде чем продолжить.