Всем привет! Такая возникла ситуация: у меня есть несколько типов материалов, есть несколько ролей, есть несколько связей, и есть куча материалов которые не опубликованы.
Задача: Пользователю определенной роли предоставить вьюшку в которой он сможет:
1. Просмотреть материалы которые только заданного типа - решено
2. Только материалы тех пользователей которые состаят с ним в определенной пользовательской роли (связи) модуль UserRelationship - решено за исключением материалов пользователя UID1!
3. Предоставить фильтр по имени пользователя чтобы отобрать только материалы одного из пользователей удовлетворяющего условиям 1 и 2. - решено.
Внимание вопрос: почему когда пользователь которому все это надо посмотреть и профильтровать не имея подтвержденных связей (UR) все равно видит материалы UID1 которые подходят под критерий номер 1. Т.е. как-то фильтр по пользовательской связи не учитывается для UID1.
Все ничего если бы такой пользователь был один и ему можно просматривать, просто он еще не успел подтвердить связь со мной. Но ведь другие пользователи при регистрации получившие эту самую заветную роль, которой нужен этот вьюс тоже в итоге могут смотреть материалы UID1 а это не хорошо так как я может даже не знаю их или категорически против того, чтобы они смотрели мои записи.
Прикрепил скриншот вьюса.
Вот запрос вьюса:
node.title AS node_title,
node.language AS node_language,
node_revisions.body AS node_revisions_body,
node_revisions.format AS node_revisions_format,
node.created AS node_created,
node_data_field_beg_vsego.field_beg_vsego_value AS node_data_field_beg_vsego_field_beg_vsego_value,
node.type AS node_type,
node.vid AS node_vid,
node_data_field_beg_vsego.field_ring_water_km_value AS node_data_field_beg_vsego_field_ring_water_km_value,
node_data_field_beg_vsego.field_shtanga_vsego_kg_value AS node_data_field_beg_vsego_field_shtanga_vsego_kg_value,
node_data_field_beg_vsego.field_samochuvstvie_value AS node_data_field_beg_vsego_field_samochuvstvie_value,
users.uid AS users_uid
FROM node node
LEFT JOIN user_relationships user_relationships ON node.uid = user_relationships.requester_id
INNER JOIN users users ON node.uid = users.uid
LEFT JOIN node_revisions node_revisions ON node.vid = node_revisions.vid
LEFT JOIN content_type_trenirovka node_data_field_beg_vsego ON node.vid = node_data_field_beg_vsego.vid
WHERE (node.type in ('trenirovka')) AND (node.status = 0) AND (user_relationships.rtid in ('2', '4')) AND (user_relationships.approved = '1') AND (users.uid <> ***CURRENT_USER***)
ORDER BY node_created DESC
Пожалуйста помогите решить эту проблему. Бьюсь над ней уже какой день подряд....
Вложение | Размер |
---|---|
![]() | 82.47 КБ |
Комментарии
Может будет правильнее сменить автора всем материалам которые написаны пользователем UID1 и не использовать UID1 для написания контента? Только тогда как это сделать массово? Для нескольких сотен материалов одним махом?
Я так понимаю, что за хранение нод отвечает две таблицы в БД:
`node` ( `nid` int(10) unsigned NOT NULL AUTO_INCREMENT, `vid` int(10) unsigned NOT NULL DEFAULT '0', `type` varchar(32) NOT NULL DEFAULT '', `language` varchar(12) NOT NULL DEFAULT '', `title` varchar(255) NOT NULL DEFAULT '', `uid` int(11) NOT NULL DEFAULT '0', `status` int(11) NOT NULL DEFAULT '1', `created` int(11) NOT NULL DEFAULT '0', `changed` int(11) NOT NULL DEFAULT '0', `comment` int(11) NOT NULL DEFAULT '0', `promote` int(11) NOT NULL DEFAULT '0', `moderate` int(11) NOT NULL DEFAULT '0', `sticky` int(11) NOT NULL DEFAULT '0', `tnid` int(10) unsigned NOT NULL DEFAULT '0', `translate` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`nid`), UNIQUE KEY `vid` (`vid`), KEY `node_changed` (`changed`), KEY `node_created` (`created`), KEY `node_moderate` (`moderate`), KEY `node_promote_status` (`promote`,`status`), KEY `node_status_type` (`status`,`type`,`nid`), KEY `node_title_type` (`title`,`type`(4)), KEY `node_type` (`type`(4)), KEY `uid` (`uid`), KEY `tnid` (`tnid`), KEY `translate` (`translate`) ) ENGINE=MyISAM AUTO_INCREMENT=258 DEFAULT CHARSET=utf8 AUTO_INCREMENT=258;
И таблица:
`node_revisions` ( `nid` int(10) unsigned NOT NULL DEFAULT '0', `vid` int(10) unsigned NOT NULL AUTO_INCREMENT, `uid` int(11) NOT NULL DEFAULT '0', `title` varchar(255) NOT NULL DEFAULT '', `body` longtext NOT NULL, `teaser` longtext NOT NULL, `log` longtext NOT NULL, `timestamp` int(11) NOT NULL DEFAULT '0', `format` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`vid`), KEY `nid` (`nid`), KEY `uid` (`uid`) ) ENGINE=MyISAM AUTO_INCREMENT=258 DEFAULT CHARSET=utf8 AUTO_INCREMENT=258;
Насколько я понимаю мне будет достаточно сменить в первой и во второй таблице номера пользователей с 1 на скажем 3. Как это правильно сделать? в SQL не силен совсем.
Нашел в теме не далеко тут примерно такой код запроса к MySQL:
node_revisions
SET
body = REPLACE(body, '/xxx/.img/', '/yyy/img/'),
teaser = REPLACE(teaser, '/xxx/.img/', '/yyy/img/')
Может мне можно сделать по аналогии:
node_revisions
SET
uid = REPLACE(uid, '1', '3')
И еще тут:
node
SET
uid = REPLACE(uid, '1', '3')
Думаю запросы эти сделать через phpMyAdmin у хостера. Подскажите насколько правильно я мыслю, можно ли выполнить эти запросы к БД и обойдется ли без последствий? Ясное дело, что перед этим сделаю полный бэкап, но все же...
Вопрос в силе. Насколько безопасны с точки зрения сохранения данных и их доступности в дальнейшем если обновить записи в указанных двух таблицах?