Norman Leutner
|
Monday 16 August 2004 8:20:59 am
Hello,
for your intranet I need to add about 470 Users to our ez 3.1 system. Because this is too much to add them manual, I`m planning to write a php-script to add them.
I`ve taken a look onto the database while adding a user an found out that the ezPublish system inserts 15 records into 10 different tables for one Standard User.
Are there any functions within the ezSystem which i can use for my script or will i have to script each dynamic SQLstatement by myself? Thanks in advance Norman Leutner
Mit freundlichen Grüßen
Best regards
Norman Leutner
____________________________________________________________
eZ Publish Platinum Partner - http://www.all2e.com
http://ez.no/partners/worldwide_partners/all2e_gmbh
|
Ole Morten Halvorsen
|
Tuesday 17 August 2004 1:33:23 am
Hi Norman, You do not have to write any SQL statements at all. Have a look at the small user creation example script below: <?php
include_once( 'kerxnel/classes/ezcontentobject.php' );
include_once( 'lib/ezlocale/classes/ezdatetime.php' );
$firstName = "Average";
$lastName = "Joe";
$email = "[email protected]";
$userClassID = 4;
$class =& eZContentClass::fetch( $userClassID );
$creatorID = 14; // 14 == admin
$groupNodeID = 5;
$contentObject =& $class->instantiate( $creatorID, 1 );
$nodeAssignment =& eZNodeAssignment::create( array(
'contentobject_id' => $contentObject->attribute( 'id' ),
'contentobject_version' => $contentObject->attribute( 'current_version' ),
'parent_node' => $groupNodeID,
'is_main' => 1
)
);
$nodeAssignment->store();
$version =& $contentObject->version( 1 );
$version->setAttribute( 'modified', eZDateTime::currentTimeStamp() );
$version->setAttribute( 'status', EZ_VERSION_STATUS_DRAFT );
$version->store();
$contentObjectID = $contentObject->attribute( 'id' );
$contentObjectAttributes =& $version->contentObjectAttributes();
$contentObjectAttributes[0]->setAttribute( 'data_text', $firstName );
$contentObjectAttributes[0]->store();
$contentObjectAttributes[1]->setAttribute( 'data_text', $lastName );
$contentObjectAttributes[1]->store();
$user =& eZUser::create( $contentObjectID );
$password = eZUser::createPassword( 8, $firstName . $lastName . $email );
$hash = $user->createHash( $login, $password, eZUser::site(), eZUser::hashType() );
$user->setAttribute('login', $login );
$user->setAttribute('email', $email);
$user->setAttribute('password_hash', $hash );
$user->setAttribute('password_hash_type', 2 );
$user->store();
include_once( 'lib/ezutils/classes/ezoperationhandler.php' );
$operationResult = eZOperationHandler::execute( 'content', 'publish', array( 'object_id' => $contentObjectID,
'version' => 1 ) );
?>
Senior Software Engineer - Vision with Technology
http://www.visionwt.com
http://www.omh.cc
http://www.twitter.com/omh
eZ Certified Developer
http://ez.no/certification/verify/358441
http://ez.no/certification/verify/272578
|
Norman Leutner
|
Tuesday 17 August 2004 7:07:08 am
Thanks for the script.
I`ve got the problem left that the publish function does not work and returns: <b>Cannot execute operation 'publish' in module 'content', no valid dataeZOperationHandler::execute</b> The script only creates only a draft at the moment. Here is the script again:
<?php
include_once( 'kernel/classes/ezcontentobject.php' );
include_once( 'lib/ezlocale/classes/ezdatetime.php' );
// Testuser definition
$firstName = "Hugo";
$lastName = "Heise";
$email = "[email protected]";
$login= "h-waldmann";
echo "creating Account: ".$login." - ".$firstName." ".$lastName." / ".$email."<br>";
$userClassID = 4;
$class =& eZContentClass::fetch( $userClassID );
$creatorID = 426; // 426 = N.Leutner
$groupNodeID = 140;
$contentObject =& $class->instantiate( $creatorID, 1 );
// Insert into Table eznode_assignment
$nodeAssignment =& eZNodeAssignment::create( array(
'contentobject_id' => $contentObject->attribute( 'id' ),
'contentobject_version' => $contentObject->attribute( 'current_version' ),
'parent_node' => $groupNodeID,
'sort_field' => 9,
'is_main' => 1
)
);
$nodeAssignment->store();
// Insert into Table ezcontentobject_version
$version =& $contentObject->version( 1 );
$version->setAttribute( 'modified', eZDateTime::currentTimeStamp() );
$version->setAttribute( 'status', EZ_VERSION_STATUS_DRAFT );
$version->store();
// Inserts into Table ezcontentobject_attribute
// Attribute1 = parent attribute
$contentObjectID = $contentObject->attribute( 'id' );
$contentObjectAttributes =& $version->contentObjectAttributes();
// Attribute2 = firstname
$contentObjectAttributes[0]->setAttribute( 'data_text', $firstName );
$contentObjectAttributes[0]->store();
// Attribute3 = lastname
$contentObjectAttributes[1]->setAttribute( 'data_text', $lastName );
$contentObjectAttributes[1]->store();
// Inserts into Table ezuser
// Create user by parent attribute ID
$user =& eZUser::create( $contentObjectID );
// Create password with 8 Charakters
$password = eZUser::createPassword( 8, $firstName . $lastName . $email );
echo "Password lautet: ".$password."<br>";
// Create passwordhash
$hash = $user->createHash( $login, $password, eZUser::site(), eZUser::hashType() );
// Set attributes
$user->setAttribute('login', $login );
$user->setAttribute('email', $email);
$user->setAttribute('password_hash', $hash );
$user->setAttribute('password_hash_type', 2 );
$user->store();
// Publish user
// This function returns the error: Cannot execute operation 'publish' in module 'content',
// no valid dataeZOperationHandler::execute
include_once( 'lib/ezutils/classes/ezoperationhandler.php' );
$operationResult = eZOperationHandler::execute( 'content', 'publish', array( 'object_id' => $contentObjectID,
'version' => 1 ) );
?>
Mit freundlichen Grüßen
Best regards
Norman Leutner
____________________________________________________________
eZ Publish Platinum Partner - http://www.all2e.com
http://ez.no/partners/worldwide_partners/all2e_gmbh
|