Multi-User-Kalender

Begonnen von keks, 01 November 2003, 17:20:21

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 2 Gäste betrachten dieses Thema.

keks

Hiho,

auf dem 6.9er Nuke wollte ich folgende Kalenderänderungen vormehmen:
1. Mehrere Nutzer verwalten ihre Termine getrennt mit nur einem Kalender.
2. Einzelne Termine können für (ausgewählte) andere freigegeben werden.
(3. Unterscheidung bei der Freigabe zwischen Zeit und Inhalt. Damit könnte man sehen, wann jemand anderes "besetzt" ist, ohne zu wissen warum.)

Das in Klammern ist vorerst zurückgesellt bzw. weniger wichtig.

Zu dem Thema bekamm ich hier http://www.nukeboards.de/index.php?s=3c5cfb1bd617b3dc090b1abb8dda45d4&showtopic=18220&hl=
schon mal wertvolle Hinweise - allerdings für den NukeKalender.

Kann mir jemand spezielle Aussagen oder noch bessere Wege fürs vkpMx geben? Danke!

Gruß
der Keks
 

keks

Ok, es geht voran! :)  

Vorweg: Kann mir jemand sagen, ob ich das alles einfacher/anders machen kann?

Momentan kann jeder seine Termine verwalten und diese als privat oder öffentlich klassifizieren. Dazu "missbrauche" ich die Themen.

Beim anzeigen des Kalenders lasse ich prüfen, ob der Nutzer mit dem Informanten des Termins übereinstimmt oder ob der Termin öffentlich ist. Nur dann wird was angezeigt. Daher sieht die index.php des Kalenders um die Zeile 250 nun wiefolgt aus:

 
Zitat$cookie = mxGetUserSession(); #neu
   $username = $cookie[1]; #neu

   $result = sql_query("SELECT ... FROM ".TABLE_CAL_EVENTS."
   WHERE
   (informant='$username' OR topic=1) #neu
   AND ...

Ausserdem muss der zweite Teil auch noch mal bei Zeile ~440 rein:
 
ZitatWHERE
      (informant='$username' OR topic=1) #neu
      AND ...

Soweit so gut. Nun soll aber auch noch eine Freigabemöglichkeit für andere Nutzer einzeln kommen. Dazu werde ich aber ne neue Tabelle brauchen? Oder wie kann man das machen?

Danke,
der Keks

P.S. Nicht schimpfen, wenn das alles total unprofessionell und unsauber sein sollte. Ich bin ein blutiger Anfänger....

EDIT:
Die Zeile
 
Zitat(informant='$username' OR topic=1) #neu
AND
 

muss hinter jedes "WHERE". Wenn man das auch in den entsprechenden Blöcken macht, dann funktioniert es auch in allen Ansichten (rechts, links, Combi, Month, ...).

Bei der Month-Ansicht (die kleine Monatsübersicht für die Außenseiten) habe ich besagte Zeile absichtlich NICHT eingefügt. Dadurch sieht jeder, inwieweit ein Tag schon "vergeben" ist. Erscheint mir sinnvoll bei einem Team-Kalender...

Folgende Zeile muss für jede Funktion eingefügt werden - soweit ich das überblicke:

 
Zitat$cookie = mxGetUserSession(); #neu
   $username = $cookie[1]; #neu

[Editiert am 2/11/2003 von keks]

keks

Folgeproblem:

Wo muss ich was ändern, damit die Benutzer auch die Termine löschen können? Sprich: Wo finde ich die Zeilen die bewirken, dass nur der Admin löschen kann?

Gruß
der Keks

EDIT:
Oh, oh. Das scheint schwerer zu sein als gedacht. Nach einigen Wühl-Stunden scheint mir das Problem in der functions.inc.php zu liegen. Den Aufruf der Funktion "CalendarDeleteEvent" aus den Kalenderblöcken kann ich da nicht nachvollziehen/finden.   :(

Bei den anderen "Event"´s wird in Zeile 1029 folgendes zugewiesen:
 
Zitat$actionfile = "admin.php"

Das dürfte weitere Probleme verursachen, da normale Nutzer da natürlich nicht zugreifen können. Ehrlich gesagt: Ich bin an den Grenzen meines Verständnisses angekommen.

Jede Hilfe und jeder Hinweis sind willkomen.

Gruß
der Keks

keks

Hiho,

jetzt verstehe ich, warum hier keiner antwortet.  ;)

Das Thema ist mit ein paar kleinen Codeänderungen nicht gemacht. Ich hab mittlerweile eine Möglichkeit gefunden, den normalen Nutzer seine Termine wieder löschen zu lassen - auch wenn die "Umstände" noch etwas unsauber sind.  Dank  www.php.net wurschtel ich mich so durch. Optimal ist diese Vorgehensweise aber nicht.

Falls mir also jemand von den großen Helden hier ne Hilfestellung geben kann: bitte bitte bitte!

Momentaner Istzustand:
Die Funktionen der admin/modules/calendar.php habe ich ausgelagert und rufe sie nun über die modules.php auf, da der Zugriff über die admin.php normalen Nutzer verwehrt ist. Dabei fallen mir ehrlich gesagt die umfangreichen Anpassungen von Adminfunktionen auf normale Nutzer ordentlich schwer, da sie ständig und überall auftreten.

Gibt es keinen einfacheren Weg?
Ein "Nein" würde zumindest motivierend wirken.  ;)  

Gruß
der Keks

Andi

Hi Keks :)

bitte nicht falsch verstehen, es ist ein sehr interessantes Thema, aber im Moment hat von uns sicher keine Zeit, sich das genau anzusehen und Dich zu unterstützen.
Aber mache weiter, Deine Ansätze hören sich schon gut an und mit Ausdauer wirst Du sicher etliches dabei lernen und es letztendlich schaffen.
schön´s Grüssle, Andi

keks

Eine Antwort, eine Antwort!  Juhu! :D  ;)

Kein Problem. Ich versteh Dich schon, ich warte schließlich auch auf das Update.  ;)  

Es war auch nicht mein Anliegen, dass irgendwer den Code durchforstet und mir das Modul umschreibt. Nur:

Vielleicht kennt sich jemand mit den Funktionsabläufen so gut aus, dass er mir sagen kann: DAS wird DA SO und SO übergeben und gereglt, deswegen schau DA mal nach.

Vor allem hab ich auch Sicherheitsbedenken, wenn ich Funktionen die über die admin.php ablaufen rauslöse und allen Benutzern zugängig mache.

Bis auf weiteres werde ich hier also meine One-Man-Show fortsetzen und die Zwischenergebnisse posten. Vielleicht fällt ja doch mal jemanden was dazu ein...

Gruß
der Keks

keks

Ein vorerst letzter Stein liegt mir im Weg, da folgende Fehlermeldung nervt:
 
ZitatFatal error: Cannot redeclare opentable() (previously declared in /home/www/web5/html/vkpmx/themes/vkp-Kwondo/theme.php:43) in /home/www/web5/html/vkpmx/themes/vkp-Kwondo/theme.php on line 42

Kann ich die Funktion "opentable" irgendwie "ent-deklarieren"?

Ich weiss nicht wie ich das sonst verhindern kann. Das Problem entsteht, da ich eine allgemeingültige Funktion "X" aufrufe, die ich nicht ändern kann/will. In dieser Funktion "X" wird dann offenbar (zum zweiten mal bzw. obwohl schon bekannt) die Deklaration "opentable" verursacht.

Daher meine Idee: Bevor ich die Funktion "X" aufrufe, lasse ich das System "opentable" vergessen...

Aber wie?

Gruß
der Keks

BowlingX

Da hast du die Funktion Opentable irgendwo 2 mal deklariert (zweimal definiert mit function opentalbe()...) bzw. irgendeine Datei 2 mal includet oder ähnliches
Kein Support über Mail, (ungefragter) PN oder ICQ, ausschließlich direkt im Forum!

keks

Genau das ist mein Problem. Richtig erkannt.  ;)  

Daher meine Frage, wie bzw. ob ich die Funktion vor dem 2. Mal quasi "entladen" kann. Leider ist es (fast) unmöglich, den ersten oder zweiten Aufruf wegzunehmen, da er jeweils in allgemeinen und hier auch benötigten Funktionen steckt. Daher die Dopplung.

Danke soweit,
der Keks

EDIT:
Ich kann es nachvollziehen, aber das nutzt mir leider nix.

Die Funktion "opentable" wird über
 
Zitatinclude("header.php");
bzw.
 
Zitatinclude("footer.php");
indirekt erzeugt/includet.

Das geschieht zum einen in der index.php des Kalendermoduls selbst. Über diese index.php läuft aber auch der Aufruf der Funktion "CalendarUserChangeEvent" die wiederum unter anderen die Funktion "calPrepareEventForSql" aufruft. Und genau da taucht zum zweiten mal obiger "include"-Aufruf auf. Bums, aus, Fehlermeldung, Tränen, Verzweiflung.

[Editiert am 13/11/2003 von keks]

BowlingX

Der Aufruf stört nicht! Nur das deklarieren, das definieren der Funktion in dieser Art:

function openTable()
{
}

Der Darf NICHT doppelt sein!
Kein Support über Mail, (ungefragter) PN oder ICQ, ausschließlich direkt im Forum!

keks

Thanks, aber das verstehe ich nicht ganz. Wenn ich eine Datei include die eine Funktion definiert, dann erscheint diese Fehlermeldung - oder etwa nicht? Dann wäre ich verwirrt.

Bisher hab ich mir das so vorgestellt. Siehe auch mein EDIT beim letzten Posting. Ein Trugschluss?

der Keks

Andi

Hi Keks :)
 
ZitatIn dieser Funktion "X" wird dann offenbar (zum zweiten mal bzw. obwohl schon bekannt) die Deklaration "opentable" verursacht.
 

Es wird irgendwo die header.php ein zweites mal includet. Überprüfe mal die Reihenfolgen, wo, was passiert und die header.php includet wird.
Oder wird sogar die  theme.php irgendwo direkt includet?
schön´s Grüssle, Andi

keks

Siehe oben mein letztes EDIT: Es wird die header.php zweimal includet.

Aber ich kann doch nicht aus der index.php des Kalenders den include rauswerfen, da es dort anderweitig gebraucht wird - sonst hättest Du es wohl nicht reingeschrieben. *g* Selbiges gilt für die Funktion calPrepareEventForSql.

Dummerweise brauch ich (nach meinem derzeitigen Umbaustand) beides: index und calPrepareEventForSql. Da aber beides auch anderweitig genutzt wird kann ich es nicht ändern. Alternativ müsste ich eine Funktion calPrepareEventForSql1 schaffen und dort den include rauswerfen.

Ich dachte nur, es gäbe einen besseren weg über ein "entladen" der Funktion.

Danke Euch,
der Keks

keks

Ich habs!

Wenn ich beim zweiten Aufruf einfach folgendes davorsetze
 
Zitatif (!function_exists("opentable")) {
dann klappts auch mit dem Nachbarn.  ;)  

Und die Funktion bleibt ansonsten erhalten.

Das müßte doch so gehen, oder?

der Keks

Andi

Booooaaaahhhh....

Da bist Du einem gewaltigen Bug auf die Spur gekommen.
Stimmt, in der Funktion calPrepareEventForSql() darf die header.php natürlich nicht nochmal includet werden. Also Dein Weg mit der Abfrage function_exists() ist, wenn es so funktioniert, absolut ok.
Kann es im Moment leider nicht testen, weil ich hier im Geschäft sitze...
schön´s Grüssle, Andi

keks

Die Schlacht ist geschlagen, der Multi-User-Kalender steht und ... *trommelwirbel* ... funktioniert. ;)

Derzeitige Funktionen:
Verwaltung privater und öffentlicher Termine. Dabei werden private Termine nur dem jeweiligen Nutzer angezeigt, öffentliche Termine sind dagegen für jedermann einsehbar. Die Einträge können auch durch normale Nutzer geändert/gelöscht werden - natürlich nur, soweit das ihre sind.

Wenn sich jemand für die (etwas umfangreicheren) Änderungen interessiert:
PM an mich genügt.

"Ich freu mihich. Soviel Spaß für wenig Geld..."
der Keks


Andi

Hi Keks :)

hört sich ja super an! Schön, dass Du es geschafft hast.

Klar dass mich das interessiert, bitte eine Version an mich  ;)   :quest  

info@pragmamx.org

Du kannst es auch gerne in den Downloadbereich stellen.
schön´s Grüssle, Andi

keks

Danke fürs Interesse! ;)

Bevor ich es in den Downloadbereich stelle, warte ich ab, was Du dazu sagst. Schon wegen möglichen Sicherheitslöchern.

Sorry im voraus: für einen Fachmann sieht der Quellcode jetzt bestimmt "vergewaltigt" und furchtbar laienhaft aus. Aber letzteres ist es ja auch.  ;)  
Ich hab mich nach dem Prinzip Try&Error so durchgewurschtelt. Aber es funktioniert...

Läßt sich eine Dokumentation unter "SiteUpdates" exportieren?
Es wäre praktisch die Anleitung zum Umbau.

Mail folgt,
der Keks