Hallo iiionly,
erst einmal herzlichen Dank für die schnelle Antwort!
Die Funktion mit dem Privat habe ich gefunden, wollte aber verhindern das sie von den Usern selbst verändert werden kann.
Von welchem Plugin sprichst du denn bzw. in welche start.php müsste ich diesen Code einfügen?
Vielleicht beschreibe ich kurz was ich vorhabe.
Wir errichten gerade eine Stiftung und über elgg soll die interne Kommunikation mit anderen Organisationen die wir unterstützen stattfinden. Die Organisationen sollen Ihr Profil einrichten können, Projektbeschreibungen, Bilder, Videos und Projektfortschritte sowie Abrechnungen etc. online stellen können. Eben alles was wir für die Revision, die Kommunikation mit unseren Spendern und für das Finanzamt benötigen. Deswegen ist es wichtig, dass die Daten und Inhalte eben nur jeder selbst sehen kann.
Ansonsten sind die Funktionen von elgg ideal für das Vorhaben.
Leider habe ich nicht wirklich Ahnung vom Programmieren etc.
Die Gruppenfunktion wäre eigentlich nur für uns zur Übersicht nicht schlecht, damit wir die Orgas eben verschiedenen Gruppen Education, Child Protection, Food Aid etc. zuordnen können.
Vielen Dank und eine gute Nacht wünsche ich dir / euch,
Marco
Es war wohl gestern schon etwas zu spät. Der Code, den ich gepostet habe, enthält leider einige Fehler (Korrektur folgt gleich).
Bei Elgg kann man durch Plugins nicht nur die Funktionalität erweitern sondern auch eine bestehende Funktionalität, die entweder von Elgg oder durch andere Plugins bereit gestellt wird, anpassen. Das Anpassen der Funktionalität über ein Plugin ist im Grunde nicht so kompliziert und deshalb sollte man vor allem nicht den Code des Elgg-Basissystems direkt verändern, wenn man etwas anpassen will, sondern das wenn möglich immer über ein separates Plugin lösen. Dann kann man das Elgg-Basissystem viel einfacher updaten, wenn eine neue Version verfügbar ist, ohne sich viel Gedanken um das Sichern und spätere Wiederherstellen der eigenen Veränderungen am Elgg-Core-Code machen zu müssen.
Ein Elgg-Plugin besteht in seiner minimalsten Ausführung nur aus einer start.php und einer manifest.xml. Man kann nun entweder für jede kleine Anpassung, die man an Elgg vornehmen will, ein kleines separates Plugin erstellen. Dies kann aber eventuell zu einer Vielzahl von Plugins führen, die jedes für sich sehr, sehr klein sind. Die andere Möglichkeit wäre, eine Art "Persönliche Anpassungen"-Plugin zu erstellen, in dem man zumindest die Anpassungen zusammenfasst, die für sich genommen trivial sind. Daher habe ich davon gesprochen, den Code in "eine" start.php (nämlich von einem solchen Anpassungs-Sammlungs-Plugin) hinzuzufügen. Aber Du kannst für den Anfang natürlich auch ein separates Plugin speziell für den Zweck der Beschränkung des Zugangslevels erstellen (Code folgt gleich).
Das mit dem Gruppen-Plugin sollte auch funktionieren ohne dass dort etwas im Code geändert werden müßte (ich war gestern wie erwähnt wohl schon etwas zu müde um das ganze sinnvoll zu durchdenken). Was Du aber tun könntest, ist das Hinzufügen neuer Gruppen nur Admins zu erlauben. Dafür gibt es bei den Plugin-Einstellungen des Gruppen-Plugins eine Option.
Nun zu dem Code des "Privacy"-Plugins (erstelle dafür einen Ordner namens "privacy" im mod-Verzeichnis um füge folgende Dateien im Ordner hinzu):
start.php mit folgendem Inhalt:
<?php
elgg_register_event_handler('init', 'system', 'privacy_init');
function privacy_init() {
// pruefen ob Standard-Zugangslevel der Seite "privat" ist und wenn nicht auf "privat" setzen
$default_access = elgg_get_config('default_access');
if ($default_access != ACCESS_PRIVATE) {
elgg_set_config('default_access', ACCESS_PRIVATE);
}// Plugin-Handler registrieren
elgg_register_plugin_hook_handler('access:collections:write', 'all', 'only_private_access', 9999);
}// in dieser Callback-Funktion des Plugin-Handlers werden - sofern der User kein Admin ist - alle
// Zugangslevel ausser "privat" aus der Zugangslevel-Auswahl entfernt
function only_private_access($hook, $type, $accesses) {
if (!elgg_is_admin_logged_in()) {
foreach($accesses as $key => $value) {
if ($key != ACCESS_PRIVATE) {
unset($accesses[$key]);
}
}
}return $accesses;
}
manifest.xml mit folgendem Inhalt:
<?xml version="1.0" encoding="UTF-8"?>
<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
<name>Private Site</name>
<id>privacy</id>
<author>iionly</author>
<version>1.11.0</version>
<category>content</category>
<description>Hides all access level with exception of private from users.</description>
<website>https://github.com/iionly</website>
<copyright>(c) iionly 2015</copyright>
<license>GNU General Public License version 2</license>
<requires>
<type>elgg_release</type>
<version>1.11</version>
</requires>
</plugin_manifest>
Fertig! Diesmal sollte es funktionieren (ich hab es zumindest kurz angetestet).
Was darüber hinaus vielleicht noch für Dich von Interesse ist, wäre das "Private Profiles"-Plugin von mir (https://community.elgg.org/plugins/1860995). Damit kannst Du festlegen, ob die User die Profilseiten anderer User besuchen dürfen und ob sie untereinander Nachrichten austauschen dürfen (mit Admins können sie trotzdem immer noch in Kontakt treten). Oder Du kannst diese Entscheidung den Usern überlassen.
Vielleicht auch von Interesse ist für Dich die Option in den erweiterten Seiteneinstellungen, dass nicht-angemeldete Besucher erst gar keinen Zugriff auf die Seiten Deiner Webseite bekommen (das nennt sich Walled-Garden). Solch ein Walled Garden ist eine Art globale Beschränkung des Zugangs während die Beschränkung des Zugangslevels mit obigem Code spezifisch für einzelne Inhalte ist. Alternativ zu der Walled Garden-Option in den erweiterten Seiteneinstellungen hab ich das Login Required-Plugin veröffentlicht (https://community.elgg.org/plugins/804349), das ebenfalls eine solche Walled Garden-Funktionalität bietet.
info@elgg.org
Security issues should be reported to security@elgg.org!
©2014 the Elgg Foundation
Elgg is a registered trademark of Thematic Networks.
Cover image by Raül Utrera is used under Creative Commons license.
Icons by Flaticon and FontAwesome.