Добрый день.
Суть вопроса: пользователям с id роли равной '4' нужно разрешить создавать материал типа "once_per_year" один раз в течение календарного года.
Сам принцип хука понятен:
<?php
function limit_access_node_access($node, $op, $account) {
if ($op == 'create' and $node->type == 'once_per_year' and array_key_exists(4, $account->roles) == 'TRUE' and ...) {
return NODE_ACCESS_DENY;}
}
return NODE_ACCESS_IGNORE;
}
?>
Подскажите, как в условии также проверить, создан ли уже материал в этом временном интервале пользователем или нет.
Думаю через $node->created, но не понимаю как правильно описать условие.
Спасибо.
Комментарии
SELECT COUNT(*) FROM node n WHERE n.type = :type AND n.created > :date_start AND n.created < :date_end
Спасибо, то что нужно! Но еще небольшая деталь: нужно чтобы не общее количество материалов считалось, а только созданное юзером. Может подскажете?
Прямо в той же таблице, колонка uid - это id юзера. Добавляйте в условие.
Точно, затупил. Но возник еще вопрос. Добавляю условие по проверке uid текущего пользователя:
<?php
global $user;
$a= $user->uid; $d = 1524331500;
$di = 1524321200; $counter = db_query("SELECT COUNT(*) FROM {node} WHERE node.type = :type AND node.created > :date_start AND node.created < :date_end AND node.uid = :uid"
, array(':type' => 'article', ':date_start' => $di, ':date_end' => $d, ':uid' => $a))->fetchField();
....
?>Ошибки не выдает, но при проверке, я понимаю что условие по uid не выполняется. Если его убрать - все условия работают правильно в запросе. Может я не верно использую $user->uid;?
Спасибо.
Разобрался, вместо $user->uid использовал $account->uid, оно и логично)
Спасибо.