# Globale Variablen/Objekte

## Superglobals

### $\_SESSION

#### Contexte/Context\_ids auflösen

Über die Session können `context` bzw. `context_id`  wie folgt aufgelöst werden:&#x20;

`$_SESSION['CONTEXT']['enabling_objective']->context_id; //12`

`$_SESSION['CONTEXT']['12']->context; //'enabling_objective'`

&#x20;Das Array of Objects wird in `/share/session.php` erzeugt. Es enthält die folgenden Felder:&#x20;

`$_SESSION['CONTEXT']['institution']->id          // '12'           -> Primärschlüssel in DB`\
&#x20;                                  `->context     // 'institution'  -> Kontext-Name`\
&#x20;                                  `->context_id; // '12'           -> Kontext ID`\
&#x20;                                  `->path        // 'institution/' -> Kontext-Pfad`

`$_SESSION['CONTEXT']['12']->id          // '12'           -> Primärschlüssel in DB`\
&#x20;                         `->context     // 'institution'  -> Kontext-Name`\
&#x20;                         `->context_id; // '12'           -> Kontext ID`\
&#x20;                         `->path        // 'institution/' -> Kontext-Pfad`



## Globals

curriculum nutzt die folgenden globalen Variabeln

* $CFG
* $COURSE
* $CONTEXT
* $DB
* $GRADE
* $INSTITUTION
* $LICENSE
* $PAGE
* $SCHOOLTYPE
* $TEMPLATE
* $USER

### global $CFG&#x20;

Das $CFG Objekt wird in`share/config.php`global deklariert. In ihm sind relevante Variabeln gespeichert, wie z.B. Pfade, Datenbankzugansdaten usw.

Das folgende Beispiel zeigt die Stuktur des `$CFG` Objekts mit Kommentierungen

Beispiel des $CFG Objekts

```
{
  "app_title": "curriculum",                                    // Name der Seite
  "version": "0.9.4",                                           // Aktuelle Version
  "app_footer": "<a href=\"http://www.curriculumonline.de\" target=\"_blank\">\u00a9 Copyright 2014 - Joachim Dieterich</a>", // Footer
  "db_host": "127.0.0.1",                                       // DB Host
  "db_user": "root_username",                                   // DB Nutzername
  "db_password": "root_password",                               // DB Passwort
  "db_name": "db_name",                                         // DB Name
  "db_configured": true,                                        // Wird gesetzt, sobald Verbindung zur Datenbank funtioniert
  "ip": "localhost",                                            // IP / Addresse der Seite
  "protocol": "https://",                                       // Verwendetes Protokoll (http; https)
  "base_folder": "curriculum/",                                 // Basisverzeichnis
  "base_url": "https://localhost/curriculum/",                  // Basis-URL
  "curriculumdata_root": "/cur_data/",                          // Absolutes Datenverzeichnis (Außerhalb des htdocs Verzeichnis!)
  "share_root": "/htdocs/curriculum/share/",                    // Share Verzeichnis
  "document_root": "/htdocs/curriculum/share/../public/",       // Verzeichnis der index.php
  "controllers_root": "/htdocs/curriculum/share/controllers/",  // Controller Verzeichnis
  "plugins_root": "/htdocs/curriculum/share/plugins/",          // Plugin Verzeichnis
  "user_root": "/cur_data/user/",                               // Benutzer Datenverzeichnis 
  "curriculum_root": "/cur_data/curriculum/",                   // Lehrplan Datenverzeichnis
  "subjects_root": "/cur_data/subjects/",                       // Fach Datenverzeichnis
  "solutions_root": "/cur_data/solutions/",                     // Einreichungen Datenverzeichnis
  "badges_root": "/cur_data/badges/",                           // Badges/Abzeichen Datenverzeichnis (wird nicht mehr direkt verwendet)
  "institutions_root": "/cur_data/institution/",                // Institutions Datenverzeichnis
  "backup_root": "/cur_data/backups/",                          // Backup Datenverzeichnis
  "sql_backup_root": "/cur_data/backups/sql/",                  // SQL Backup Datenverzeichnis
  "lib_root": "/curriculum/share/libs/",                        // Lib Verzeichnis (MPDF, Smarty, CKEditor, ..)
  "demo_root": "/cur_data/support/",                            // Hilfe/Support Verzeichnis (Vorlagen, ...)
  "access_file": "../share/accessfile.php?file=",                                  // Accessfile Pfad
  "access_file_url": "https://localhost/curriculum/share/accessfile.php?file=",    // Accessfile URL (Aufruf per Dateiename)
  "access_token_url": "https://localhost/curriculum/share/accessfile.php?token=",  // Accessfile URL (Aufruf per token)
  "access_id_url": "https://localhost\/curriculum/share/accessfile.php?id=",       // Accessfile URL (Aufruf per id)
  "support_path": "../share/accessfile.php?file=support/",                         // Accessfile Hilfe/Support Pfad 
  "subjects_path": "../share/accessfile.php?file=subjects/",                       // Accessfile Fach Pfad
  "solutions_path": "../share/accessfile.php?file=solutions/",                     // Accessfile Einreichungen Pfad
  "curriculum_path": "../share/accessfile.php?file=curriculum/",                   // Accessfile Lehrpläne Pfad
  "avatar_path": "../share/accessfile.php?file=user/",                             // Accessfile Nutzer Pfad
  "web_backup_path": "../share/accessfile.php?file=backups/",                      // Accessfile Backup Pfad
  "request_url": "https://localhost/curriculum/public/",                           // Request URL 
  "media_url": "https://localhost/curriculum/public/assets/",                      // Media Verzeichnis (Medien die nicht im Datenverzeichnis liegen, z.b. Logos)
  "lib_url": "https://localhost/curriculum/public/../share/libs/",                 // Lib URL
  "tb_param": "&modal=true&format=1",                                              // Standart Arameter für den Dateimodal Dialog
  "post_max_size": "32M",                                                          // Vorgegebener PHP post_max_size Wert
  "settings": {                                          // ARRAY of Settings wie in der DB, Tabelle config hinterlegt
    "repository": {                                      // ARRAY der Plugins, in diesem Fall gibt es nur Repositories
      "edusharing": {                                    // Name des Repos
        "titles": null
      },
      "sodis": {
        "titles": null
      }
    },
    "template": "AdminLTE-2.3.7",                        // Aktuelles Template                 
    "messaging": "intern",                               // verwendetes Nachrichtenmodul 
    "email_Host": "",                                    // Konfigurationsdaten, falls messaging über Email gehen soll.
    "email_SMTPAuth": true,                              // s.o.
    "email_Password": "",
    "email_SMTPSecure": "tls",
    "email_Port": 587,
    "email_Username": "",
    "guest_login": true,                                 // Gast-Nutzer aktiv?
    "guest_usr": "gast_username",                        // Nutzername des Gast-Nutzers
    "guest_pwd": gast_password",                         // Passwort des Gast-Nutzers
    "acc_days": 7,                                       // Standartwert wie viele Tage neue Erfolge angezeigt werden.
    "paginator_limit": 30,                               // Standartwert: Anzahl der Einträge in Listen
    "standard_role": 0,                                  // Standartwert: Rolle 0 = Schüler
    "standard_country": 56,                              // Standartwert: Land 56 = Deutschland
    "standard_state": 11,                                // Standartwert: Bundesland 11 = Rheinland-Pfalz
    "csv_size": 1048576,                                 // Standartwert: CSV in Bytes  
    "avatar_size": 1048576,                              // Standartwert: Profilbild in Bytes
    "material_size": 1048576,                            // Standartwert: Dateien in Bytes
    "timeout": 30,                                       // Standartwert: Timeout in Minuten
    "message_timeout": 4000,                             // Standartwert: Anzeige von Nachrichten in ms
    "standard_avatar": "user/noprofile.jpg",             // Standartwert: Userprofilbild
    "standard_avatar_id": 0,                             // Standartwert: Userprofilbild file_id
    "standard_ins_logo_id": 1,                           // Standartwert: Institutions-Logo file_id
    "mail_paginator_limit": 10,                          // Standartwert: Anzahl der Einträge in Mail-Listen
    "shibboleth": false,                                 // Anzeige Shibboleth-Login (todo: das sollte über das Plugin geregelt werden)
    "ghostscript_path": "/usr/bin/",                     // Pfad zu gostscript für die Erstellung von Thumbnails
    "thumbnails": true,                                  // Sollen Thumnails erstellt werden?
    "guest_startpoint": "navigator",                     // Startpunkt für den Gastlogin
    "guest_show_terms": false,                           // Sollen Gäste die Nutzungsbedingungen angezeigt bekommen?
    "guest_show_menu": false                             // Sollen im Gastlogin Menüs angezeigt werden?
  },
  "smarty_template_dir_url": "http://localhost/curriculum/share/templates/AdminLTE-2.3.7/" //aktuelle Template URL
}
```

### global $PAGE

Das $PAGE Objekt wird in `share/setup.php` global deklariert.

Beispiel des $PAGE Objekts

```
{
  "action": "view",                                      // aktuelle Seite
  "layout": "fixed sidebar-mini",                        // Page Layout class
  "body_wrapper": "wrapper",                             // Body wrapper class
  "header": true,                                        // Header anzeigen
  "previous_url": "http://localhost/curriculum/public/index.php?action=dashboard",               // Previous URL
  "url": "http://localhost/curriculum/public/index.php?action=view&curriculum_id=1370&group=89", // Actual URL
  "previous_php": "null",                                // Previous php filename
  "php": "index.php",                                    // Actual php filename
  "previous_action": "dashboard",                        // Previous page action
  "browser": "Mozilla/5.0 ...",                          // Browser
  "controller": "/Applications/MAMP/htdocs/curriculum/share/controllers/view.php",              // Current controller file
  "curriculum": "1370",                                  // actual Curriculum
  "show_reference_id": null,                             // var to store references
  "target_url": null,                                    // target url  
  "message": null,                                       // messages
  "group": "89",                                         // actual group
  "reference_curriculum_id": false                       // reference curriculum id (view.tpl)
}
```

### global $USER

Das $USER Objekt wird in`share/setup.php` global deklariert. Sobald sich ein User anmeldet, wird die Funktion `session_reload_user` aufgerufen und die Userdaten in `$USER` also auch in `$_SESSION['USER']` gespeichert.&#x20;

Das Passwort wird **nicht**  in`$USER` und in der `$_SESSION` gespeichert. &#x20;

Damit die einzelnen Werte in den Templates bequem genutzt werden können, werden diese über die Funktion `assign_to_template` mit dem Prefix `'my_'`gesetzt. So kann z.B. der `username` über innerhalb der Templates über die Variable `my_username` genutzt werden.

Das folgende Beispiel zeigt die Stuktur des `$USER` Objekts mit Kommentierungen

Beispiel des $USER Objekts

```
{
  "id": 1234,                            // id des users
  "username": "testuser",                // Nutzername
  "firstname": "Joachim",                // Vorname
  "lastname": "Dieterich",               // Nachname
  "password": "",                        // Passwort (empty)
  "role_id": 1,                          // aktuelle Rolle (abängig von aktueller Institution)
  "role_name": "Administrator",          // Name der aktuellen Institution
  "last_login": "2018-12-15 10:21:58",   // Zeitsignatur des letzten Logins
  "last_action": null,                   // Zeitsignatur der letzten Aktion 
  "email": "mail@curriculumonline.de",   // Email des Nutzers
  "confirmed": 1,                        // Status des Nutzers (1 = Nutzer ist bestätigt;  2 = (wird zur Zeit nicht verwendet);  3 = Nutzer muss Passwort ändern (Entsprechder Dialog wird nach Login angezeigt);  4 = Nutzer wurde noch nicht von Admin freigegeben)
  "postalcode": "76831",                 // Postleitzahl
  "city": "Landau in der Pfalz",         // Ort
  "state": "Rheinland-Pfalz",            // Bundesland
  "state_id": 11,                        // Bundesland id
  "country": "Deutschland",              // Land
  "country_id": 56,                      // Land id
  "avatar_id": 2630,                     // file_id des Nutzerbildes
  "avatar": "user/1234/avatar_xs.png",   // Pfad zum Nutzerbild
  "semester_id": 70,                     // aktueller Lernzeitraum
  "semester": null,                      // Name des aktuellen Lernzeitraums
  "paginator_limit": 30,                 // Anzahl der Einträge pro Seite in Listen
  "acc_days": 7,                         // Anzahl der Tage, an denen neue Statusmeldungen gezeigt werden 
  "creation_time": "2013-09-08 09:45:04",// Zeitsignatur wann Nutzer angelegt wurde
  "creator_id": 10,                      // id des Nutzers, der diesen Nutzer angelegt hat
  "institutions": [                      // ARRAY der Einschreibungen in Institutionen
    {
      "institution": "Testschule 1",     // Name der Institution
      "id": 56,              // id der Institution
      "role_id": 1,                      // role_id: Rolle des Nutzers an dieser Institution
      "role": "Administrator"            // Rollennamen als string
    },
    {
      "institution": "Testschule 2",     // s.o.
      "id": 97,
      "role_id": 7,
      "role": "Lehrer"
    }
  ],
  "institution_ids": [                   // ARRAY aller ids der Institutionen in die der Nutzer eingeschrieben ist. Dieses Array kann genutzt werden, um z.b. in SQL Queries einfachere Abfragen zu machen, in dem geprüft wird, ob Nutzer in einer Institution eingeschrieben ist.
    56,
    97
  ],
  "institution_id": 56,                  // id der aktuellen Institution
  "institution": {                       // Institutions-Objekt der aktuellen Institution
    "id": 56,                                  // id der Institution
    "confirmed": 1,                            // Status der Institution (0 = deaktiviert; 1 = aktiv))
    "institution": "Testschule 1",             // Name der Institution
    "description": "Beschreibung der Schule",  // Beschreibung der Institution
    "schooltype_id": 9,                        // id des Schultypes
    "country_code": null,                      // country_code der Institution z.B. 'DE'
    "state_id": 11,                            // id des Bundeslandes
    "creation_time": "2013-09-07 09:48:50",    // Zeitsignatur, wann Institution angelegt wurde
    "creator_id": 10,                          // id des Nutzers, der die Institution angelegt hat
    "paginator_limit": 30,                     // Anzahl der Einträge pro Seite in Listen
    "std_role": 0,                             // Standartrolle an diese Institution
    "csv_size": 1048576,                       // Erlaubte Uploadgröße von CSV Dateien
    "avatar_size": 1048576,                    // Erlaubte Uploadgröße von Profilbildern
    "material_size": 1048576,                  // Erlaubte Uploadgröße von Dateien
    "acc_days": 7,                             // Anzahl der Tage, an denen neue Statusmeldungen gezeigt werden 
    "timeout": 30,                             // Zeit nachdem ein Nutzer abgemeldet wird
    "semester_id": 30,                         // Aktueller Lernzeitraum
    "file_id": 126,                            // file_id des hinterlegten Bildes der Institution
    "statistic": null,                         // Variable, in der bei Bedarf statistische Daten gespeichert werde
    "country_id": "56"                         // id des Bundeslandes
  },
  "enrolments": [                              // ARRAY der Einschreibungen in Kurse (= Lerngruppe -> Lehrplan)
    {
      "curriculum": "Deutsch 1-4",             // Name des Lehrplans
      "id": 201,                               // id des Lehrplans
      "grade_id": 146,                         // id der Lerngruppe
      "icon_id": 3011,                         // file_id des Lehrplanbildes
      "color": "#e9ff00AA",                    // Farbe des Lehrplans
      "group_id": 80,                          // id der Lerngruppe
      "semester_id": 72,                       // id des Lernzeitraumes
      "groups": "Grundschule 1-4",             // Name der Lerngruppe
      "completed": 3.75                        // individueller Lernstand (Prozentwert) des aktuellen Nutzers in dieser Lerngruppe
    },
    {
      "curriculum": "Naturwissenschaft 5-6",   // s.o.
      "id": 348,
      "grade_id": 48,
      "icon_id": 2840,
      "color": "#3bc95aAA",
      "group_id": 83,
      "semester_id": 70,
      "groups": "Klasse 5-6",
      "completed": 0
    },
    {
      "curriculum": "MedienkomP@ss - Rahmenkonzept ab 2018 Sek. I mit KMK Formulierungen",
      "id": 272,
      "grade_id": 10,
      "icon_id": 3009,
      "color": "#3ac957AA",
      "group_id": 76,
      "semester_id": 72,
      "groups": "Testgruppe",
      "completed": 0
    },
  ],
  "group_ids": [                              // ARRAY aller ids der Lerngruppen in die der Nutzer eingeschrieben ist. Dieses Array kann genutzt werden, um z.b. in SQL Queries einfachere Abfragen zu machen, in dem geprüft wird, ob Nutzer in einer Lerngruppe eingeschrieben ist.
    80,
    83,
    76
  ],
  "curriuclum_ids": [                        // ARRAY aller ids der Lehrpläne in die der Nutzer eingeschrieben ist. Dieses Array kann genutzt werden, um z.b. in SQL Queries einfachere Abfragen zu machen, in dem geprüft wird, ob Nutzer in einem Lehrplan eingeschrieben ist.
    201,
    272,
    348
  ],
  "course_ids": [                            // ARRAY aller ids course_ids (id in curriculum_enrolments)
    40,
    45,
    61
  ],
  "token": "34DAE64B985BC041D738D4BA4AAED226", // individuelles Token des Nutzers (z.B. in login.php genutzt)
  "auth": "manual",                            // Authentifizierungmethode dieses Nutzers
  "completed": null,                           // Hier können für Kurse Lernstände zwischengespeichert werden 
  "online": null,                              // aktueller online-Status
  "children_id": null                          // ARRAY von ids von Nutzern die diesem Nutzer als Kinder zugeordnet sind
}
```
