Прошу помочь разделить доступ в модуле Family

Главные вкладки

Аватар пользователя evgeny_ufa evgeny_ufa 12 декабря 2010 в 18:20

Уважаемые друзья, очень прошу Вас помочь!
Сижу, разбираюсь с модулем Family, так-то все понятно как-что в нем заводится, но после того как я создал в нем несколько записей, оказалось что их могут видеть все пользователи на сайте. Причем при заведении нового члена семьи можно выбрать родителей, созданных другими пользователями на сайте, что соответственно не правильно.

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

Я попытался реализовать сам, но в виду отсутствия опыта, у меня выводит все подряд, без ограничений. Прошу помочь исправить код чтобы выбирались записи, созданные текущим пользователем.

Вот пример моего кода:

 $ancestorgroups=array();
  $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),
  );

А вот пример оригинального кода:

$ancestorgroups=array();
  $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.jpg19.08 КБ

Комментарии

Аватар пользователя evgeny_ufa evgeny_ufa 12 декабря 2010 в 18:25

Причем если сделать похожий запрос через views, то запрос выглядит так:

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 = ***CURRENT_USER***

Попробовал я использовать ***CURRENT_USER*** в своем запросе, но выводит ошибку

Аватар пользователя evgeny_ufa evgeny_ufa 12 декабря 2010 в 19:24

Спасибо за ответ. Но у меня выходят ошибки:
Если в запросе вставить 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 ?>
Потому что опять выходит тоже самое, что и раньше

Аватар пользователя Vladimir_Z Vladimir_Z 13 декабря 2010 в 0:01

"evgeny_ufa" wrote:
А в какое место нужно вставить этот код?

Перед тем как вы делаете запрос с базе.
Условие в запросе сделайте так 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);

?>

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