Уважаемые друзья, очень прошу Вас помочь!
Сижу, разбираюсь с модулем Family, так-то все понятно как-что в нем заводится, но после того как я создал в нем несколько записей, оказалось что их могут видеть все пользователи на сайте. Причем при заведении нового члена семьи можно выбрать родителей, созданных другими пользователями на сайте, что соответственно не правильно.
Попытался ограничить доступ к чужим нодам через модуль content_access, в принципе получилось, но не все типы доступов с помощью него можно ограничить, а именно нельзя ограничить выбор родителей при создании нового человека в родословной, данное ограничение можно сделать на уровне запроса к базе (т.е. выбирать только тех родителей, которые были созданы именно текущим пользователем).
Я попытался реализовать сам, но в виду отсутствия опыта, у меня выводит все подряд, без ограничений. Прошу помочь исправить код чтобы выбирались записи, созданные текущим пользователем.
Вот пример моего кода:
$groups=db_query('SELECT family_group.nid, family_group.uid, family_group.title_format FROM family_group, users where users.uid=family_group.uid');
IF ($groups) {
while ($data = db_fetch_array($groups)) {
$ancestorgroups[$data['nid']]=$data['title_format'];
}
}
$form['GRUP'] = array(
'#type' => 'select',
'#title' => t('Ancestry Group'),
'#default_value' => $node->GRUP,
'#options' => array('' => 'Нет', 'Семьи' => $ancestorgroups),
);
А вот пример оригинального кода:
$groups=db_query('SELECT nid, title_format FROM {family_group}');
IF ($groups) {
while ($data = db_fetch_array($groups)) {
$ancestorgroups[$data['nid']]=$data['title_format'];
}
}
$form['GRUP'] = array(
'#type' => 'select',
'#title' => t('Ancestry Group'),
'#default_value' => $node->GRUP,
'#options' => array('' => 'None', 'Groups' => $ancestorgroups),
);
В прикрепленном рисунке результат работы данного кода, сейчас там намешаны записи, созданные под разными пользователями, а мне нужно записи только одного.
Заранее очень благодарен за ответы.
Вложение | Размер |
---|---|
demo.jpg | 19.08 КБ |
Комментарии
Причем если сделать похожий запрос через views, то запрос выглядит так:
family_individual.firstname AS family_individual_firstname,
family_individual.nid AS family_individual_nid,
family_individual.lastname AS family_individual_lastname
FROM node node
INNER JOIN users users ON node.uid = users.uid
LEFT JOIN family_individual family_individual ON node.nid = family_individual.nid
WHERE users.uid = ***CURRENT_USER***
Попробовал я использовать ***CURRENT_USER*** в своем запросе, но выводит ошибку
Current user можно получить так:
<?php
global $user;
$current_user_uid = $user->uid ?>
Или в запросе ...WHERE users.uid = $user->uid
Спасибо за ответ. Но у меня выходят ошибки:
Если в запросе вставить WHERE users.uid = $user->uid, то выходит такая ошибка -
"user warning: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '>uid' at line 1 query: SELECT family_group.nid, family_group.uid, family_group.title_format FROM family_group, users where users.uid = $user->uid in M:\home\localhost\www\test\sites\all\modules\family\individual.inc on line 67."
А в какое место нужно вставить этот код?
<?php
global $user;
$current_user_uid = $user->uid ?>
Потому что опять выходит тоже самое, что и раньше
Перед тем как вы делаете запрос с базе.
Условие в запросе сделайте так WHERE (user.uid = %d)", $user->uid)
Если поправить тот запрос что вы привели (из Views), то будет так
<?php
global $user;
$result = db_query("SELECT node.nid AS nid,
family_individual.firstname AS family_individual_firstname,
family_individual.nid AS family_individual_nid,
family_individual.lastname AS family_individual_lastname
FROM node node
INNER JOIN users users ON node.uid = users.uid
LEFT JOIN family_individual family_individual ON node.nid = family_individual.nid
WHERE users.uid = %d", $user->uid); ?>
Если не получится, то выложите здесь кусок вашего кода с запросом.
Vladimir _ Z, спасибо Вам за подсказки. вернусь с работы, обязательно попробую.
Vladimir_Z, все получилось! Спасибо Вам огромное!