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

    StefanP74

    @StefanP74

    26
    Reputation
    254
    Profile views
    301
    Posts
    0
    Followers
    0
    Following
    Joined
    Last Online
    Age 24
    Website www.pachlina.net

    StefanP74 Unfollow Follow

    Best posts made by StefanP74

    • 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

    Latest posts made by StefanP74

    • RE: i-doit als Asset-Management-Tool – wer hat positive Erfahrungen gemacht?

      Servus,

      ich habe i-doit in 2 Unternehmen implementiert sowie betrieben und habe anhand der dort zu erfüllenden Kriterien (anhand der Anforderungen) nur Positives zu berichten - und das seit beinahe 12 Jahren.

      Die Dokumentationsebene besteht aus 5 Tools:

      i-doit als zentrale Configuration Management Database (CMDB)
      Das automatische Inventory wird täglich via JDisc durchgeführt.
      Der automatische Import nach i-doit aus JDisc erfolgt ebenso täglich.
      Aus diesen Daten ergeben sich Reports bezüglich Abweichungen von Software-Ständen etc.
      Objektbezogen wird in i-doit Dokumentiert, bzw. über Gruppendefinitionen (Projekte, etc.)
      DokuWiki wird für die globale, Objekt- bzw. Software-Übergreifende Dokumentation verwendet, welche in i-doit nicht abzubilden war. (zB. Regelwerk/HowTo für alle Tools der Dokumentationsebene)
      Als Monitoring wird checkmk in Verbindung mit i-doit eingesetzt.
      Als Ticket-System wird Znuny verwendet.

      Jegliche Assests, welche nicht automatisch erfasst werden können, werden ebenso in i-doit hinterlegt - natürlich nur was sinn macht. zB. eine benutzerdefinierte Schlüsselverwaltung, Fuhrpark etc. - man muss diese Datensätze schlussendlich auch im Auge behalten.

      Über alle Objekte spannt sich das i-doit-Modul ISMS mit dem Risikomanagement - für mich ein ganz wichtiger Punkt.

      Stolperfallen:
      Dazu fällt mir immer wieder eines ein: "Technik muss überlegt und einfach sein."
      Je komplexer es wird, desto aufwendiger die Wartung, desto unübersichtlicher. Dies trifft ua. bei der Datenstruktur wie auch bei der Rechtevergabe zu.
      Ein sehr wichtiger Punkt bei all meinen Überlegungen war: "Was ist das hierarchisch oberste Objekt?" Welches Objekt ändert sich so selten, dass ich es als solches ansehen kann - neben bzw. innerhalb des Unternehmens selbst. In meinem Fall war das der Arbeitsplatz, dieser währt am längsten. Ergo habe ich sämtliche Objekte dem Arbeitsplatz zugeordnet, wobei der Benutzer, also der Mitarbeiter als logisches Objekt dem Arbeitsplatz zugeordnet wurde. Selbiges betrifft auch buchhalterischen Angelegenheiten. Der Arbeitsplatz ist einer Kostenstelle zugeordnet, oder aber, wenn es mehrere sind, einer fiktiven, welche dann wieder die einzelnen Kostenstellen beinhaltet.
      Ander verhält es sich bei den Komponenten in den Serverräumen, Technikräumen etc. - diese wiederum sind den jeweiligen Räumen zugeordnet.
      Was will ich damit sagen? I-doit ist felxibel.

      Es ist also sehr wichtig, sich einmal hinzusetzen und darüber nachzudenken, wie man die Struktur aufbaut, bevor man loslegt. zB. auch für die Strom-, wie Netzwerkverkabelung, um einen sauberen Netzwerkplan darstellen zu können. Will man es sich antun und die LAN-Dosen in i-doit aufnehmen? Oder verpasst man einfach dem Raum die Anschlüsse und erspart sich damit nicht nur Aufwand beim Erstellen sondern auch bei der Lizenz von i-doit.

      Die Frage der Fragen: Habe ich die Ressourcen zur Verfügung, um diese Dokumentation zu beherrschen? ... oder steht jetzt schon fest, es wird ein Datenmoloch, der zwar enorme Ausmaße hat, benötigen werden wir diese Infos jedoch niemals. Die Datenqualität darf niemals ins Negative rutschen.

      Wie gut lässt sich i-doit in bestehende Asset-Management-Prozesse integrieren?
      Das kommt darauf an. Am Ende müssen sich alle Tools, alle Prozesse ineinander fügen, sonst bleibt der Faktor Mensch als gestresste Schnittstelle über. Ich kann nur sagen, dass sich i-doit sehr gut anpassen kann, aber es gibt, wie überall Grenzen.

      Gibt es bewährte Vorgehensweisen oder Stolperfallen bei der Implementierung?
      Wie bereits erwähnt, ist die Strategie entscheidend.
      Ich habe aus dem ersten i-doit Projekt gelernt, dass die Dokumentation über die Implementierung von i-doit genauso wichtig ist, wie das Betreiben von i-doit selbst. DokuWiki eignet sich dafür hervorragend.
      Diese Fragen sind immer wieder zu beantworten:
      "Macht das wirklich Sinn?"
      "Rechnet sich der Aufwand?"

      Wer pflegt die Objekte?
      Was hinterlege ich direkt am Objekt, was verknüpfe ich mit dem Objekt.
      Klassiker: Kontaktdaten werden doppelt und dreifach hinterlegt statt 1x und verknüpft - das Ergebnis sind veraltete bzw. irreführende Kontaktdaten.

      Wie zufrieden seid ihr mit der Funktionalität und dem Nutzen im täglichen Betrieb?
      Ich bin sehr zufrieden mit der Funktionalität von i-doit und auch mit dem Support.
      Insofern man versteht, dass es sich um eine Datenbank handelt (da haben manche Office-User hin und wieder ein Verständnisproblem damit), erleichtert einem i-doit das tägliche Berufsleben in der IT massiv. Ohne i-doit (in Kombination mit den Tools der Dokumentationsebene) bin ich praktisch blind.

      Ich wickle mittlerweile über i-doit jedes IT-Projekt ab, führe Notfallpläne, Risikomanagement, Audits, EU-DSGVO Management, Client-Übergabeprotokolle samt Formulare, Life-Cycle-Management, Verträge, Netzwerkpläne, HW sowie SW-Inventur, SLAs, Computerized Maintenance Management System (CMMS) für die Erfassung und Erinnerung bei nötigen Wartungen an jeglicher Infrastruktur, Reporting, Gebäudepläne, und und und ... der Umfang ist enorm.

      Ich wurde niemals von i-doit enttäuscht.
      Was ich darüber hinaus sehr an i-doit schätze: Die Update-Prozedur. Einfacher geht's kaum noch.

      Ich kann es nur empfehlen.

      LG Stefan

      posted in Allgemein
      StefanP74S
      StefanP74
    • RE: Dokumente Addon und Bilder

      @LFischer Hellau!

      Sollte das schon klappen mit den Grafiken in einem Dokument?
      Wenn ja, auf welche Weise?

      LG
      Stefan

      posted in Betrieb
      StefanP74S
      StefanP74
    • RE: Inventarisierung von organisationsfremden Diensten (Cloud-Tools)

      Servus,

      als Gedankenanstoß kann ich dir "Service" empfehlen.
      Organisationsfremde Dienste kannst du unter "Service" anlegen und via ISMS beleuchten.
      So habe ich es zumindest mal gemacht.

      LG Stefan

      posted in Allgemein
      StefanP74S
      StefanP74
    • Organisation und Kundennummer

      Hallo,

      das ist jetzt etwas peinlich, aber .... wo pflegt man bei der Organisation die Kundennummer?
      Sehe ich es nicht oder gibt es dieses Feld nicht?
      Unter Vertrag ist es angeführt, nur muss ich ja keinen Vertrag als solchen mit einer Organisation haben, um die Kundennummer pflegen zu wollen, sondern einfach nur eine 0815 geschäftliche Beziehung betreibe - zB. Shop.
      Gibt es das Feld tatsächlich nur in der Kategorie Vertrag?

      LG Stefan

      posted in Allgemein
      StefanP74S
      StefanP74
    • RE: Recht: Eigene Objekte archivieren + löschen

      Hallo allerseits,

      hat vielleicht jemand das Recht "eigene Objekte archivieren/löschen" bereits erfolgreich umgesetzt?

      LG Stefan

      posted in Betrieb
      StefanP74S
      StefanP74
    • RE: Listenansicht Standardsortierung

      Hallo @LFischer

      perfekt 👍

      LG Stefan

      posted in Betrieb
      StefanP74S
      StefanP74
    • RE: Report nach Datum sortieren

      Hallo @LFischer

      das ist eine sehr gute Nachricht 👌

      LG Stefan

      posted in Betrieb
      StefanP74S
      StefanP74
    • RE: Standortansicht der dem Arbeitsplatz zugewiesenen Objekte

      Servus @robbyhuebner

      Mach ich auch so. 👌

      Gebäude --> Etage --> Raum --> Arbeitsplatz --> Clients (das ganze Zeug)
      Der logische Standort des Arbeitsplatzes ist der Mitarbeiter bzw. Gruppen.

      Warum?
      Der Arbeitsplatz ändert sich faktisch nie.
      Bei einem möglichen Umzug zieht der gesamte Arbeitsplatz mit allem drum und dran in zB. einen anderen Raum um. Zu ändern sind dann nur die Netzwerkanschlüsse, welche bei mir im Raum selbst hinterlegt sind.
      Ändert sich der Mitarbeiter, ändert sich nur der logische Standort.

      Ich sehe bei mir seit Jahren keinen Nachteil, ganz im Gegenteil.
      Übersichtlich, logisch und ratz fatz geändert.

      LG Stefan

      posted in Betrieb
      StefanP74S
      StefanP74
    • Recht: Eigene Objekte archivieren + löschen

      Hallo,

      ich habe ein Problem mit den Berechtigungen, vielleicht kann mir jemand dabei helfen.

      Ich möchte, dass eine Benutzergruppe selbst erstellte Objekte archivieren sowie auch löschen darf.
      Die Rechte der Gruppe wurden im Bereich CMDB wie folgt gesetzt:

      idoit_20250415_01.PNG

      Soweit funktioniert alles wie es sein soll, nur nicht das Editieren sowie Archivieren aus der Objektliste heraus.

      idoit_20250415_02.PNG

      Sobald das Objekt geöffnet ist, kann ich editieren ... doch wie archivieren?

      idoit_20250415_03.PNG

      Bin ich am Holzweg?
      Was fehlt denn da?
      Ich stehe auf der Leitung.

      LG Stefan

      posted in Betrieb
      StefanP74S
      StefanP74
    • RE: Benachrichtigung als Rundemail?

      Hallo,

      ich denke schon.
      Wenn ich mich täusche, dann so:

      • Prüfen, ob bei allen Kontakten etc. die die besagten Clients nutzen und auch entsprechend den Clients zugeordnet sind, eine eMail-Adresse hinterlegt ist.
      • Einen Report anlegen, der dir die Personen ausgibt, welche auf deren Clients Windows 10 drauf haben.
      • Unter Kontakte eine Personengruppe anlegen, welche die Mitglieder nach diesem Report wählt. (Personengruppen Mitglieder nach Report)
      • Einen weiteren Report anlegen, welcher die Windows 10 Clients ermittelt.
      • Nun über Benachrichtigungen / Reportbasierende Benachrichtigung den Client-Auswahl-Report entsprechend hinterlegen.
      • Für die Empfänger die Gruppe hinterlegen.

      Testen ...

      Es klappt vermutlich auch ohne der Benutzergruppe, direkt nur mit Reports, vielleicht sogar auch nur mit einem Report.

      PS: Nicht vergessen, dynamische Gruppen müssen per Cron-Job aktualisiert werden:
      sudo -u www-data php /var/www/html/console.php sync-dynamic-groups --user admin --password ******* --tenantId 1

      LG
      Stefan

      posted in Allgemein
      StefanP74S
      StefanP74