Community
    • Categories
    • Recent
    • Popular
    • Users
    • Search
    • Register
    • Login
    1. Home
    2. StefanP74
    3. Best
    Offline
    • Profile
    • Following 0
    • Followers 0
    • Topics 118
    • Posts 300
    • Groups 0

    Posts

    Recent Best Controversial
    • eMail-Benachrichtigung: Von ASCII Tabelle zu HTML-Tabelle

      Servus,

      i-doit V34

      ich habe mir gedacht, baue ich doch heute die eMail-Notification so um, dass ein HTML-eMail samt Tabelle generiert wird, anstatt einem Text-Mail mit der ASCII-Tabelle.
      Warum? Verschobener Text in Tabelle.

      Macht aus dem hier:
      jo1.PNG

      das da:
      jo2.PNG

      Datei:
      /var/www/html/src/classes/notification/isys_notification.class.php

      Zeile 1036:
      Alt:
      $l_mailer->set_content_type(isys_library_mail::C__CONTENT_TYPE__PLAIN);
      Neu:
      $l_mailer->set_content_type(isys_library_mail::C__CONTENT_TYPE__HTML);

      Alt ab Zeile 1151:

           /**
           * Builds a simple plaintext table with header. Columns are left-aligned.
           *
           * @param array $p_entities Entities
           *
           * @return string
           *
           * @todo This is not the right place. Move it to MVC view or something.
           */
          protected function build_plain_table($p_entities)
          {
              assert(is_array($p_entities));
      
              $l_table = '';
              $l_headers = [];
              $l_layouted_headers = [];
      
              if (count($p_entities) === 0) {
                  return $l_table;
              }
      
              // Layout:
      
              $l_horizontal_line = '-';
              $l_horizontal_line_header = '=';
              $l_vertical_line = '|';
              $l_edge = '+';
      
              // Analyze entities:
              $l_column_widths = [];
              $l_count = 0;
      
              // Iterate through each entity:
              foreach ($p_entities as $l_entity) {
                  // Also analyze header:
                  if ($l_count === 0) {
                      $l_count++;
      
                      $l_headers = array_keys($l_entity);
      
                      foreach ($l_headers as $l_header) {
                          $l_layouted_headers[$l_header] = $this->emphasize(self::_l($l_header));
                      }
      
                      foreach ($l_headers as $l_header) {
                          $l_column_widths[$l_header] = strlen($l_layouted_headers[$l_header]);
                      }
                  }
      
                  // Analyse values:
                  foreach ($l_entity as $l_key => $l_value) {
                      $l_value_length = strlen($l_value);
                      if ($l_value_length > $l_column_widths[$l_key]) {
                          $l_column_widths[$l_key] = $l_value_length;
                      }
                  }
              }
      
              $l_horizonatal_header_line_parts = [];
              $l_horizonatal_line_parts = [];
              foreach ($l_column_widths as $l_column_width) {
                  $l_horizonatal_header_line_parts[] = $l_horizontal_line_header . str_pad('', $l_column_width, $l_horizontal_line_header) . $l_horizontal_line_header;
                  $l_horizonatal_line_parts[] = $l_horizontal_line . str_pad('', $l_column_width, $l_horizontal_line) . $l_horizontal_line;
              }
              $l_complete_horizontal_header_line = $l_edge . implode($l_edge, $l_horizonatal_header_line_parts) . $l_edge;
              $l_complete_horizontal_line = $l_edge . implode($l_edge, $l_horizonatal_line_parts) . $l_edge;
      
              // Prepend header:
      
              $l_padded_headers = array_map([
                  $this,
                  'table_header'
              ], $l_layouted_headers, $l_column_widths);
              $l_table .= $l_complete_horizontal_header_line . "\n" . $l_vertical_line . ' ' . implode(' ' . $l_vertical_line . ' ', $l_padded_headers) . ' ' . $l_vertical_line .
                  "\n" . $l_complete_horizontal_header_line . "\n";
      
              // Iterate through each entity:
              foreach ($p_entities as $l_entity) {
                  $l_table .= $l_vertical_line;
                  foreach ($l_entity as $l_key => $l_value) {
                      $l_table .= ' ' . str_pad($l_value, $l_column_widths[$l_key]) . ' ' . $l_vertical_line;
                  }
      
                  $l_table .= "\n" . $l_complete_horizontal_line . "\n";
              }
      
              $l_table = "<pre style='font-family: Courier, monospace;'>" . htmlentities($l_table) . "</pre>";
      		
      		return $l_table;
          }
      

      Neu ab Zeile 1151:

          /**
           * Builds a simple plaintext table with header. Columns are left-aligned.
           *
           * @param array $p_entities Entities
           *
           * @return string
           *
           * @todo This is not the right place. Move it to MVC view or something.
           */
      	protected function build_plain_table($p_entities)
      	{
      		assert(is_array($p_entities));
      
      		if (count($p_entities) === 0) {
      			return '';
      		}
      
      		// Tabellen-Header bestimmen:
      		$l_headers = array_keys($p_entities[0]);
      
      		// Tabelle als HTML aufbauen:
      		$l_table = '<table style="border-collapse: collapse; font-family: Courier, monospace; width: 100%;">';
      
      		// Tabellenkopf:
      		$l_table .= '<tr>';
      		foreach ($l_headers as $l_header) {
      			$l_table .= '<th style="border: 1px solid black; padding: 5px; text-align: left; background-color: #f0f0f0;">' 
      					 . htmlentities(self::_l($l_header)) 
      					 . '</th>';
      		}
      		$l_table .= '</tr>';
      
      		// Tabellenzeilen:
      		foreach ($p_entities as $l_entity) {
      			$l_table .= '<tr>';
      			foreach ($l_entity as $l_value) {
      				$l_table .= '<td style="border: 1px solid black; padding: 5px; white-space: nowrap;">' 
      						 . htmlentities($l_value) 
      						 . '</td>';
      			}
      			$l_table .= '</tr>';
      		}
      
      		$l_table .= '</table>';
      
      		return $l_table;
      	}
      

      Vielleicht kann man das gleich in eine nächste Version einbauen?
      PLAIN oder HTML ... wenn das wichtig ist zu entscheiden, dann wäre dies über die Verwaltung / Einstellungen interessant ... frage mich nur wofür?

      LG Stefan

      posted in Entwicklung
      StefanP74S
      StefanP74
    • RE: Community help really needed

      Hello,

      everytime i build a documentation in i-doit i go on with the logical steps as in real live when i start to create new it-infrastructure. But that's just my way to start documentation ... like "go with the flow".

      First at all: Coffee, cookies and brainstorming what kind of documentation, what granulation, which goal should be achieved?
      That's soooo important to know.

      Create ...

      1. Locations, Buildings, ...
      2. Floors (Level1, Level2, ...), Rooms
      3. LAN-Ports in Rooms
      4. LAN-Racks, Server-Racks, Patchfields, Power, ...
      5. LAN-Equipment (UPS, Switches, Router, ...) **
      6. Server, Storages, build Cluster ... (and connect them to xxx) **
      7. Clients like PCs, NoteBooks, Smartphones, ... (and connect them to xxx) **
      8. Printer, Scanner, conference-sysstems, .... (and connect them to xxx) **
      9. User
      10. Software **
      11. Services, contracts, licences, contacts, ...
      12. Other equipment like user defined things or non-IT things
      13. uuh did i documentated the documentation-steps in wiki?
      14. starting finework like user roles, add more and more contacts and manuals for trouble-shooting-situations, ...

      From point 8 on ... it's jumping around.
      Between every step i look back and check out: am i on the right way? Is it important? Good to know or involves it a lot of work and nothing else?

      ** All components with an ip-address are automatically created by discovery-tools like JDisc (Clients, Server, Switches, ...).

      Greets Stefan

      posted in General
      StefanP74S
      StefanP74
    • RE: Richtig Segmentieren

      Hallo,

      oh Mann, ich habe den Speicher-Button bei den Slots nicht gesehen, habe immer den ganz oben verwendet. 🤦
      Ja, die Slotzuweisung klappt damit 😬

      Ich danke euch, die Schrank-Doku/Visualisierung ist schon etwas feines.
      Freue mich schon auf die nächste/übernächste Version.

      LG
      Stefan

      posted in Betrieb
      StefanP74S
      StefanP74
    • This CKEditor 4.22.1 version is not secure

      Aus dem Urlaub zurück und habe diese Meldung im Editor:

      This CKEditor 4.22.1 version is not secure. Consider upgrading to the latest one, 4.24.0-lts.
      Ich kann die Meldung hin und wieder nicht mal wegklicken - bissal übertrieben würd ich sagen.

      i-doit_20240701_001.JPG

      Gibt es hierfür eine Vorgehensweise von i-doit für das Update oder kommt demnächst was als i-doit Paket?
      Ich verwende die v31 pro

      Danke

      LG Stefan

      posted in Betrieb
      StefanP74S
      StefanP74
    • RE: The empty inactive window Investment costs

      Hello,

      check out Administration -> User settings -> Data format -> Monetary format

      Greez Stefan

      posted in General
      StefanP74S
      StefanP74
    • RE: [Solved] Noob Frage: Stockwerke in Gebäuden

      @windoze-admin Servus,
      ich habe mir dazu einen Objekttyp Etage angelegt und entsprechend mit Daten gefüttert. ( UG, EG, OG1, OG2, ...)
      Dies ist über die Verwaltung / CMDB / Einstellungen / Objekttyp-Konfiguration / Infrastruktur möglich.
      Einen neuen Objekttyp names Etage anlegen und bei Standort "Ja" hinterlegen. Als Kategorie noch Räumlich zugeordnete Objekte sowie Standort hinzufügen.

      Nun kannst du Etagen eintragen und beim Standort zuordnen.

      LG Stefan

      posted in Allgemein
      StefanP74S
      StefanP74
    • RE: Aktuell angemeldete Benutzer anzeigen

      Hallo @ollis,

      das Dashboard editieren, das Widget "Eingeloggte Benutzer" hinzufügen.
      Das sollte tun.

      LG PS

      posted in Betrieb
      StefanP74S
      StefanP74
    • RE: Entfernen von unbenötigten Rollen bei DropDown-Feldern (Contact assignment)

      @KI3M
      Hallo,
      ja, Dialog-Admin hört sich gut an ... hmmmm ich hab die 28 Pro ... da wird es wohl einige Unterschiede zur i-doit Open geben.
      Sorry, da bin ich wohl der Falsche 😉

      LG

      posted in Allgemein
      StefanP74S
      StefanP74
    • RE: Attribute verstecken

      Update:
      Naja, steht auch so in der Knowledgebase:
      Wenn ein Attribut ausgeblendet ist, wird es in der Kategorie für alle Objekte (aller Objekttypen) nicht mehr angezeigt. Außerdem wird die Option zum ausblenden auf der Übersichtsseite automatisch deaktiviert.

      Ich dachte man könnte es pro Kategorie ausblenden/einblenden.
      Das wäre doch was für eine Zukunftsversion.

      LG Stefan

      posted in Betrieb
      StefanP74S
      StefanP74
    • RE: Entfernen von unbenötigten Rollen bei DropDown-Feldern (Contact assignment)

      @KI3M
      Dies kannst du über Verwaltung / Vordefinierte Inhalte / Dialog-Admin / Kontaktzuweisung / Rolle erledigen, insofern die Einträge, die du archivieren/löschen möchtest, löschbar sind.
      Archivieren geht auch bei einer Rolle, die mit Löschbar "Nein" definiert ist - soweit ich das eben getestet habe.
      Gelöscht habe ich noch nie eine.

      LG Stefan

      posted in Allgemein
      StefanP74S
      StefanP74
    • RE: Bericht mit Link zum Objekt

      Ich habe mir nun so geholfen, falls es noch jemand benötigt:

      • In den Report wird die Objekt-ID mit aufgenommen.
      • Export als CSV.
      • Rechts neben der Objekt-ID-Spalte eine neue Spalte nutzen, welche die URL enthalten soll mit dem Inhalt:

      =HYPERLINK("https://name-der-domain/index.php?objID="&ZS(-1))

      Somit ist der Link klickbar und passt.

      posted in Betrieb
      StefanP74S
      StefanP74
    • RE: Kompletes "Haus" - mit Inhalt - löschen

      Servus,

      mach dir einen Report, der alle gewünschten Objekte beinhaltet.
      Am Besten mit der Bedingung Standort / Standort-Pfad (roh) .... LIKE %...% und den root-Standort, der archiviert werden soll.
      Den Report nochmals prüfen, ob es so passt.
      Dann über die Massenänderung den Report auswählen, als Aktion "Archivieren" hinterlegen und schwupps, sind alle gewählten archiviert.

      LG Stefan

      posted in Allgemein
      StefanP74S
      StefanP74
    • RE: Richtig Segmentieren

      Nachtrag:

      Ich habe mich eben auf der Demo-Seite herumgeschlagen.
      Dabei kopierte ich eine Funktionierende Segmentierung ohne Standort.
      Änderte den Standort anschließend und siehe da, es funktioniert auch nicht.

      Vorderseite auf HE47 alte Segmentierung - Segmentierung wird angezeigt
      Rückseite HE47 neue Segmentierung - Segmentierung wird nicht angezeigt

      idoit_seg_demo.JPG

      Positioniere ich es hingegen auf der Vorderseite (HE45), klappt es.
      idoit_seg_demo2.JPG

      Ich schreibe es dem Support, sieht nach einem Bug aus.

      posted in Betrieb
      StefanP74S
      StefanP74
    • RE: Eine Frage des SLAs

      Jo, mit i-doit funktioniert das natürlich 😳

      Zumindest konnte ich den Arbeitsplatz, bezüglich der Zuordnung der Geräte und User als oberste Instanz bewahren und den SLA dem Arbeitsplatz umhängen. Die dem Arbeitsplatz zugeordneten Geräte zeigen mir via benutzerdefinierter Kategorie den dem Arbeitsplatz zugeordneten SLA an.

      Wie habe ich das Umgesetzt:

      • Service anlegen: Level 1, Level 2, Level 3
      • Report anlegen:
        Gewählte Attribute: Service (Servicezuweisung) --> Bezeichnung (Allgemein)
        Bedingungen: Allgemein / Objekttyp = Arbeitsplatz
        UND
        Servicezuweisung / Service --> Verknüpftes Attribut --> Allgemein / Bezeichnung LIKE %...% Level
        UND
        Zugewiesene Endgeräte / Objekt --> Feldplatzhalter --> Objekt ID
      • Benutzerdefinierte Kategorie anlegen: SLA-Zuordnung
        Multi-Value: Nein
        Objekttypen: Client, Monitor, Drucker, .... (wo man die Zuordnung sehen will)
        Feld hinzufügen:
        Typ: Report
        Feldbezeichnung: ReportSLA
        Zusatz: ID des anzuzeigenden Reports

      Dank Verwaltung / Datenansicht / Kategorieordner, kann diese Kategorie ganz oben angezeigt werden.

      Damit die Kategorie in der Objekt-Übersicht ebenfalls ganz oben angezeigt wird, habe ich dies in der Objekttypen-Konfig entsprechend angepasst ... doch leider, sticht mir da etwas ins Auge:
      Unterhalb der benutzerdefinierten Kategorie, dem angezeigten Report, ist ein sehr großer Leerraum. Das scheint mir fix zu sein. oder?
      Das kann ich leider so nicht stehen lassen, also musste ich bis zur Klärung die Kategorie wieder aus der Übersicht entfernen.

      idoit-leerraum01.JPG

      Damit muss ich mir keine Gedanken mehr machen, welcher SLA dem Client etc. umgehängt werden muss (zB. bei Tausch), da diese Information bereits der zugeordnete Arbeitsplatz trägt.

      LG Stefan

      posted in Allgemein
      StefanP74S
      StefanP74
    • Dokumente Addon und Bilder

      Hallo und Mahlzeit,

      ich habe bei einem Notfallplan einige Bilder im Text positioniert.

      Wie habe ich das gemacht?

      1. Im Objekt eines Notfallplans über die Kategorie Bilder, ein Bild hochgeladen
      2. Den Bildlink kopiert
      3. Im Beschreibungsfeld des Notfallplans die Bilder an gewisser Stelle mittels der Funktion Bild hinterlegt (url eingefügt in Bild-Eigenschaften)

      Das klappt prima.

      Leider werden mir diese Bilder, wenn ich ein Dokument über das Dokumente-Addon erstelle im PDF, nicht angezeigt, somit fehlen wichtige Informationen.
      Es bringt mir nichts, Bilder an anderer Stelle, zB. gesammelt am Ende des Texts usw. einzufügen..

      Gibt's dazu eine Lösung?

      LG Stefan

      posted in Betrieb
      StefanP74S
      StefanP74
    • RE: Lizenzen für Add-On "Documents" und ISMS"?

      @kholzenhauer

      Dann würde ich ein Support-Ticket aufmachen, vielleicht hängt ja etwas schief.

      LG Stefan

      posted in Allgemein
      StefanP74S
      StefanP74
    • RE: CKEditor - Kein Button zum Hinzufügen von Hyperlinks?

      @Niklas-K

      stimmt, auf der Demo-Seite fehlt auch die Hälft der Icons.
      Keine Ahnung wo da noch ein Setting wäre.

      Wenn ich Aktiviere alle WYSIWYG Editor Funktionen auf "Nein" setze, dann sieht die Leiste so aus:

      i-doit_link_002.JPG

      LG Stefan

      posted in Allgemein
      StefanP74S
      StefanP74
    • RE: PHP update von 8.0 auf 8.1

      Servus @Detlev-Runge-0

      ich habe mir irgendwann mal die Updateprozedur zusammengeschrieben.
      Vielleich erkennst du, woran es bei deiner Vorgehensweise scheitert.

      PHP-Update
      Es können mehrere PHP-Versionen nebeneinander betrieben werden.
      Zu finden unter /etc/php/
      Zur Sicherheit ist eine Liste der verwendeten PHP-Module in ein File zu schreiben, diese Liste wird später benötigt.

      dpkg -l | grep php | tee packages.txt
      

      Das System auf Letztstand bringen

      apt-get update && apt-get upgrade
      

      Vorbereiten und Installieren der neuesten PHP-Version als Vorbereitung

      sudo apt install apt-transport-https lsb-release ca-certificates wget -y
      
      sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
      
      sudo sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main"> /etc/apt/sources.list.d/php.list'
      
      apt-get update && apt-get upgrade
      

      Installation der gewünschten PHP-Version

      apt-get install php8.1
      

      Installieren der PHP-8 Module lt. anfänglich erstellter Liste (einzeln ... oder unten alle auf einmal)

      apt-get install php8.1-common
      apt-get install php8.1-fpm
      

      💡 Es lohnt sich, folgende Befehle als Erleichterung abzusetzen, da mit dieser Variante 99% aller benötigten Module installiert werden.

      apt install -y php8.1-{common,fpm,xml,zip,mysql,curl,mbstring,gd,intl,xsl,bcmath,imap,soap,readline,sqlite3,pgsql,gmp}
      
      systemctl restart php8.1-fpm
      
      systemctl restart apache2
      

      Vorherige PHP-Version deaktivieren, neue aktivieren

      sudo a2dismod php7.4
      
      sudo a2enmod php8.1
      

      Anhand der Modulliste nochmals kontrollieren, ob Module fehlen und nachinstallieren.

      PHP-Cli aktivieren

      sudo update-alternatives --set php /usr/bin/php8.1
      
      sudo update-alternatives --set phar /usr/bin/phar8.1
      
      sudo update-alternatives --set phar.phar /usr/bin/phar.phar8.1
      

      Diese Beiden stoßen vermutlich auf einen Fehler, das ist aber nicht von Interesse.

      sudo update-alternatives --set phpize /usr/bin/phpize8.1
      
      sudo update-alternatives --set php-config /usr/bin/php-config8.1
      

      php.ini
      Alle php.ini Dateien im Verzeichnis /etc/php/[Version] anpassen. Zumeist sind nur folgende Parameter zu korrigieren bzw. zu aktivieren:

      max_input_vars = 15000
      post_max_size = 256M
      upload_max_filesize = 125M

      Ein Vergleich der alten und neuen php.ini via notepad++ ist von Vorteil.

      💡 Die alten Versionen nicht entfernen!

      i-doit Anpassen
      Das File /etc/apache2/sites-enabled/i-doit.conf editieren.
      Die php-Version darin anapsssen. (php8.0-fpm.sock --> php8.1-fpm.sock)

      <FilesMatch ".php$">
      <If "-f %{REQUEST_FILENAME}">
      SetHandler "proxy:unix:/var/run/php/php8.0-fpm.sock|fcgi://localhost"
      </If>
      </FilesMatch>
      

      Abschluss
      Am Ende die Services neustarten.

      systemctl restart php8.1-fpm
      
      systemctl restart apache2
      

      LG Stefan

      posted in Allgemein
      StefanP74S
      StefanP74
    • RE: IT Lager mit i-doit abdecken Erfahrungen gesucht

      Hallo,

      ja, also ich habe es so umgesetzt:
      Es gibt mehrere Räume, die für die Lagerung des IT-Equipments dienen. Diese wurden ganz normal als Raum angelegt. PCs, Monitore, Drucker etc. sind mit dem Status Gelagert eben in diesen Räumen hinterlegt - der Zutritt ist limitiert. (wurden zuvor via JDisc erfasst und in i-doit importiert)

      Was den Kleinkram wie Tastatur, Kabel, Mäuse, Toner für Drucker angeht, damit verfahre ich etwas anders:
      Für das Verbrauchsmaterial habe ich einen benutzerdefinierten Objekttyp angelegt sowie eine benutzerdefinierte Kategorie namens Verbrauchsmaterial.
      Die Felder Produktbezeichnung, Bestand, Soll-Bestand, Letzte-Inventur, Bestelldatum, Beziehung (Objekt-Beziehung mehrere Objekte) angelegt (ID, Bezeichnung, Beschreibung, CMDB-Status ist ja im Standard vorhanden).

      Ein Datensatz sieht wie folgt aus:
      Gruppe: Toner
      Bezeichnung: CE340AH
      Produktbezeichnung: Toner schwarz
      Beziehung: PRT56 PRT112 PRT113
      Bestand: 5
      Soll-Bestand: 6
      Bestelldatum: 05.06.2022
      Beschreibung: Immer 2 Stk. pro Drucker auf Lager!
      Letzte Inventur: 01.06.2022

      Für die wöchentliche Inventur der Toner exportiere ich die Liste aus i-doit ins Excel. Dort läuft dann ein Makro, welches die Liste etwas aufbereitet.

      Nach der Inventur gehe ich zurück zur i-doit Verbrauchsmaterial-Sicht und ändere die auf dem Ausdruck erfassten Daten über die Masseneditierung. Das geht recht rasch.

      So habe ich alles im Auge.

      LG Stefan

      posted in Allgemein
      StefanP74S
      StefanP74
    • RE: Fehlermeldung beim aufrufen der CMDB: No space left on device

      Servus,

      was gibt den df -h aus?
      Was meinst du mit "rund die hälfte frei"?

      Es ist genügend Platz frei, auch wenn die Fehlermeldung bezüglich zu wenig Speicherplatz hochkommt?
      Was steht denn in dem Log, das angemeckert wird .... bzw. gibt es ein Log das massiv anwächst?

      Du hast alle logs aus /var/www/html/log gelöscht und die Meldung kommt dennoch?
      Sobald die Meldung hochkommt, was sagt dann df -h ?
      Was sagt

      du -ah . | sort -rh | head -n 10
      

      Der Befehl gibt die 10 größten Dateien im aktuellen Verzeichnis aus.

      Ist das eine neue Installation? Oder schön länger im Betrieb?

      posted in Allgemein
      StefanP74S
      StefanP74