status -> 0, de hogyan

eMeLA képe

A tartalom típusnak alapból a status értéke 1, vagyis bekapcsolt, igy "közzétett" lesz a beküldött node.

Azt szereteném, ha bizonyos felhasználók ne közzétett node-ot tudjanak beküldeni, vagyis a status értéke 0 legyen.

Ennek megoldása lehetne (4.7.6-ban működött)

1. form_alter-rel, az alábbi értékek nullára állítása:

$form['options']['status']['#default_value'] = null;
$form['#node']->status = null;

Ez nem működik, beküldés után közzétett lesz a node. (?)

2. form_alter-rel, a $form['#submit']-ba egy saját függvényhívás elhelyezése, ahol az alábbi érték nullára állítás van:

$form['status'] = null;

Ez sem működik, itt is közzétett lesz a node.

A furcsa az, hogy ilyet már csináltam 4.7.6 alatt, de 5.1 alatt valamiért nem működik (nekem).

Mit rontottam el ? Esetleg más megoldás ?

crt képe

Szia.

Csak egy ötlet: ha a "null" helyett 0-t írsz, akkor sem jó?

Üdv: Zoli

0
0
eMeLA képe

ötletnek jó, de nem jó (sajnos)

0
0

...mit tudok: http://web.termuves.hu

eMeLA képe

Finomítom a problémát:

A html formba eleve nem teszi be a status értékét, csak ha van a "Közzétételi beállítások" megváltoztatására jogosultsága az illetőnek (ez persze logikus így). Ugyanez vonatkozhat/vonatkozik a form['submit'] kibővítésére, mivel gondolom az értéket az alapbeállításból veszi, nem pedig a $form változóból.

Magyarán ez így zsákutca.

A kérdés, tud-e valaki valamilyen megoldást a problámára.

Adva van mondjuk 5 ember (aki mondjuk "hirező" jogosultsággal rendelkezik), aki kuldhet be "tartalom" típusú node-ot. Alapból "közzétett" node-ok ezek. Viszont van egy ember, akinek csak adminisztrátori jóváhagyás után jelenhet meg beküldött node-ja.

Alapvetően modulfejlesztés vonalon érdekelne ötlet, de ha valaki modult tud mondani azon a vonalon is el tudok indulni.

0
0

...mit tudok: http://web.termuves.hu

Hojtsy Gábor képe

Be kell tenni a formba a mezőt akkor, ha nincs ott. Nem elég annyi kód, amit írtál, az nem adja meg minden adatát a mezőnek, így nem tudja úgy menteni az értéket sem. Szerintem itt lehet a kutya elásva.

0
0
eMeLA képe

Nem

A megfelelő értékek szerepeltnek az form_alter $form változóban, de mivel nincs jogosultsága az illetőnek a "közzétételi beállítások" megváltoztatására, ezért a program eleve nem teszi be a formba az értékeket.

Ugyan ez vonatkozik a $form['submit']-ban megadott függvény esetén: itt is szerepel a status változó és értéke csak ezt sem veszi figyelembe a tároláskor.

Tehát az értékek mindenhol szerepelnek, de nem veszi fegyelembe a program őket. Ha viszont adok jogosultságot a "tartalmak adminisztrációja"-ra akkro egy csomó olyan dolgot is tehetne a felhasználó amit nem kellene. (ebben az esetben a form_alter $form-ban a status #type érték checkbox helyére hidden-t kellen írni és a #default_value értéket 0-ra állítani és minden jó lenne)

0
0

...mit tudok: http://web.termuves.hu

Hojtsy Gábor képe

Látom, a node_save() ugyan már nem ellenőrzi a jogokat, de az adatok előállítására a node_submit() használatos, ami viszont szépen megnézi, hogy van-e jogod a status-t állítani.

Szerintem egyszerűbb a kérdés, ha megfordítjuk a problémát: legyen a tartalom típus alapértelmezett státusza 0. Azoknál a usereknél, akik szerinted jogosultak azonnal beküldeni, ott állítsd 1-re form_alterrel az űrlap megjelenítésekor.

0
0
eMeLA képe

Így sem jó, de nem ezzel van a gond, hanem hogyha nincs "tartalmak adminisztrációja" jogosultsága az illetőnek akkor hiába van a formban a status értéke vagy a $form['submit'] részben hozzáadott függvény $form változójába, egyszerűen nem veszi figyelembe.

0
0

...mit tudok: http://web.termuves.hu

Hojtsy Gábor képe

Ha egyik csoport sem admin jogosult, akkor persze nem megoldás, amit írtam. Én nem látom, hogy írtad volna, hogy a "hírezőidnek" (ahogy te nevezted őket) nincs tartalom admin joguk.

0
0
Hojtsy Gábor képe

A Drupal 5.2-ben pont az itt problémás rész is törlésre került a kódból. Hogy miért, azt fel lehetne kutatni a CVS naplókból, ha bővebben érdekel. Ez a kód okozza a problémád, amit az 5.2-ben töröltek:

  // Process the workflow options and provide defaults. If the user
  // can not administer nodes, ignore the form and either use the
  // saved values if the node exists, or force the defaults.
  if (!$access && $node->nid) {
    $saved_node = node_load($node->nid);
  }
  else {
    $node_options = variable_get('node_options_'. $node->type, array('status', 'promote'));
  }
  foreach (array('status', 'promote', 'sticky', 'revision') as $key) {
    if (!$access && $node->nid) {
      $node->$key = $saved_node->$key;
    }
    else if (!isset($node->$key) || !$access) {
      $node->$key = in_array($key, $node_options);
    }
  }

Én nem látom a diffben, hogy máshol ez a korlát visszajött más formában. Gondolom azért került ki, mert nem lehetnek ilyen űrlap elemek, ha nincs erre jog (ezt a validáció úgyis ellenőrzi, hogy "form injection" ne legyen lehetséges), így az eredeti adatok különben is megmaradnak. Most viszont van lehetőség felülírásra :)

(A Drupal.hu 5.2-re frissítése közben néztem át a diffet).

0
0