Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module ›

Problem mit Userrechten bei Drupal 4.7 beta2 und angepassten Modulen

Eingetragen von quiptime (4972)
am 20.12.2005 - 13:00 Uhr in
  • Module

Hallo!

Habe Drupal 4.7 beta2 installiert. Da es nur wenige angepasste Module für 4.7 gibt habe ich es mal selbst probiert. Dabei habe ich verschiedene Module verwendet. Z. Bsp. img_assist als größeres Modul und filebrowser als kleines Modul.

Bei allen von mir anngepassten Modulen tritt das gleiche Problem auf.

Ich kann die Module als admin nicht konfigurieren.

Was funktionert?

- Modul ein oder ausschalten
- Berechtigungen für das Modul setzen

Was funktioniert nicht?

- die Konfiguration des Modules selbst in den Einstellungen

Dabei verweigert mir Dupal den Zugriff auf das Modul. Das Drupalinterne Logging meldet, daß Anonymous keinen Zugriff auf das Modul hat - obwohl ich ja als admin eingeloggt bin.

Was habe ich bei den angepassten Modulen verändert?

- Die Formularfelder (Formtags) an die neue Formapi. (Der formupdater nimmt da viel Arbeit ab.)
- Die Authentifizierung in der Funktion mein_modulname_perm() in Zusammenhang mit den Angaben in der Funktion mein_modulname_menu().

Offensichtlich übersehe ich da Etwas.

Hat Jemand mit 4.7 Erfahrungen oder kann mir einen Tip geben, wie ich das Problem mit der Authentifizierung lösen kann?

Gruss
quiptime

PS
Das Modul formupdater arbeitet nicht fehlerfrei!
- Bei Formtags mit Javascript werden die Javascript-Funktionsaufrufe nicht vollständig geparst. Kann man aber gut am geparsten Code erkennen - bei der Syntax eines Javascript-Funktionsaufrufes fehlen am Ende immer die drei Zeicehn )')
- Verschachtelte Formtags (Formtag im Formtag) werden nicht erkannt. Ausweg: Die Verschachtelungen im formupdater einzeln parsen.

‹ captcha für das feedback modul Sprache ändern ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Hat hier Niemand 4.7 am Laufen?

Eingetragen von quiptime (4972)
am 21.12.2005 - 18:52 Uhr

Gibt es hier Niemanden von den alten Hasen, der 4.7 installiert hat?

Da ich hier keine Datei anhängen kann poste ich den Code eines nicht 4.7 - tauglichen Modules. Das Modul filebrowser ist klein, hat nur 2 auf die neue Formapi umzustellende Forms.

Die beiden Forms sind mit dem formupdater bereits umgestellt - im Code entsprechend sichtbar.
Eventuell hat ja doch Jemand 4.7 am Laufen und probiert mal, dieses Modul zu verwenden und/oder kann den Fehler erkennen.

Hier der vollständige Modulcode filebrowser.module

<?php
// $Id: filebrowser.module,v 1.150 2005-12-14 20:08:30 dries Exp $

/**
* @file
* Enables users with appropriate permissions to browse a folder of files (FTP-like).
*/

/**
* Implementation of hook_help().
*/
function filebrowser_help($section = NULL, $sethelp = NULL) {
  static $pagehelp = '';
  if (!isset($section)) {
    $pagehelp = $sethelp;
  }
  else {
    switch ($section) {
      case 'admin/modules#description':
        return t('Provides FTP-like browsing capabilities.');
      case $_GET['q']:
        if ($pagehelp) {
          return $pagehelp;
        }
    }
  }
}

/**
* Implementation of hook_settings().
*/
function filebrowser_settings() {
//$output = form_textfield(t('Root directory'), 'filebrowser_root', variable_get('filebrowser_root', ''), 70, 100, t('Root directory used to present the filebrowser interface. Users will not be able to go up from this folder. Only a directory name under the Drupal root is accepted. Example: "public/files".'));
// my update 4.7
$form['filebrowser_root'] = array(
  '#type' => 'textfield',
  '#title' => t('Root directory'),
  '#default_value' => variable_get('filebrowser_root', ''),
  '#size' => 70,
  '#maxlength' => 100,
  '#description' => t('Root directory used to present the filebrowser interface. Users will not be able to go up from this folder. Only a directory name under the Drupal root is accepted. Example: "public/files".'),
);
$output = $form;

//$output .= form_textfield(t('Icon directory'), 'filebrowser_icons', variable_get('filebrowser_icons', ''), 70, 100, t('Name of directory, where file type icons are stored. Files should be named "file-txt.png", "file-gif.png", etc. The default icon is "file-default.png".'));
// my update 4.7
$form['filebrowser_icons'] = array(
  '#type' => 'textfield',
  '#title' => t('Icon directory'),
  '#default_value' => variable_get('filebrowser_icons', ''),
  '#size' => 70,
  '#maxlength' => 100,
  '#description' => t('Name of directory, where file type icons are stored. Files should be named "file-txt.png", "file-gif.png", etc. The default icon is "file-default.png".'),
);
$output .= $form;

return $output;
}

/**
* Implementation of hook_perm().
*/
function filebrowser_perm() {
  return array('access filebrowser');
}

/**
* Implementation of hook_menu().
*/
function filebrowser_menu($may_cache) {
  $items = array();
  if ($may_cache) {
    $items[] = array('path' => 'filebrowser', 'title' => t('filebrowser'),
      'access' => user_access('access filebrowser'), 'callback' => 'filebrowser_page',
      'type' => MENU_CALLBACK);
  }
  return $items;
}

/**
* Prints a folder layout
*/
function filebrowser_page() {
  // Build breadcrumb list for uplevel folders
  $subfolder = preg_replace("!^filebrowser/*!", "", $_GET['q']);
  $parts = explode("/", $subfolder);
  $breadcrumb = array();
  $dirname = t('root');
  if ($subfolder) {
    $dirname = array_pop($parts);
    while (count($parts)) {
      $breadcrumb[] = l($parts[count($parts) -1], filebrowser_proper_path(join("/", $parts)));
      array_pop($parts);
    }
    $breadcrumb[] = l(t('Filebrowser root'), 'filebrowser');
  }
  $breadcrumb[] = l(t('Home'), NULL);
 
  // Get file list and generate output for this folder
  $output = '';
  if (!($files = filebrowser_get_list($subfolder))) {
    drupal_set_message(t('Unable to get files for this directory'));
  }
  else {
    $headers = array_merge(
      array(
        array('data' => t("Name"), 'field' => 1),
        array('data' => t("Size"), 'field' => 2),
        array('data' => t("Last modified"), 'field' => 3),
      ), filebrowser_get_fileinfo()
    );
    filebrowser_sort_table(array(tablesort_get_order($headers), tablesort_get_sort($headers)));
   
    // Protect folders from being resorted
    $folders = array();
    foreach ($files as $rnum => $filei) {
      if ($filei[1]['data'] == '') {
        $folders[] = $filei;
        unset($files[$rnum]);
      }
    }
    usort($files, 'filebrowser_sort_table');
    $files = array_merge($folders, $files);
   
    // Drop attributes only used for sorting, so
    // these will not end up in the HTML output
    foreach($files as $rnum => $filei) {
      foreach($filei as $cnum => $cell) {
        if (is_array($cell)) {
          unset($filei[$cnum]['sv']);
        }
      }
      $files[$rnum] = $filei;
    }
   
    $output .= join('', module_invoke_all('filebrowser_pre', $subfolder));
    $output .= theme("table", $headers, $files);
  }
 
  // Note: CSS can hook on this ID to style table elements differently
  print theme("page", '<div id="filebrowser-page">' . $output . '</div>', t('%dirname directory', array("%dirname" => $dirname)), array_reverse($breadcrumb));
}

/**
* Returns a list of files in a subfolder under the admin
* specified filebrowser root. File system details (size, last
* modification) is added, plus a metafile is parsed to gather
* more information, if available.
*/
function filebrowser_get_list($subfolder = '') {
  $folder = filebrowser_safe_folder($subfolder);
  $inroot = ($folder == variable_get('filebrowser_root', ''));
 
  // Signal error in case of bogus directory name
  if (!(file_exists($folder) && is_dir($folder) && ($dir = opendir($folder)))) {
    return FALSE;
  }
 
  // Collect folders and files separately and check for a metainfo file
  $files = $folders = array();
  $infofile = FALSE;
  while (($entry = readdir($dir)) !== FALSE) {
    if (is_dir("$folder/$entry")) {
      // Skip version control system folders
      if (!in_array($entry, array(".svn", "CVS"))) {
        $folders[] = $entry;
      }
    }
    else {
      $files[] = $entry;
      if (in_array(strtolower($entry), array("descript.ion", "files.bbs"))) {
        $infofile = $entry;
      }
    }
  }
  closedir($dir);
 
  // Order folders first, then files
  sort($folders);
  sort($files);
  $files = array_merge($folders, $files);
   
  // Get metainformation about files, and construct table spaceholder
  // for files, which have no metainformation in that file
  if ($infofile) {
    $info = filebrowser_get_fileinfo("$folder/$infofile", $subfolder);
    $emptyinfo = array_fill(0, count(filebrowser_get_fileinfo()), '');
  }
   
  // Build detailed list of files
  $details = array();
  foreach ($files as $file) {
    $extrainfo = (isset($info[$file]) ? $info[$file] : $emptyinfo);
    // Some real folder or file
    if (!in_array($file, array(".", ".."))) {
      $completepath = "$folder/$file";
      if ($stat = stat($completepath)) {
        $icon = filebrowser_get_icon($completepath);
        if (is_dir($completepath)) {
          $link = l("$icon $file", filebrowser_proper_path("$subfolder/$file"));
          $size = '';
        }
        else {
          $link = "<a href=\"$completepath\">$icon $file</a>";
          $size = format_size($stat['size']);
        }
        $details[] = array_merge(
          array(
            array('data' => $link, 'class' => 'filename', 'sv' => $file),
            array('data' => $size, 'sv' => ($size ? $stat['size']: 0)),
            array('data' => format_interval(time() - $stat['mtime']), 'sv' => (time() - $stat['mtime']))
          ), $extrainfo);
      }
    }
    // The special one-up folder
    elseif ($file == ".." && !$inroot) {
      $icon = filebrowser_get_icon(NULL, 'folder');
      $link = "$icon $file";
      $parts = explode("/", $subfolder);
      array_pop($parts);
      $up = t('up');
      $link = l("$icon $file &lt;$up&gt;", filebrowser_proper_path(join("/", $parts)));
      $details[] = array_merge(array(
        array('data' => $link, 'class' => 'filename', 'sv' => $file),
        array('data' => '', 'sv' => 0),
        array('data' => '', 'sv' => 0)
      ), $extrainfo);
    }
  }
  return $details;
}

/**
* Loads file metainformation from the specified file. Also
* allows the file to specify a *callback* with which the
* descriptions are parsed, so more metainformation can be
* presented on the output.
*/
function filebrowser_get_fileinfo($fullpath = NULL, $subfolder = '') {
  static $metacols = array();

  // Return (previously generated) meta column list
  if (!isset($fullpath)) {
    return $metacols;
  }
 
  // Build meta information list
  $metainfo = array();
  if (is_readable($fullpath) && ($file = file($fullpath))) {
    foreach ($file as $line) {
      // Skip empty and commented lines
      if (trim($line) == '' || strpos(trim($line), '#') === 0) {
        continue;
      }
      list($name, $description) = explode(" ", $line, 2);
      if (isset($metainfo[$name])) {
        $metainfo[$name] .= trim($description) . " ";
      }
      else {
        $metainfo[$name] = trim($description) . " ";
      }
    }
   
    $callback = FALSE;
    if (isset($metainfo['*callback*']) && function_exists(trim($metainfo['*callback*']))) {
      $callback = trim($metainfo['*callback*']);
      unset($metainfo['*callback*']);
    }
    if (isset($metainfo['.'])) {
      filebrowser_help(NULL, $metainfo['.']);
      unset($metainfo['.']);
    }
   
    foreach ($metainfo as $name => $description) {
      $metainfo[$name] = ($callback ? $callback(trim($description), $subfolder, $name) : array(trim($description)));
    }
    $metacols = ($callback ? $callback() : array(t('Description')));
  }
  return $metainfo;
}

/**
* Returns the appropriate HTML code for an icon representing
* a file, based on the extension of the file. A specific icon
* can also be requested with the second parameter.
*/
function filebrowser_get_icon($fullpath = NULL, $iconname = NULL) {
  if (isset($fullpath)) {
    $iconname = (is_dir($fullpath) ? 'folder' : preg_replace("!^.+\\.([^\\.]+)$!", "\\1", $fullpath));
  }
  elseif (!isset($iconname)) {
    $iconname = 'default';
  }
  $iconfiles = array(
    variable_get('filebrowser_icons', '') . "/file-$iconname.png",
    variable_get('filebrowser_icons', '') . "/file-default.png"
  );
  foreach ($iconfiles as $icon) {
    if (file_exists($icon)) {
      return theme("image", $icon);
    }
  }
  return '';
}

/**
* Convert windows path values to use slashes, prevent slashes used
* repeatedly, and try to catch and eliminate path walkback attemepts.
* Also prevent from accessing version control system folders.
*/
function filebrowser_safe_folder($subfolder) {
  $folder = variable_get('filebrowser_root', '') . "/$subfolder";
  while (TRUE) {
    $safer = str_replace(array("\\", "../", "/.svn", "/CVS", ".."), array("/", "", "", "", ""), $folder);
    if ($safer !== $folder) {
      $folder = $safer;
    }
    else {
      break;
    }
  }
  $folder = preg_replace("!^/*([^/].+[^/])/*$!", "\\1", $folder);
  return preg_replace("!/+!", "/", $folder);
}

/**
* Allows easy path generation even if $path has a leading slash.
*/
function filebrowser_proper_path($path) {
  return str_replace("//", "/", "filebrowser/$path");
}

function filebrowser_sort_table($a, $b = NULL) {
  static $orderby = 0;
  static $sort = '';
  if (!isset($b)) {
    $orderby = (int) $a[0]['sql'];
    $sort = $a[1];
  }
  elseif (is_array($a) && isset($a[$orderby-1]) && isset($a[$orderby-1]['sv'])) {
    if ($a[$orderby-1]['sv'] == $b[$orderby-1]['sv']) {
      return 0;
    }
    if ($sort == 'asc') {
      return $a[$orderby-1]['sv'] > $b[$orderby-1]['sv'];
    }
    else {
      return $a[$orderby-1]['sv'] < $b[$orderby-1]['sv'];
    }
  }
}

Zu diesem Modul gehören keine weiteren Dateien.

Ich bin immer noch in der Hoffnung, das Problem lösen zu können. Eventuell kann mir ja Jemand dabei helfen.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Beta ist Beta

Eingetragen von Hinrich (136)
am 21.12.2005 - 20:43 Uhr

Da es eine Beta ist, habe ich sie nur eingeschränkt laufen, die Beta 2 noch gar nicht (wenig Zeit vor Weihnachten).

Generell hatte ich aber mit diversen CVS-Versionen die Erfahrung gemacht, dass es helfen kann (und nicht muss), die Tabelle cache vollständig zu leeren, und sich ab- und wieder anzumelden.

  • Anmelden oder Registrieren um Kommentare zu schreiben

sich ab- und wieder

Eingetragen von quiptime (4972)
am 21.12.2005 - 20:55 Uhr

@Hinrich,

sich ab- und wieder anmelden, table cache komplett leeren und Browsercookie löschen und danach neu einloggen - hatte ich alles schon probiert und hat aber nichts gebracht.

PS

Habe auf drupal.org mehrere 4.7 - taugliche module gefunden und sie installiert. Darunter print.module und emailpage.module - beide explizit als 4.7 - tauglich deklariert. Beide sind NICHT 4.7 - kompatibel.

Bei print.module habe ich die Forms auf die neue API umgestellt und die function print_perm() eingefügt (ohne print_perm() tauchte das Modul nicht in der Zugriffskontrolle auf). Mit dem Resultat: Es funktioniert nicht, gleiche Fehler wie oben beschrieben.

  • Anmelden oder Registrieren um Kommentare zu schreiben

4.7-Tauglichkeit

Eingetragen von Hinrich (136)
am 21.12.2005 - 21:08 Uhr

quiptime schrieb

Habe auf drupal.org mehrere 4.7 - taugliche module gefunden und sie installiert. Darunter print.module und emailpage.module - beide explizit als 4.7 - tauglich deklariert. Beide sind NICHT 4.7 - kompatibel.

Das mit der Tauglichkeit ist trügerisch. Die Tatsache, dass ein Modul unter dem Reiter 4.7 auftaucht, besagt nicht, dass das Modul auch bereits 4.7-tauglich ist.

Hintergrund: Das Modul project auf drupal.org ist eng verzahnt mit dem Entwicklungssystem. Die gesamte Versionskontrolle des Kerns, der Module, der Themes und der Theme Engines erfolgt durch CVS. CVS erlaubt es, an jedem beliebigen Punkt der Entwicklung entweder Markierungen (sogenannte Tags) anzubringen oder Abzweigungen (sogenannte Branches) zu erstellen. Drupal verwendet diese Branches jeweils für freigegebene Versionen.

Mit der ersten Beta von Drupal 4.7 wurde es untersagt, neue Funktionen zu implementieren (das sog. Feature Freeze). Um dennoch engagierten Entwicklern die Möglichkeit bieten zu können, neue Funktionen zu implementieren, wird in einem solchen Fall ein Branch erstellt. Entwickler von Modulen und Themes folgen in der Regel, mit der Konsequenz, dass der Branch zwar existiert, die Anpassung aber noch nicht vollständig erfolgt ist.

Das Modul project weiss aber nichts vom Entwicklungsstand der Module etc., sondern kann nur sehen, ob ein Branch esistiert. Ist das der Fall, erscheint der entsprechende Reiter.

Um die tatsächliche Tauglichkeit herauszufinden, bietet es sich an, den Strauß an Mailing-Listen einschließlich der CVS-Meldungen zu bestellen.

  • Anmelden oder Registrieren um Kommentare zu schreiben

4.7-Tauglichkeit

Eingetragen von quiptime (4972)
am 21.12.2005 - 21:56 Uhr

Die Details um die Zusammenhämge mit dem Modul project kannte icht so nicht.

Im Falle des Modules print.module klappt es aber trotzdem. Ich kann das Modul in den Settings auf Grund des beschriebenen Fehlers zwar nicht konfigurieren, aber es ist in den nodes verfügbar und der Link - printer friendly version - funktioniert.
Ich habe mir nochmal die INSTALL.txt, README.txt usw. des Modules durchgelesen: Der Maintainer selbst spricht in diesen Dateien an keiner Stelle über die 4.7 - Kompatibilität

Ich bin immer noch der Hoffnung, daß einer der alten Hasen hier eine 4.7 testet und eventuell einen Tipp zur Fehlerursache hat. Ich stecke nicht so tief in Drupal um die Fehlerursache erkennen.

Gruss
quiptime

PS
Ein wirklich 4.7 -kompatibles Modul habe ich installiert: front_page.module

  • Anmelden oder Registrieren um Kommentare zu schreiben

4.7-Tauglichkeit

Eingetragen von Hinrich (136)
am 21.12.2005 - 23:00 Uhr
quiptime schrieb

Ich bin immer noch der Hoffnung, daß einer der alten Hasen hier eine 4.7 testet und eventuell einen Tipp zur Fehlerursache hat. Ich stecke nicht so tief in Drupal um die Fehlerursache erkennen.

Die Fehlerursachen können vielfältig sein. Das Tutorial listet fast 20 Einzelpunkte auf, die geändert werden müssen. Zusätzlich noch einige Punkte, die auf absehbare Zeit geändert werden müssen.

  • Anmelden oder Registrieren um Kommentare zu schreiben

4.6-Module nach 4.7 upgraden

Eingetragen von rst (343)
am 22.12.2005 - 00:17 Uhr

Vielleicht kann dir dies helfen: Converting 4.6 modules to 4.7

Ralf

  • Anmelden oder Registrieren um Kommentare zu schreiben

Habe es inzwischen

Eingetragen von quiptime (4972)
am 16.01.2006 - 19:25 Uhr

Habe es inzwischen aufgegeben, selbst Module nach 4.7 zu konvertieren. Erfordert einen zu tiefen Einstieg in Drupal und so tief will ich eigentlich nicht in Drupal einsteigen - spaeter eventuell ergibt sich das von selbest. Ausserdem ist die allgemeine Entwicklung hin zu 4.7 an einigen Stellen doch recht zuegig - wenn auch etwas konfus.

Gruss quiptime

  • Anmelden oder Registrieren um Kommentare zu schreiben

Development

Eingetragen von holger@drupal.org (544)
am 28.01.2006 - 22:14 Uhr

Du kannst jederzeit die Module-Entwickler über Drupal.org kontaktieren. Die entsprechenden Namen findest du auf den Seiten der jeweiligen Module. Das ist der unkomplizierteste und schnellste Weg ;-)

mfg holger

drupal experience http://cms.stnetwork.de

Projekte: www.ebec.net | www.stnetwork.de

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Seattle professional chauffeurs
  • Drupal 7 Forum Beitrag mit Bilder einstellen
  • erfahrung mit dem Modul script manager
  • Verständnisfrage private_files in Drupal
  • [erledigt]MP3 in Drupal 10 einbinden
  • HTML oder JS Code wird nicht ausgeführt
  • Posts von einem Inhaltstyp in einen anderen verschieben
  • Mysql Ver 8.0.41 zu MariaDB 10.11.11
  • DrupalCamp Ruhr 12. / 13. September in Essen!
  • [gelöst]Zugriff auf inhaltstyp für angemeldete Benutzer wird verweigert
  • Word DOC Export Modul/Funktion gesucht
  • W3CSS Paragraphs Views
Weiter

Neue Kommentare

  • dinmikkith schrieb JavaScript
    vor 1 Woche 1 Tag
  • Ex- und Import nutzen
    vor 1 Woche 3 Tagen
  • cut&paste lässt sich automatisieren
    vor 1 Woche 4 Tagen
  • geht, soweit mir bekannt, nur
    vor 1 Woche 4 Tagen
  • Inkompatibilität zwischen MySQL u. MariaDB sowie SQL-Basiswissen
    vor 1 Woche 4 Tagen
  • JavaScript gehört in Drupal
    vor 1 Woche 5 Tagen
  • JavaScript gehört in Drupal
    vor 1 Woche 5 Tagen
  • Ich würde mich an die beiden
    vor 3 Wochen 2 Tagen
  • @dinmikkith leider
    vor 3 Wochen 3 Tagen
  • Da gibt's schon was. Ich
    vor 3 Wochen 3 Tagen

Statistik

Beiträge im Forum: 250018
Registrierte User: 20330

Neue User:

  • WinfredAccom
  • antidetect-browser25
  • freundbs

» Alle User anzeigen

User nach Punkten sortiert:
wla9455
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3855
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 1 Benutzer und 8 Gäste online.

Benutzer online

  • WinfredAccom

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association