MFiles.psm1

# REST-Dokumentation siehe https://wiki.kalaidos.ch/x/LMLnAw und https://wiki.kalaidos.ch/x/hh8rB

function New-MFilesObject {
    [CmdletBinding(DefaultParameterSetName = "NoFile")]
    param(
        [Parameter(ParameterSetName = "NoFile", HelpMessage = "Uid des neuen Objekts (kann nur mit Vault-Admin-Rechten gesetzt werden)")]
        [Parameter(ParameterSetName = "FileByPath", HelpMessage = "Uid des neuen Objekts (kann nur mit Vault-Admin-Rechten gesetzt werden)")]
        [Parameter(ParameterSetName = "FileByContent", HelpMessage = "Uid des neuen Objekts (kann nur mit Vault-Admin-Rechten gesetzt werden)")]
        $Uid,
        [Parameter(Mandatory, ParameterSetName = "NoFile", HelpMessage = "Objekt-Typ")]
        [Parameter(Mandatory, ParameterSetName = "FileByPath", HelpMessage = "Objekt-Typ")]
        [Parameter(Mandatory, ParameterSetName = "FileByContent", HelpMessage = "Objekt-Typ")]
        [string]$ObjectType,
        [Parameter(Mandatory, ParameterSetName = "NoFile", HelpMessage = "Objekt-Klasse")]
        [Parameter(Mandatory, ParameterSetName = "FileByPath", HelpMessage = "Objekt-Klasse")]
        [Parameter(Mandatory, ParameterSetName = "FileByContent", HelpMessage = "Objekt-Klasse")]
        [string]$ObjectClass,
        [Parameter(Mandatory, ParameterSetName = "NoFile", HelpMessage = "Metadaten-Werte")]
        [Parameter(Mandatory, ParameterSetName = "FileByPath", HelpMessage = "Metadaten-Werte")]
        [Parameter(Mandatory, ParameterSetName = "FileByContent", HelpMessage = "Metadaten-Werte")]
        [PSCustomObject]$Properties,
        [Parameter(Mandatory,ParameterSetName = "FileByPath", HelpMessage = "Dateiname für den Dateiinhalt")]
        [Parameter(Mandatory,ParameterSetName = "FileByContent", HelpMessage = "Dateiname für den Dateiinhalt")]
        [string]$SingleFileName,
        [Parameter(Mandatory,ParameterSetName = "FileByPath", HelpMessage = "Pfad, aus welchem der Dateiinhalt gelesen werden soll")]
        [string]$SingleFileSource,
        [Parameter(Mandatory,ParameterSetName = "FileByContent", HelpMessage = "Dateiinhalt für das Single File (byte array)")]
        [byte[]]$SingleFileContent,
        [Parameter(ParameterSetName = "FileByPath", HelpMessage = "Übergebene Datei in das PDF/A-Format konvertieren")]
        [Parameter(ParameterSetName = "FileByContent", HelpMessage = "Übergebene Datei in das PDF/A-Format konvertieren")]
        [switch]$ConvertToPdfA,
        [Parameter(ParameterSetName = "FileByPath", HelpMessage = "Texterkennung ausführen, damit Volltextsuche möglich wird")]
        [Parameter(ParameterSetName = "FileByContent", HelpMessage = "Texterkennung ausführen, damit Volltextsuche möglich wird")]
        [switch]$PerformOcr
    )
    process{
        $Body = [PSCustomObject]@{
            "Objecttype" = $ObjectType;
            "Objectclass" = $ObjectClass;
            "Properties" = $Properties;
        };
        if ($PSBoundParameters.ContainsKey("Uid")) {
            $Body | Add-Member -MemberType NoteProperty -Name "ObjectGuid" -Value (ConvertTo-WeeduGuid $Uid);
        }
        if ($PSBoundParameters.ContainsKey("SingleFileName")) {
            if ($PSBoundParameters.ContainsKey("SingleFileSource") -and -not $PSBoundParameters.ContainsKey("SingleFileContent")) {
                $SingleFileContent = [System.IO.File]::ReadAllBytes($SingleFileSource);
            }
            if (-not $SingleFileContent) {
                Write-Error "Wenn eine SingleFileName angegeben wird, muss entweder eine SingleFileSource oder ein SingleFileContent angegeben werden."
                return;
            }
            $SingleFileValue = [PSCustomObject]@{
                "Filename" = $SingleFileName;
                "Data" = [System.Convert]::ToBase64String($SingleFileContent)
            }
            $Body | Add-Member -MemberType NoteProperty -Name "SingleFile" -Value $SingleFileValue;
        }

        return Invoke-Weedu -Uri "/rest/MFilesObject/Generic?performOCR=$PerformOcr&convertToPdf=$ConvertToPdfA" -Method POST -Body $body;
    }
}

function New-MFilesDocument {
    [CmdletBinding(DefaultParameterSetName = "FileByPath")]
    param(
        [Parameter(ParameterSetName = "FileByPath", HelpMessage = "Uid des neuen Objekts (kann nur mit Vault-Admin-Rechten gesetzt werden)")]
        [Parameter(ParameterSetName = "FileByContent", HelpMessage = "Uid des neuen Objekts (kann nur mit Vault-Admin-Rechten gesetzt werden)")]
        $Uid,
        [Parameter(Mandatory, ParameterSetName = "FileByPath", HelpMessage = "Dokument-Klasse")]
        [Parameter(Mandatory, ParameterSetName = "FileByContent", HelpMessage = "Dokument-Klasse")]
        [string]$DocumentClass,
        [Parameter(Mandatory, ParameterSetName = "FileByPath", HelpMessage = "Metadaten-Werte")]
        [Parameter(Mandatory, ParameterSetName = "FileByContent", HelpMessage = "Metadaten-Werte")]
        [PSCustomObject]$Properties,
        [Parameter(Mandatory, ParameterSetName = "FileByPath", HelpMessage = "Dateiname für den Dateiinhalt")]
        [Parameter(Mandatory, ParameterSetName = "FileByContent", HelpMessage = "Dateiname für den Dateiinhalt")]
        [string]$SingleFileName,
        [Parameter(Mandatory, ParameterSetName = "FileByPath", HelpMessage = "Pfad, aus welchem der Dateiinhalt gelesen werden soll")]
        [string]$SingleFileSource,
        [Parameter(Mandatory, ParameterSetName = "FileByContent", HelpMessage = "Dateiinhalt für das Single File (byte array)")]
        [byte[]]$SingleFileContent,
        [Parameter(ParameterSetName = "FileByPath", HelpMessage = "Übergebene Datei in das PDF/A-Format konvertieren")]
        [Parameter(ParameterSetName = "FileByContent", HelpMessage = "Übergebene Datei in das PDF/A-Format konvertieren")]
        [switch]$ConvertToPdfA,
        [Parameter(ParameterSetName = "FileByPath", HelpMessage = "Texterkennung ausführen, damit Volltextsuche möglich wird")]
        [Parameter(ParameterSetName = "FileByContent", HelpMessage = "Texterkennung ausführen, damit Volltextsuche möglich wird")]
        [switch]$PerformOcr
    )
    process{
        New-MFilesObject -Uid $Uid `
                         -ObjectType "MFBuiltInObjectTypeDocument" `
                         -ObjectClass $DocumentClass `
                         -Properties $Properties `
                         -SingleFileName $SingleFileName `
                         -SingleFileSource $SingleFileSource `
                         -SingleFileContent $SingleFileContent `
                         -ConvertToPdfA $ConvertToPdfA `
                         -PerformOcr $PerformOcr;
    }
}


Export-ModuleMember -function New-MFilesObject
Export-ModuleMember -function New-MFilesDocument