FLUX RSS



ACCUEIL / FORUMS / QUESTIONS TECHNIQUES / ASSIGNER AUTOMATIQUEMENT DES USERS À DES GROUPES SELON LEURS ATTRIBUTS




sondages
Avez-vous déjà utilisé les exports statiques ? :
oui
non
RESULTATS | SONDAGES
liens
eZ systems
http://ez.no
PHPEdit
http://www.waterproof.fr/
AFUL
http://www.aful.org
Framasoft
http://www.framasoft.net
Assigner automatiquement des users à des groupes selon leurs attributs

Vous devez être connecté pour utiliser le forum. Vous pouvez le faire ici.

Auteur Message

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.

Vanessa

Vendredi 11 Mars 2005 11:34:05 am

Re : Assigner automatiquement des users à des groupes selon leurs attributs

Peut-être faut-il ajouter l'instruction suivante à la fin du code pour que tout soit validé correctement dans la base de données :

$object->store();

Vanessa

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

actualités
Traduction d'un tutorial eZ
eZ publish 4.0 est sorti
EzPublish 3.9 enfin disponible !
Ez Publish 3.9 RC2 est en ligne !
Ez Publish 3.9 RC1 disponible !
références
Site ohmycom
OhmyBlog