Function "lmb fileUpload()"

From Limbas Wiki

Jump to: navigation, search

lmb_fileUpload

mixed lmb_fileUpload(array $file,numeric $level,array $relation=null, boolean $uploadfrom=false, array $dublicate=array(),boolen $verbose=false)

Funktion zum Upload einer oder mehrerer Dateieni ins DMS (./limbas_src/extra/explorer/filestructure.lib)

Zusammenfassung der Parameter:

  • Informationen der hochgeladenen Datei über das array $file
  • Zielordner
  • Verknüpfungsparamter
  • optionale Dateiquelle
  • Behandlung von Dublikaten


Parameter

$file

gültige Parameter einer hochgeladenen Datei

  • $file["file"] - string : absoluter Pfad der hochgeladenen Datei
  • $file["file_name"] : string -Name der Datei
  • $file["file_type"] : string - MIMETYPE der Datei
  • $file["file_archiv"] : boolean - true falls zip Archiv ausgepackt werden soll

$level

gültige Ordner ID in welche die Datei kopiert werden soll

$relation

Datensatz oder Datensätze zu welchem die Datei verknüpft werden soll. Es können Felder vom Typ Verknüpfung (field_type 11) sowie Upload (field_type 6) verwendet werden.

  • $relation["gtabid"][0] : Tabellen ID
  • $relation["fieldid"][0] : Feld ID
  • $relation["datid"][0] : Datensatz ID

$uploadfrom

autorisiert ein upload aus unterschiedlichen Quellen ohne vorheriges HTTP Upload

  • 1 : import aus internem System
  • 2 : import aus einem lokalem Pfad
  • 3 : import aus externem Storage - ohne physikDublikatealische datei

$dublicate

behandelt das Vorgehen falls die Datei schon existiert. Der Parameter "typ" definiert die Art wie mit der vorhandenen Datei umgegangen werden soll. Der Parameter "subj" kann optional einen Beschreibungstext bei Versionierung beinhalten. Über den Parameter "existingFileID" kann eine Datei ID übergeben werden welche als Duplikat gefunden wurde. In manchen Fällen möchte man selbst prüfen ob und welche Datei als Duplikat existiert und kann die systeminterne Duplikatsuche überschreiben. Dies ist unter anderem für die Erweiterungs Funktion "lmb_extendedFileUpload" relevant.

  • $dublicate["subj"] : version notice if versioning
  • $dublicate["existingFileID"] : [numeric]
  • $dublicate["typ"]  : overwrite, rename, versioning, skip, ignore
    • overwrite : Datei wird überschrieben, Name bleibt gleich
    • rename : Datei wird umbenannt in Kopie von
    • versioning : Datei wird versioniert, Name bleibt gleich
    • skip : Datei wird nicht hochgeladen oder erzeugt
    • ignore : Datei wird mit dem gleichen Namen gespeichert

$verbose

  • true : erzwingt eine detaillierte Ausgabe
  • false : die Funktion gibt nur die Datensatz ID der importieren Datei an

Rückgabewert

Array aus den verarbeiteten Dateiinformationen falls $verbose = true

  • $fl["nextid"] : die vergebene Datensatznummer der Tabelle LDMB_FILES
  • $fl["filesize"] : die Dateigröße
  • $fl["filename"] : der endgültige Dateiname
  • $fl["level"] : Die Ordner ID
  • $fl['mimetype_id'] : die MimeType ID der Tabelle LMB_MIMETYPES
  • $fl['mimetype'] : der MimeType
  • $fl['secname'] : der Physische Dateiname mit dem die Datei ins Dateisystem abgelegt wurde.
  • $fl["md5"] : der MD5 Prüfschlüssel der Datei
  • $fl["vpid"] : die Datensatz ID der referenz Datei falls die Datei versioniert wurde.


Erweiterung

Die Upload Funktion kann über die festgesetzte Funktion lmb_extendedFileUpload() umgeleitet werden. Dazu wird die Funktion lmb_extendedFileUpload() in einer Erweiterungsdatei benötigt. Ist diese vorhanden wird sie am Anfang des Uploadvorgangs ausgeführt. Sie kann TRUE oder FALSE zurückgeben. Bei TRUE wird die Datei entweder direkt verarbeitet oder die Parameter angepasst. Bei FALSE bricht der Uploadvorgang ab.

mixed lmb_extendedFileUpload(array &$file, numeric &$level, array &$relation, array &$dublicate)

Die Parameter können direkt in der Funktion überschrieben werden.

Beispiele

Beispiel

Dieses Beispiel nutzt die Umleitung über eine eigene Funktion 'lmb_extendedFileUpload'

function lmb_extendedFileUpload(&$file, &$level, &$relation, &$dublicate){

  // falls in Ordner 4 hochgeladen wird, wird der Name der Datei geändert und der Zielordner geändert.
  if($level == 4){
    $level = 5;
    $file["file_name"][0] = "myfile_NEW.pdf";
  }

  // falls in Ordner 6 hochgeladen wird, wird die Datei versucht zu konvertieren.
  if($level == 6){
    if($file["file_type"][0] == 'application/pdf' AND file_exists($file["file"][0])){
       # IMACK_ConvertThumbs($file,$width=,$height=null,$prop=null,$dest_format=null,$dest_path=null
       IMACK_ConvertThumbs($file["file_type"][0],300,null,1,null,'/tmp/convert.png');
       $file["file"][0] = '/tmp/convert.png';
    }

    // Eigene Duplikatssuche im Ordner ID 4 anstatt Order 6
    if($dublicate['existingFileID'][0] = check_duplicateFile($file["file_name"][0], 4)){
        $dublicate['typ'][0] = 'overwrite';
    }

    if(file_exists($file["file"][0])){
      return true;
    }else{
      return false;
    }
  }

  return true;
}

Beispiel

Dieses Beispiel importiert eine zuvor hochgeladene Datei aus dem temp Ordner in das Limbas DMS. Dabei soll die Datei in den Ordner mit der ID 10 gelegt und den Namen myfile.pdf bekommen.Der Name soll automatisch umbenannt werden falls die Datei schon existiert. Nachdem die Datei importiert wurde soll sie zusätzlich zu einem spezifischen Datensatz verknüpft werden. Die Tabelle muss dazu ein Verknüpfungsfeld mit der Detaiexplorer Erweiterung besitzen.

$level = 10;
$file["file"][0] = '/tmp/htg55565765.tmp';
$file["file_name"][0] = myfile.pdf;
$file["file_type"][0] = 'application/pdf';
$dublicate['type'][0] = 'rename';
$relation = array("datid" => $ID,"gtabid" => $gtab_id,"fieldid" => $field_id);

$output = lmb_fileUpload($file,$level,relation,null,$dublicate);


Beispiel

Dieses Beispiel importiert analog zum obigen Beispiel eine Datei mit dem Unterschied das die Datei nicht hochgeladen werden musste also schon auf dem Dateisystem existiert. Der Parameter $uploadfrom forciert das die Datei importiert wird ohne das die Prüfung is_uploaded_file() ausgeführt wird. Falls sie im DMS schon existiert wird sie durch den Parameter $dublicate['type'][0] = 'skip' ignoriert.

$level = 10;
$file["file"][0] = '/mnt/myfiles/mytest.pdf';
$file["file_name"][0] = mytest.pdf;
$file["file_type"][0] = 'application/pdf';
$dublicate['type'][0] = 'skip';
$uploadfrom = 2;

$output = lmb_fileUpload($file,$level,null,$uploadfrom,$dublicate);