|
Lex 007
|
Vendredi 11 Mars 2005 9:49:03 am
Assigner automatiquement des users à des groupes selon leurs attributs
Salut à tous,
Je voudrais faire un cronjob qui me permet d'assigner automatiquement des utilisateurs à des groupes selon la valeurs de certains attributs. Par exemple, les utilisateurs des pays Espagne et France sont dans le groupe Europe et les utilisateurs du Canada et des USA sont dans Amerique du Nord.
J'ai pour cela défini un fichier usergroups.ini qui renseigne les correspondances. Pas de problème, j'arrive bien à le lire et à extraire les données dans mon cronjob.
Maintenant, et c'est là que je bloque, il faut que j'arrive à :
- créer les groupes manquants dans mon cronjob
- ajouter une assignation (un node) à un utilisateur
- supprimer une assignation (un node) à un utilisateur
Pour ajouter un node, j'ai bien tenté d'utiliser le code suivant (en passant en parametre l'objet user et le nodeID a assigner)
function & copyto (& $object,$node){
$nodeAssignment =& eZNodeAssignment::create( array
(
'contentobject_id' => $object->attribute( 'id' ),
'contentobject_version' => $object->attribute( 'current_version' ),
'parent_node' => $node,
'main_node_id' => $object->attribute( 'node_id' ),
'is_main' => 0
)
);
$nodeAssignment->store();
$treenodegewerk = & eZContentObjectTreeNode::addChild($object->attribute( 'id' ),$node,true);
$operationResult = eZOperationHandler::execute(
'content', 'publish', array(
'object_id' => $object->attribute( 'id' ),
'version' => $object->attribute( 'current_version' ) ) );
return eZContentObjectTreeNode::findNode($node,$object->attribute('id'),true);
}
mais il ne marche qu'a moitié puisque dans l'interface d'administration, dans les "Locations" de l'utilisateur, il y a une ligne vide d'ajoutée. J'ai remarqué que la table ezcontentobject_tree n'est pas bien remplie (il manque des données comme le path, la version ...) ce qui empeche la nouvelle location d'apparaitre.
Merci de m'aider si vous avez une idée.
|
|
Lex 007
|
Vendredi 11 Mars 2005 11:44:41 am
ok
merci de ta réponse mais ca n'a pas suffit.
J'ai donc remontée les manches et voila la fonction que j'ai ecrit (basé sur le action.php de eZ Publish):
// *****************************************************************************************************
//
// FUNCTION addLocation : add node location for an object
// $objectID : object ID of the object we want to move
// $newNodeID : node ID of the new location we want to add for this object
//
// *****************************************************************************************************
function addLocation($objectID,$newNodeID) {
$object =& eZContentObject::fetch( $objectID );
$nodeID = $object->attribute("main_node_id" ;
$version =& $object->currentVersion();
$class =& $object->contentClass();
$existingNode =& eZContentObjectTreeNode::fetch( $nodeID );
$selectedNodeIDArray = array($newNodeID);
$assignedNodes =& $version->nodeAssignments();
$assignedIDArray = array();
$setMainNode = false;
$hasMainNode = false;
foreach ( $assignedNodes as $assignedNode )
{
$assignedNodeID = $assignedNode->attribute( 'parent_node' );
if ( $assignedNode->attribute( 'is_main' ) )
$hasMainNode = true;
$assignedIDArray[] = $assignedNodeID;
}
if ( !$hasMainNode )
$setMainNode = true;
$mainNodeID = $existingNode->attribute( 'main_node_id' );
$objectName = $object->attribute( 'name' );
foreach ( $selectedNodeIDArray as $selectedNodeID )
{
if ( !in_array( $selectedNodeID, $assignedIDArray ) )
{
$isPermitted = true;
$parentNode =& eZContentObjectTreeNode::fetch( $selectedNodeID );
$parentNodeObject =& $parentNode->attribute( 'object' );
$canCreate = $parentNode->checkAccess( 'create', $class->attribute( 'id' ), $parentNodeObject->attribute( 'contentclass_id' ) ) == 1;
if ( $isPermitted )
{
$isMain = 0;
if ( $setMainNode )
$isMain = 1;
$setMainNode = false;
$nodeAssignment =& $version->assignToNode( $selectedNodeID, $isMain );
$newNode =& $parentNode->addChild( $object->attribute( 'id' ), 0, true );
$newNode->setAttribute( 'sort_field', $nodeAssignment->attribute( 'sort_field' ) );
$newNode->setAttribute( 'sort_order', $nodeAssignment->attribute( 'sort_order' ) );
$newNode->setAttribute( 'contentobject_version', $version->attribute( 'version' ) );
$newNode->setAttribute( 'contentobject_is_published', 1 );
$newNode->setAttribute( 'main_node_id', $mainNodeID );
$newNode->setName( $objectName );
$newNode->updateSubTreePath();
$newNode->store();
eZContentObjectTreeNode::updateNodeVisibility( $newNode, $parentNode, false );
}
}
}
include_once( 'kernel/content/ezcontentoperationcollection.php' );
eZContentOperationCollection::clearObjectViewCache( $objectID, true );
eZContentObject::expireTemplateBlockCacheIfNeeded();
} // END function addLocation
|