Benötige Hilfe beim Erstellen eines neuen Plugins

Hast du Probleme oder Fragen bei der Einrichtung bestimmter Plugins ? Diese kannst du hier loswerden.
Antworten
eiseli
Beiträge: 42
Registriert: 21. Nov 2011, 11:08

Benötige Hilfe beim Erstellen eines neuen Plugins

Beitrag von eiseli »

Hallo fasse und co.

Beim Erstellen eines neuen Plugins stecke ich fest. Ich möchte Daten für jeden User speichern, dies passiert, wenn der User eine gewisse Aktivität macht. Das Feld selber ist folgendermassen eingeschränkt:

- nur für berechtigte Benutzer (eigenes Profil und Rollenrecht) sichtbar
- nur für Benutzer mit dem Recht "Profildaten aller Benutzer bearbeiten" editierbar

Ich habe das momentan so gelöst:

Code: Alles auswählen

		$user->setValue($feld, $wert);
		$ret_code = $user->save();
Dies funktioniert aber nur bei Benutzern, die das Recht "Profildaten aller Benutzer bearbeiten" inne haben. Bei allen anderen funktioniert das nicht.

Nun gäbe es die Möglichkeit, per SQL ein insert oder update abzusetzen, bevor ich das aber programmiere, wollte ich hier nachfragen, ob dies der beste Weg ist oder ob es eine schlauere Möglichkeit gibt.

Besten Dank für eure Hinweise.
eiseli
Beiträge: 42
Registriert: 21. Nov 2011, 11:08

Re: Benötige Hilfe beim Erstellen eines neuen Plugins

Beitrag von eiseli »

Hallo nochmals,

Mein Versuch, die Daten direkt per SQL reinzuschreiben sieht so aus. Ich finde die Beschaffung der ID des Feldes noch relativ umständlich, gibt es da einen besseren Weg?

Funktionieren tut's aber:

Code: Alles auswählen

		$admicsa_workstoreId = $user->mProfileFieldsData->mProfileFields["$admicsa_workstore"]->dbColumns["usf_id"];
		$admicsa_workupdId = $user->mProfileFieldsData->mProfileFields["$admicsa_workupd"]->dbColumns["usf_id"];
		if ($user->getValue($admicsa_workstore) == "")
		{
			// Records don't exist yet, create them with the data
			$sql='INSERT INTO ' . TBL_USER_DATA . ' VALUES(NULL,'.$admicsa_currentUserId.', '.$admicsa_workstoreId.', '.$admicsa_worktotal.')';
			$gDb->query($sql);
			$sql='INSERT INTO ' . TBL_USER_DATA . ' VALUES(NULL,'.$admicsa_currentUserId.', '.$admicsa_workupdId.', '.$admicsa_datenowstamp.')';
			$gDb->query($sql);
		}
		else
		{
			// Records already exist, update them
			$sql='UPDATE '. TBL_USER_DATA .' SET usd_value = '.$admicsa_worktotal.' WHERE usd_usr_id='.$admicsa_currentUserId.' AND usd_usf_id='.$admicsa_workstoreId;
			$gDb->query($sql);
			$sql='UPDATE '. TBL_USER_DATA .' SET usd_value = '.$admicsa_datenowstamp.' WHERE usd_usr_id='.$admicsa_currentUserId.' AND usd_usf_id='.$admicsa_workupdId;
			$gDb->query($sql);
		}
Benutzeravatar
fasse
Administrator
Beiträge: 6165
Registriert: 12. Nov 2005, 16:06

Re: Benötige Hilfe beim Erstellen eines neuen Plugins

Beitrag von fasse »

Hallo eiseli,

zu deinem ersten Post:
- hier ist es leider mit Bordmitteln momentan nicht möglich einfach die Felder zu schreiben, bei denen der Benutzer keine Rechte hat. Hier soll die Klasse den Entwickler eigentlich unterstützen und so eine Änderung der Daten nicht fälschlicherweise zulassen. In deinem Fall bleibt dann nichts anders übrig, als dies explizit mit SQL zu tun.

Ein Zugriff auf alle Eigenschaften eines Feldes ist schon etwas einfacher möglich.

Code: Alles auswählen

$gProfileFields->getProperty('LAST_NAME', 'usf_id')
Hier gibst du als ersten Parameter den usf_name_intern des Feldes an (in diesem Fall LAST_NAME) und im zweiten Parameter die Spalte aus der Tabelle adm_user_fields. Zurück bekommst du dann den Wert. Dies funktioniert natürlich auch bei eigenen neuen Feldern.

Viele Grüße
Fasse
eiseli
Beiträge: 42
Registriert: 21. Nov 2011, 11:08

Re: Benötige Hilfe beim Erstellen eines neuen Plugins

Beitrag von eiseli »

Danke Fasse für den Tip. In der Tat ist es mit getProperty einfacher!
Antworten