Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 03. Dezember 2012 13:29

nicmare
Server-Pate
Registriert: 15. Dezember 2010
Beiträge: 1.314
Webseite

Massenbearbeitung von "weitere Bearbeiter"

Ich habe eine komplexe CMSms Installation die für zwei Domains ausgelegt ist. Es handelt sich um zwei Hotels die aus einem CMSms bedient werden.

Dabei sieht der Seitenbaum in etwa so aus:

HotelA
- Seite 1
- Seite 2
HotelB
- Seite 1
- Seite 2

Nur viiiel umfangreicher. Nun habe ich zwei Nutzergruppen angelegt: HotelA und HotelB. Ich möchte dass die Nutzer der Gruppe "HotelA" nur die Seiten unter HotelA bearbeiten dürfen. Dazu muss ich aktuell in jede einzelne Seite klicken und unter Optionen->weitere Bearbeiter die Gruppe auswählen. Ist natürlich extrem lästig und aufwändig da es sehr viele Seiten gibt. Leider gibt es für diese Aktion keine Stapelverarbeitung. Hat jemand ne Idee wie man das noch machen könnte? Gerne auch mit ner SQL-Anweisung…

Offline

#2 03. Dezember 2012 13:41

nicmare
Server-Pate
Registriert: 15. Dezember 2010
Beiträge: 1.314
Webseite

Re: Massenbearbeitung von "weitere Bearbeiter"

Zweite Problematik:
Wenn die Seiten entsprechend zugeordnet wurden, klappt das ja soweit wunderbar. Jeder sieht das was er darf.
Sobald aber Nutzer von HotelB eine neue Seite anlegt (die auch unter HotelB einsortiert wurde), kann der Nutzer von HotelA die Seite dann aber auch sehen. Ist auch logisch da ja standardmäßig kein Wert unter "weitere Bearbeiter" gesetzt wurde. Wenn es hierzu auch ne Lösung gibt, würde die mich sehr interessieren big_smile

Offline

#3 03. Dezember 2012 15:02

faglork
arbeitet mit CMS/ms
Ort: Fränkische Schweiz
Registriert: 15. Dezember 2010
Beiträge: 1.152
Webseite

Re: Massenbearbeitung von "weitere Bearbeiter"

nicmare schrieb:

Leider gibt es für diese Aktion keine Stapelverarbeitung.

Doch, in der Seitenübersicht: Seiten markieren, dann --> "Ausgewählte Einträge" im Dropdown "Eigentümer ändern" auswählen.

hth,
Alex

Offline

#4 03. Dezember 2012 15:04

faglork
arbeitet mit CMS/ms
Ort: Fränkische Schweiz
Registriert: 15. Dezember 2010
Beiträge: 1.152
Webseite

Re: Massenbearbeitung von "weitere Bearbeiter"

nicmare schrieb:

Zweite Problematik:
Wenn die Seiten entsprechend zugeordnet wurden, klappt das ja soweit wunderbar. Jeder sieht das was er darf.
Sobald aber Nutzer von HotelB eine neue Seite anlegt (die auch unter HotelB einsortiert wurde), kann der Nutzer von HotelA die Seite dann aber auch sehen. Ist auch logisch da ja standardmäßig kein Wert unter "weitere Bearbeiter" gesetzt wurde. Wenn es hierzu auch ne Lösung gibt, würde die mich sehr interessieren big_smile

"Manage all Content" rausnehmen?

Servus,
Alex

Beitrag geändert von faglork (03. Dezember 2012 15:04)

Offline

#5 03. Dezember 2012 16:53

nicmare
Server-Pate
Registriert: 15. Dezember 2010
Beiträge: 1.314
Webseite

Re: Massenbearbeitung von "weitere Bearbeiter"

1. Eigentümer ändern hat ja damit nichts zu tun. Es geht um die Option "weitere Bearbeiter"
2. was bringt es wenn "Manage all Content" deaktiviert ist? Der Wert fehlt ja dann trotzdem

Offline

#6 03. Dezember 2012 16:56

faglork
arbeitet mit CMS/ms
Ort: Fränkische Schweiz
Registriert: 15. Dezember 2010
Beiträge: 1.152
Webseite

Re: Massenbearbeitung von "weitere Bearbeiter"

nicmare schrieb:

1. Eigentümer ändern hat ja damit nichts zu tun. Es geht um die Option "weitere Bearbeiter"
2. was bringt es wenn "Manage all Content" deaktiviert ist? Der Wert fehlt ja dann trotzdem

Wenn du als Eigentümer eine Gruppe benennst, sollte das doch funktionieren?
EDITH: Aaaah, Mist, sehe grad dass das nicht geht ... :-(

Servus,
Alex

Beitrag geändert von faglork (03. Dezember 2012 16:58)

Offline

#7 03. Dezember 2012 16:57

nicmare
Server-Pate
Registriert: 15. Dezember 2010
Beiträge: 1.314
Webseite

Re: Massenbearbeitung von "weitere Bearbeiter"

bei "Eigentümer" kann man nur einen einzelnen User auswählen aber keine Gruppen

Offline

#8 03. Dezember 2012 20:14

nockenfell
Moderator
Ort: Gontenschwil, Schweiz
Registriert: 09. November 2010
Beiträge: 2.934
Webseite

Re: Massenbearbeitung von "weitere Bearbeiter"

In der Ereignisverwaltung für den EditContentPost Event einen UDT schreiben, der die die Berechtigungen automatisch setzt.

// root Alias ermitteln
$contentops = cmsms()->GetContentOperations();
$pageId = $params['content']->Id();
$rootAlias = '';

while( $pageId > 0 ) {
    $content = $contentops->LoadContentFromId($pageId);
    if( !is_object( $content ) ) {
         $rootAlias = '';
         break;
    }
    $rootAlias = $content->Alias();
    $pageId = $content->ParentId();
}

$defaultEditors = array();

if ($rootAlias == "hotela") {
   $defaultEditors[] = "gruppenname";
   $defaultEditors[] = "gruppenname2";
}
else if ($rootAlias == "hotelb") {
   $defaultEditors[] = "gruppenname3";
   $defaultEditors[] = "gruppenname4";
}
	
// Editors löschen

$query = "DELETE FROM ".cms_db_prefix()."additional_users WHERE content_id = ?";
$db->Execute($query, array($id));
foreach ($defaultEditors as $oneeditor)
{
	$new_addt_id = $db->GenID(cms_db_prefix()."additional_users_seq");
	$query = "INSERT INTO ".cms_db_prefix()."additional_users (additional_users_id, user_id, content_id) VALUES (?,?,?)";
	$db->Execute($query, array($new_addt_id, $oneeditor, $id));
}

--> das ganze ist kurz zusammenkopiert aus einem UDT den ich in ähnlicher Form nutze. Kann sein, dass nicht alles 100% auf Anhieb funktioniert. Soll auch nur als Denkanstoss dienen.

Beitrag geändert von nockenfell (04. Dezember 2012 06:15)


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#9 03. Dezember 2012 22:58

nicmare
Server-Pate
Registriert: 15. Dezember 2010
Beiträge: 1.314
Webseite

Re: Massenbearbeitung von "weitere Bearbeiter"

ah, funktionsweise hab ich verstanden. besten dank.
muss wohl noch angepasst werden in zeile zwei:

$contentops = $cmsms()->GetContentOperations();

aber bekomme noch nen fehler: "Fatal error: Function name must be a string in /home/www/lib/classes/class.usertagoperations.inc.php(243) : eval()'d code on line 2" was ist damit gemeint?

Offline

#10 04. Dezember 2012 06:16

nockenfell
Moderator
Ort: Gontenschwil, Schweiz
Registriert: 09. November 2010
Beiträge: 2.934
Webseite

Re: Massenbearbeitung von "weitere Bearbeiter"

Da fehlte was. $gCms war nicht definiert. Ich habe es oben abgeändert. Korrekt wäre:

$contentops = cmsms()->GetContentOperations();

--> $cmsms() durch cmsms() ersetzen


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#11 04. Dezember 2012 08:49

nicmare
Server-Pate
Registriert: 15. Dezember 2010
Beiträge: 1.314
Webseite

Re: Massenbearbeitung von "weitere Bearbeiter"

ah stimmt. war schon zu spät… aber der fehler kommt immernoch?
übrigens ist die "echte" seitenstruktur so:

- de
-- Hotel A
--- Seite 1
--- Seite 2
-- Hotel B
--- Seite 1
--- Seite 2

Offline

#12 04. Dezember 2012 09:05

nockenfell
Moderator
Ort: Gontenschwil, Schweiz
Registriert: 09. November 2010
Beiträge: 2.934
Webseite

Re: Massenbearbeitung von "weitere Bearbeiter"

Hm. Das sollte eigentlich genau so stimmen.

Dein Problem könnte mit der ToolBox gelöst werden:

UDT:

$tbtools = new tbTools();

$parent = $tbtools->getLevelAlias(1,$params['content']->Alias());

if ($parent == "Hotel_A")
.....

Übrigens fehlt im Script vor den DB-Operationen noch ein $db = cmsms()->GetDb();

Hilfe dazu:

getLevelAlias($level,[$alias],[$assign])

Gibt den Alias der übergeordneten Seite einer bestimmten Ebene (Level) zurück. Falls die angegebene Ebene höher ist als die der aktuellen Seite, wird ein leerer String zurück gegeben.

Argumente:

    $level - Nummer der Ebene von welcher der Alias zurückgegeben werden soll (1 = 1. Ebene, 2 = 2. Ebene, etc.)
    [$alias] - (optional) der Seiten-Alias oder die ID der Seite, deren übergeordnete Seite der definierten Ebene gefunden werden soll. Wenn kein Wert festgelegt wurde, wird die aktuelle Seite verwendet.
    [$assign] - (optional) der Name der Variable, der das Ergebnis zugewiesen werden soll.


Beispiel:

Der Seiten-Alias der übergeordneten der Seite auf der Ebene 1 ist {$tbtools->getLevelAlias(1)}

Beitrag geändert von nockenfell (04. Dezember 2012 09:07)


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#13 04. Dezember 2012 12:45

nicmare
Server-Pate
Registriert: 15. Dezember 2010
Beiträge: 1.314
Webseite

Re: Massenbearbeitung von "weitere Bearbeiter"

ja. bin nicht so mysql bewandert. auf jeden fall kommt jetzt kein fehler mehr. habe lediglich
$db = cmsms()->GetDb();
ergänzt.

allerdings wurde auch keine gruppe der seite als "weitere bearbeiter" zugewiesen. also merke keinen unterschied.
habe als admin eine neue seite unter "de -> Hotel A" angelegt. da müssts dann eigentlich gruppeA zugewiesen sein. klappt auch nicht wenn ich im UDT "de" als rootalias angebe

Beitrag geändert von nicmare (04. Dezember 2012 12:47)

Offline

#14 04. Dezember 2012 12:48

nockenfell
Moderator
Ort: Gontenschwil, Schweiz
Registriert: 09. November 2010
Beiträge: 2.934
Webseite

Re: Massenbearbeitung von "weitere Bearbeiter"

Prüfe mal ob die von mir angegebene Ebene 1 korrekt ist oder ob es

$parent = $tbtools->getLevelAlias(2,$params['content']->Alias());

heissen müsste


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#15 04. Dezember 2012 12:52

nicmare
Server-Pate
Registriert: 15. Dezember 2010
Beiträge: 1.314
Webseite

Re: Massenbearbeitung von "weitere Bearbeiter"

wollt grad tbtools installieren. kommt die meldung

Konnte das Verzeichnis nicht erstellen ''

welches verzeichnis will er denn??

Offline

#16 04. Dezember 2012 13:10

nockenfell
Moderator
Ort: Gontenschwil, Schweiz
Registriert: 09. November 2010
Beiträge: 2.934
Webseite

Re: Massenbearbeitung von "weitere Bearbeiter"

Aktuell braucht ToolBox auf folgenden Verzeichnissen Schreibrechte:

modules/ToolBox/templates
modules/ToolBox/templates/css
modules/ToolBox/templates/js
modules/ToolBox/log
uploads/ToolBox
uploads/ToolBox/AutoLightBox
uploads/ToolBox/CSV
uploads/AutoLightBox


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#17 04. Dezember 2012 13:12

nockenfell
Moderator
Ort: Gontenschwil, Schweiz
Registriert: 09. November 2010
Beiträge: 2.934
Webseite

Re: Massenbearbeitung von "weitere Bearbeiter"

Wann hast du die Fehlermeldung genau bekommen? Könnte auch vom Template-Import sein. Hier muss das Verzeichnis modules/ToolBox/templates beschreibbar sein.


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#18 04. Dezember 2012 13:14

nicmare
Server-Pate
Registriert: 15. Dezember 2010
Beiträge: 1.314
Webseite

Re: Massenbearbeitung von "weitere Bearbeiter"

hab alle schreibrechte jetzt gesetzt. meldung kommt immernoch. habe das modul via ftp rübergezogen und auf installieren geklickt. dann kommt die meldung. habe in /uploads/ nachgeschaut. wurden alle ordner angelegt. auch modules/ToolBox/templates und dessen unterordner sind beschreibbar.

Offline

#19 04. Dezember 2012 13:19

nicmare
Server-Pate
Registriert: 15. Dezember 2010
Beiträge: 1.314
Webseite

Re: Massenbearbeitung von "weitere Bearbeiter"

habs mit tb 1.30 @ cmsms 1.10.3 probiert. geht einfach nicht. nun mit 1.24 gings!

edit: hab $tbtools nun im UDT verwendet.
sowohl $tbtools->getLevelAlias(2,$params['content']->Alias()); als auch $tbtools->getLevelAlias(1,$params['content']->Alias());

hat sich nichts geändert sad

Beitrag geändert von nicmare (04. Dezember 2012 13:22)

Offline

#20 04. Dezember 2012 13:35

nockenfell
Moderator
Ort: Gontenschwil, Schweiz
Registriert: 09. November 2010
Beiträge: 2.934
Webseite

Re: Massenbearbeitung von "weitere Bearbeiter"

Ok. Muss ich mal suchen was an der ToolBox hängt.

Teste mal den UDT direkt. Schreibe folgenden UDT:

$parent = $tbtools->getLevelAlias(2,"ALIAS_EINER_UNTERSEITE");
echo $parent;

und führe nun den UDT direkt aus (eines der Icons bei der UDT Auflistung). Was kommt als Resultat?

Allgemeine Frage? Hast du Benutzergruppen oder nur einzelne Nutzer gemacht? Der Code von mir brauche ich um weitere Gruppen einzutragen (z.B. wenn ich als Admin eine Seite erstelle, dass der User die Seite auch bearbeiten kann). Mit einzelnen Usern kann das auch gehen, kann aber sein, dass es hier anders heissen muss.


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#21 04. Dezember 2012 14:37

nicmare
Server-Pate
Registriert: 15. Dezember 2010
Beiträge: 1.314
Webseite

Re: Massenbearbeitung von "weitere Bearbeiter"

da kam der richtige wert raus. demzufolge sieht das UDT jetzt so aus:

// root Alias ermitteln
$contentops = cmsms()->GetContentOperations();
$pageId = $params['content']->Id();
$rootAlias = '';

while( $pageId > 0 ) {
    $content = $contentops->LoadContentFromId($pageId);
    if( !is_object( $content ) ) {
         $rootAlias = '';
         break;
    }
    $rootAlias = $content->Alias();
    $pageId = $content->ParentId();
}

$tbtools = new tbTools();

$parent = $tbtools->getLevelAlias(2,$params['content']->Alias());

$defaultEditors = array();

if ($parent == "motel-stralsund") {
   $defaultEditors[] = "motelstralsund";
}
else if ($parent == "hotel-tannenhof") {
   $defaultEditors[] = "hoteltannenhof";
}
	
// Editors löschen
$db = cmsms()->GetDb();
$query = "DELETE FROM ".cms_db_prefix()."additional_users WHERE content_id = ?";
$db->Execute($query, array($id));
foreach ($defaultEditors as $oneeditor)
{
	$new_addt_id = $db->GenID(cms_db_prefix()."additional_users_seq");
	$query = "INSERT INTO ".cms_db_prefix()."additional_users (additional_users_id, user_id, content_id) VALUES (?,?,?)";
	$db->Execute($query, array($new_addt_id, $oneeditor, $id));
}

und es handelt sich hierbei um zwei gruppen. aber in dem array ist ja nur ein wert. kann es sein dass von dem array am ende erwartet wird dass es mind. 2 werte enthält??

edit: habs mal ohne array probiert. löst das problem auch nicht. grrr

Beitrag geändert von nicmare (04. Dezember 2012 14:41)

Offline

#22 04. Dezember 2012 14:41

nockenfell
Moderator
Ort: Gontenschwil, Schweiz
Registriert: 09. November 2010
Beiträge: 2.934
Webseite

Re: Massenbearbeitung von "weitere Bearbeiter"

Muss es mal heute abend testen falls ich dazu komme. Bin bis Ende Jahr mit einem Projekt komplett absorbiert.

Den Teil vor $tbtools kannst du löschen.


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#23 04. Dezember 2012 14:45

nicmare
Server-Pate
Registriert: 15. Dezember 2010
Beiträge: 1.314
Webseite

Re: Massenbearbeitung von "weitere Bearbeiter"

ja. das wäre nett. mittlerweile siehts nur noch so aus:

$tbtools = new tbTools();

$parent = $tbtools->getLevelAlias(2,$params['content']->Alias());
$id = $params['content']->Id();

$defaultEditors = '';

if ($parent == "motel-stralsund") {
   $defaultEditors = "motelstralsund";
}
else if ($parent == "hotel-tannenhof") {
   $defaultEditors = "hoteltannenhof";
}
	
// Editors löschen
$db = cmsms()->GetDb();
$query = "DELETE FROM ".cms_db_prefix()."additional_users WHERE content_id = ?";
$db->Execute($query, array($id));

$new_addt_id = $db->GenID(cms_db_prefix()."additional_users_seq");
$query = "INSERT INTO ".cms_db_prefix()."additional_users (additional_users_id, user_id, content_id) VALUES (?,?,?)";
$db->Execute($query, array($new_addt_id, $defaultEditors, $id));

Offline

#24 04. Dezember 2012 22:35

nockenfell
Moderator
Ort: Gontenschwil, Schweiz
Registriert: 09. November 2010
Beiträge: 2.934
Webseite

Re: Massenbearbeitung von "weitere Bearbeiter"

Hier nun der funktionsfählige Code:

$tbtools = new tbTools();

$parent = $tbtools->getLevelAlias(2,$params['content']->Alias());
$id = $params['content']->Id();

$defaultEditors = array();

if ($parent == "templates-and-stylesheets") {
   $defaultEditors[] = -4;
}
else if ($parent == "hotel-tannenhof") {
   $defaultEditors = "hoteltannenhof";
}
	
// Editors löschen
$db = cmsms()->GetDb();
$query = "DELETE FROM ".cms_db_prefix()."additional_users WHERE content_id = ?";
$db->Execute($query, array($id));
foreach ($defaultEditors as $oneeditor)
{
	$new_addt_id = $db->GenID(cms_db_prefix()."additional_users_seq");
	$query = "INSERT INTO ".cms_db_prefix()."additional_users (additional_users_id, 	user_id, content_id) VALUES (?,?,?)";
	$db->Execute($query, array($new_addt_id, $oneeditor, $id));
}

Beachte folgendes: Als Editor muss die ID des Users als Minuswert also z.B. '-4' angegeben werden. Die findest du am einfachsten heraus, wenn beim Seiten Bearbeiten den Quelltext anschaust:

<div class="pageoverflow">
<div class="pagetext">Weitere Bearbeiter</div>
<div class="pageinput">
<input name="additional_editors" type="hidden" value=""/><select name="additional_editors[]" multiple="multiple" size="5"><option value="-2" selected="selected">Gruppe: Editor</option><option value="-3" selected="selected">Gruppe: Designer</option><option value="-4" selected="selected">Gruppe: Testing</option></select></div>
</div>

--> jeweils den Wert bei value="" nehmen.

Übrigens: UDT lassen sich am einfachsten Debuggen wenn in der config.php $config['debug] = true ist. Dann kannst du einfache echo oder print_r im UDT einfügen und die Ausgabe anschauen. Damit findest du auch schneller heraus wo es allenfalls hakt.


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#25 05. Dezember 2012 09:23

nicmare
Server-Pate
Registriert: 15. Dezember 2010
Beiträge: 1.314
Webseite

Re: Massenbearbeitung von "weitere Bearbeiter"

danke dass du noch zeit gefunden hast! es klappt. allerding nur beim bearbeiten von bestehenden seiten. nicht wenn ich eine neue seite anlege. welches ereignis ist dafür verantwortlich?

Offline