NextGEN-Gallery: Galerie-Ansicht anpassen und ‘Custom Field’ abfragen

Die Ansicht ‘Basic Thumbnails’ dient zur Anzeige der Bilder einer einzelnen Galerie. Um diese Ansicht zu individualisieren, kann in den ‘Gallery Settings’ das dafür zu verwendende Template festgelegt werden. Ich habe dort die mitgelieferte “gallery.php” ausgewählt und diese Datei um einige Details erweitert.

Beispielsweise habe ich die Abfrage eines galerie-spezifischen Custom Fields eingebaut, mit dem ich steuere, welche Aktionen der Nutzer auf der Galerie-Seite ausführen darf.  Der Einbau eines solchen Gallery Settings: Basic Thumbnails‘Custom Fields’ wurde in Galerien nur für bestimmte Benutzer freigeben genauer beschrieben.

$gallery->gid in gallery.php ermitteln

Innerhalb der Template-Datei “gallery.php” steht die Variable $gallery zur Verfügung. Diese ermöglicht den Zugriff auf das anzuzeigende Galerie-Objekt und die enthaltenen Bilder.

Abweichend von den Album-Templates (album-compact.php, album-extend.php) führt hier jedoch der Zugriff auf $gallery->gid nicht zum Erfolg. Das Feld gid ist in dem hier vorliegenden Galerie-Objekt nicht vorhanden. Stattdessen wird die angezeigte Galerie über eine $gallery->ID identifiziert, die anscheinend dynamisch generiert wird und nicht aus der Datenbank kommt. Das gilt gleichermaßen für den Galerie-Autor, der Zugriff auf $gallery->author funktioniert hier ebenfalls nicht.

Die ‘gid’ der Galerie wird benötigt, um galeriespezifische ‘Custom Fields’ zu laden, die vorhandene $gallery->ID hilft dabei nicht weiter. Die Abfrage eines galerie-spezifischen ‘Custom Fields’ mit dem gleichen Code wie im Album-Template ist also nicht möglich. Folgendes funktioniert nicht:

$isEditorUser = nggcf_get_gallery_field($gallery->gid, “Title Editor”);

Warum das so ist, habe ich nicht genauer erforscht. Vielleicht liegt es daran, dass angezeigte Galerien auch dynamisch generiert werden können, beispielsweise auf Basis von TAGs, und deshalb nicht unbedingt 1:1 einer vordefinierten, gespeicherten Galerie entsprechen müssen. Oder diese Felder werden dort einfach nicht benötigt. Oder es handelt sich um eine unbeabsichtigte Inkonsistenz.

Die Lösung

Für Abhilfe sorgt ein Nachladen der benötigten Felder direkt aus der Datenbank, und zwar auf Basis des vorhandenen Galerie-Namens. In die gallery.php wird ganz oben folgender Code eingefügt:

 
<?php
/**
Template Page for the gallery overview
// ...
?>
<?php
  // gallery.php: 'gid' und 'author' hier nicht verfügbar -> nachladen:
  global $wpdb;
  $gid = 0;
  $author = 0;
  $gname = ($gallery->name);
  $sql = "SELECT gid,author FROM " . 
          $wpdb->prefix . "ngg_gallery WHERE name=" . '"' . $gname . '"';
  $fields = $wpdb->get_results($sql); 
  $key = $fields[0];
  $gid = $key->gid;
  $author = $key->author;
  // echo("gid:" . $gid . " / author:" . $author);
?>

Dies lädt ‘gid’ und ‘author’ der angezeigten Galerie. Damit können nun auch galerie-spezifische ‘Custom Fields’ geladen werden und beispielsweise nutzerspezifische Berechtigungen gepüft werden.

Die folgende Methode wird direkt unter diesem Code eingefügt. Sie lädt das galeriespezifische ‘Custom Field’ namens “Title Editor” und gibt TRUE zurück, wenn der momentan angemeldete Nutzer in diesem Feld enthalten ist:

 
<?php
  function isImageEditor($gid, $author) {
    global $current_user;
    get_currentuserinfo();
    $loginUser = strtolower($current_user->user_login);
    $allowedUser = nggcf_get_gallery_field($gid, "Title editor");
    $allowedUser = trim($allowedUser);
    $author = get_userdata((int) $author);
    $autorUser = $author->display_name;
    $userInArray = FALSE;

    if (empty($allowedUser)) {
      $allowedUser = "Niemand";
    } else {
      $userArray = explode(",", $allowedUser);
      $cleanedUserArray = array_map('trim', $userArray);
      $userArray = array_map('strtolower', $cleanedUserArray);
      $userInArray = in_array($loginUser, $userArray);

      // Always accept the gallery author
      if ($userInArray != TRUE) {
        if (strtolower($autorUser) == $loginUser) {
          $allowedUser = $allowedUser . ", " . $autorUser;
          $userInArray = TRUE;
        }
      }
    }

    // echo ("Allowed user: " . $allowedUser);
    if (current_user_can('add_users') || $userInArray) {
      return TRUE;
    }
    return FALSE;
  }
 ?>
 

Damit kann diese Berechtigung nun im weiteren Code der gallery.php einfach abgefragt und zur Steuerung der Seiten-Darstellung verwendet werden:

 
<?php
  if (isImageEditor($gid, $author)) {
    echo("<div> Image-Titel bearbeiten </div>");
    // ...
  }
?>
  

 

Getestet mit NextGEN Gallery Version 2.0.66.29

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *