Hozzászólás törlésére legyen joga a tartalom beküldőjének

aboros képe

Egy közösségi oldalon úgy kéne beállítanom a jogosultságokat, hogy adott tartalom szerzője törölhessen a tartalomra érkező hozzászólásokban. Nem találtam eddig ilyen modult, úgyhogy marad az, hogy írnom kéne egyet.

Talán nem lesz bonyolult, valahogyan a jogosultságokba bele kéne babrálnom, csak nem tudom hol dől el az, hogy a "törlés" link kikerül e vagy sem. Hogy tudok ebbe egy saját modullal beavatkozni? Merre induljak? Van ilyesmire példamodul vagy milyen hook_ -okat kéne megnéznem?

Előre is köszönöm!

Drupal verzió: 
zila képe

Én a comment modul linkjeit próbálnám meg kiegészíteni a 'törlés' linkkel, amennyiben a hozzászólás olyan tartalomhoz tartozik aminek a tulajdonosa az éppen belépett felhasználó... Aztán a törlést már a saját modulban lehet elvégezni.

0
0

--
IE doesn't support internet

aboros képe

de nem szeretnék egy saját modullal belekavarni a comment tábláiba, inkább valahogy el szeretném érni azt, hogy jogot kapjon a felhasználóm a törlésre és onnantól akkor a comment intézi a dolgát, mintha én törölnék.

(pl valami változik a comment modulban és írhatom újra a modulomat..)

0
0

-
clear: both;

Sweetchuck képe

Azt javaslom alaposan teszteld mielőtt bármit is csinálnál.
Bőven lehet mit cifrázni rajta. Például a hook_perm()-mel jogosultságokat csinálni hozzá, tartalom típusonként.

/**
 * Implementation of hook_menu_alter().
 */
function comments_to_me_menu_link_alter(&$items) {
  $item = $items['comment/delete'];
  unset($items['comment/delete']);
 
  $item['access callback']  = 'comments_to_me_access_delete';
  $item['access arguments'] = array(2);
  $items['comment/delete/%_comment_load'] = $item;
}
 
/**
 * Implementation of hook_link().
 */
function comments_to_me_link($type, $node = NULL, $teaser = FALSE) {
  if ($type == 'comment') {
    $links = array();
    $comment = &$node;
    if (node_comment_mode($comment->nid) == COMMENT_NODE_READ_WRITE AND comments_to_me_access_delete($comment)) {
      $links['comment_delete'] = array(
        'title' => t('delete'),
        'href'  => "comment/delete/$comment->cid",
      );
    }
    return $links;
  }
}
 
function comments_to_me_access_delete($comment) {
  global $user;
  $node_uid = db_result(db_query("SELECT uid FROM {node} WHERE nid = '%d'", $comment->nid));
  return ($user->uid == $node_uid AND $user->uid);
}
0
0
aboros képe

a link megjelenik, de sajnos ha kattint a user, akkor hozzáférés megtagadva, teljesen jogosan. (képzeld, ha csak úgy beírhatnám, hogy node/42/delete és nem tagadná meg, hanem kérné a megerősítést;)

valami grantID -k rémlenek, hogy azokba kéne belekavarni egyébként, csak gőzöm sincs azokról.

keresgélek, olvasgatok, próbálkozok. ;)

mindenesetre a linket hibátlanul kiteszi ;)

0
0

-
clear: both;

Sweetchuck képe

/**
* Implementation of hook_menu_alter().
*/
function comments_to_me_menu_alter(&$items) {
  $items['comment/delete']['access callback']  = 'comments_to_me_access_delete';
  $items['comment/delete']['access arguments'] = array(2);
  $items['comment/delete']['page arguments']   = array(2);
}
 
/**
 * Implementation of hook_link().
 */
function comments_to_me_link($type, $node = NULL, $teaser = FALSE) {
  if ($type == 'comment') {
    $links = array();
    $comment = &$node;
 
    if (
      node_comment_mode($comment->nid) == COMMENT_NODE_READ_WRITE
      &&
      (user_access('administer comments') XOR comments_to_me_access_delete($comment))
    ) {
      $links['comment_delete'] = array(
        'title' => t('delete'),
        'href'  => "comment/delete/$comment->cid",
      );
    }
    return $links;
  }
}
 
function comments_to_me_access_delete($cid) {
  global $user;
  if (user_access('administer comments', $user)) {
    return TRUE;
  }
 
  $comment = (is_object($cid) ? $cid : _comment_load($cid));
  $node_uid = db_result(db_query("SELECT uid FROM {node} WHERE nid = '%d'", $comment->nid));
  return ($node_uid AND $user->uid AND $user->uid == $node_uid);
}
0
0
aboros képe

van benne implementation of hook_menu_alter() csak elírtad az eljárás nevét utána:

function comments_to_me_menu_link_alter(&$items) {

helyett:
function comments_to_me_menu_alter .. valahogy belekerült egy "link" amit nem vettem észre elsőre csak átkopiztam, szóval ezért nem futott le a menu_alter mert menu_link_alter van helyette és így meg is tagdta a drupal a hozzáférést!

szóval nagyon kösz, mégiscsak ez jó megoldás!

0
0

-
clear: both;

aboros képe

ircen kértem segítséget és az derült ki, hogy egyrészt létezik egy user comment nevű modul, ami ezt akarja megvalósítani. (sajna dev) kipróbálom azt, megnézem jó e.

ha nem, akkor pedig eddig az derült ki, hogy a hook_menu_alter() -ben felülírom a linktörlés menünek az 'access arguments' részét és akkor okés lesz elvileg.

majd megírom melyik lett ;)
nagyon köszi mindenkinek!

0
0

-
clear: both;