Tartalom mentésének megakadályozása biz. feltételek mellett

pero képe

Sziasztok

Azt szeretném elérni, hogy például egy szerepkör egy tagja ne tudjon úgy update-elni egy tartalmat, hogy annak egy mezője üres.

Rules-al "Tartalom mentése előtt" event esetén hiába adom hozzá action-nek az átirányítást, a mentés végrehajtódik.

Köszönöm!

Drupal verzió: 
szantog képe

Így nem fog menni..

Egy ritka, szemét hookot mutatok, szerintem senki még nem használta, de ide kell zongoráznod a feltételt: https://api.drupal.org/api/drupal/modules%21field%21field.api.php/functi...

0
0

----
Rájöttem, miért kérdezek olyan ritkán a drupal.hu-n. Amíg szedem össze az infokat a kérdéshez, mindig rájövök a megoldásra.

szantog képe

Nem ez való neki.. Sajna eddig jobbat nem találtam, mint
hook_form_FORM_ID_alter vudu. Itt kell varázsolni:

function MODULOM_form_[node_type]_node_form_alter(&$form, &form_state) {
  $disabled_rids = array(3, 4, 5); //role idket kell előszedni
  global $user;
  if (in_array($disabled_rids, $user->roles)) {
    $form['field_MEZODNEVE']['#required'] = TRUE;
  }
}

Elvileg a többit megoldja a form_api.
Ha meg ilyen date, vagy hasonló furfangos elementet akarsz megfogni, akkor sajna szét kell nézni a modulban, ami azt a form elementet előállítja, de 90%, az adott form-mezőnél meg lehet fogni a #required propertyt.

1
0

----
Rájöttem, miért kérdezek olyan ritkán a drupal.hu-n. Amíg szedem össze az infokat a kérdéshez, mindig rájövök a megoldásra.

nevergone képe

+1 a form_alterre
Amikor nekem volt ilyesmi problémám, ott sikerült megcsípnem.

0
0
pero képe

köszönöm szépen
Úgy tűnik akkor kénytelen leszek életem második modulját megírni.
Az első a "hello world" blokk megjelenítő modul volt :)))

Amit viszont nem írtam az eredeti kérdésbe, hogy ne bonyolítsam:
A workflow modult használom, ami egy tartalomtípushoz "state"-eket rendel. És majd azt kéne figyelnem, hogy bizonyos state-be nem kerülhet a node, ha bizonyos mezője üres.
Remélem ez a szűrés is elérhető ebben a hook-ban...

0
0
pero képe

Elnézést, egy kicsit még sötétben vagyok:)

e helyett:
function MODULOM_form_[node_type]_node_form_alter(&$form, &form_state)

nem ez kéne?:
function MODULOM_form_[node_type]_alter(&$form, &form_state)

0
0
szantog képe

Nem teljesen. Amit írtál, az a hook_form_BASE_FORM_ID_alter-e hajaz, így jó: https://api.drupal.org/comment/47958#comment-47958

A BASE_FORM_ID ez esetben node_form.

Én a hook_form_FORM_ID_altert írtam, ahol a FORM_ID a [node_type]_node_form

Valamelyikkel csak jó lesz, kapcsold be a devel, modul, dobd bele a függvénybe, hogy dsm($form), és majd bejön az egyiknél. :)

0
0

----
Rájöttem, miért kérdezek olyan ritkán a drupal.hu-n. Amíg szedem össze az infokat a kérdéshez, mindig rájövök a megoldásra.

pero képe

Már értem, köszönöm.

0
0
pero képe

hmm, elakadtam :)
A függvény még feltételek nélkül:

  1. function mymodule_form_artwork_node_form_alter(&$form, &$form_state) {
  2.  
  3. dsm($form);
  4.  
  5. $form['terms_of_use'] = array(
  6. '#type' => 'checkbox',
  7. '#title' => t("I agree with the website's terms and conditions."),
  8. '#required' => TRUE,
  9. );
  10.  
  11.  
  12. $form['field_artwork_elokeszitett']['#required'] = TRUE;
  13. }

- a tartalomtipus neve: artwork
- a dsm() kilistázza az adatokat
- terms_of_use form elem odakerül (ez csak a teszt végett)
- a field_artwork_elokeszitett mező mégsem lesz kötelező. Ez a mező amúgy egy file mező, de gondolom ez nem igazán számít...
Mi lehet a gond?
köszi!

0
0
pero képe

rájöttem, így működik:

$form['field_artwork_elokeszitett']['und']['0']['#required'] = TRUE;

0
0
nevergone képe

pero képe

Végülis a teljes kód ez lett:
Az IF-en kellett kicsit még csiszolnom, hogy működjön.

  1. function mymodule_form_artwork_node_form_alter(&$form, &$form_state) {
  2. $disabled_rids = array(10,11); //role idket kell előszedni
  3. global $user;
  4.  
  5. if ( count(array_intersect($disabled_rids, array_keys($user->roles)))>0 ) {
  6. $form['field_artwork_elokeszitett']['und']['0']['#required'] = TRUE;
  7. }
  8. }
1
0
sajt képe

Ezt a modult néztétek már? https://drupal.org/project/required_by_role

0
0
pero képe

Nem ismertem, hasznos modul, köszi.
Az én problémámra viszont nem elég, mivel a workflow modul által kezelt státusz váltások engedélyezését szeretném egyes szerepkörök esetén bizonyos mezők kötelező megadásához kötni.
Erre tuti saját modul kell :)

0
0
sajt képe

Egyszer eljön az a pillanat is :) Sok sikert!

0
0