PageRenderTime 44ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/kernel/user/register.php

http://github.com/ezsystems/ezpublish
PHP | 328 lines | 261 code | 48 blank | 19 comment | 47 complexity | 17ea2ea1c2f310e0923466d822947c64 MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.1
  1. <?php
  2. /**
  3. * @copyright Copyright (C) eZ Systems AS. All rights reserved.
  4. * @license For full copyright and license information view LICENSE file distributed with this source code.
  5. * @version //autogentag//
  6. * @package kernel
  7. */
  8. $http = eZHTTPTool::instance();
  9. $Module = $Params['Module'];
  10. $redirectNumber = $Params['redirect_number'];
  11. if ( isset( $Params['UserParameters'] ) )
  12. {
  13. $UserParameters = $Params['UserParameters'];
  14. }
  15. else
  16. {
  17. $UserParameters = array();
  18. }
  19. $viewParameters = array();
  20. $viewParameters = array_merge( $viewParameters, $UserParameters );
  21. $Params['TemplateName'] = "design:user/register.tpl";
  22. $EditVersion = 1;
  23. $tpl = eZTemplate::factory();
  24. $tpl->setVariable( 'view_parameters', $viewParameters );
  25. $Params['TemplateObject'] = $tpl;
  26. // $http->removeSessionVariable( "RegisterUserID" );
  27. if ( $redirectNumber == '3' )
  28. {
  29. $tpl->setVariable( 'content_attributes', false );
  30. $Result = array();
  31. $Result['content'] = $tpl->fetch( 'design:user/register.tpl' );
  32. $Result['path'] = array( array( 'url' => false,
  33. 'text' => ezpI18n::tr( 'kernel/user', 'User' ) ),
  34. array( 'url' => false,
  35. 'text' => ezpI18n::tr( 'kernel/user', 'Register' ) ) );
  36. return $Result;
  37. }
  38. $db = eZDB::instance();
  39. $db->begin();
  40. // Fix issue EZP-22524
  41. if ( $http->hasSessionVariable( "RegisterUserID" ) )
  42. {
  43. if ( $http->hasSessionVariable( 'StartedRegistration' ) )
  44. {
  45. eZDebug::writeWarning( 'Cancel module run to protect against multiple form submits', 'user/register' );
  46. $http->removeSessionVariable( "RegisterUserID" );
  47. $http->removeSessionVariable( 'StartedRegistration' );
  48. $db->commit();
  49. return eZModule::HOOK_STATUS_CANCEL_RUN;
  50. }
  51. $userID = $http->sessionVariable( "RegisterUserID" );
  52. $object = eZContentObject::fetch( $userID );
  53. if ( $object === null )
  54. {
  55. $http->removeSessionVariable( "RegisterUserID" );
  56. $http->removeSessionVariable( 'StartedRegistration' );
  57. }
  58. }
  59. // Create new user object if user is not logged in
  60. if ( !$http->hasSessionVariable( "RegisterUserID" ) )
  61. {
  62. // flag if user client supports cookies and if we should do redirect
  63. $userClientValidates = true;
  64. $doValidationRedirect = false;
  65. if ( !eZSession::userHasSessionCookie() )
  66. {
  67. if ( $redirectNumber == '2' )
  68. $userClientValidates = false;
  69. else
  70. $doValidationRedirect = true;
  71. }
  72. if ( $doValidationRedirect )
  73. {
  74. $db->rollback();
  75. return $Module->redirectTo( '/user/register/2' );
  76. }
  77. else if ( !$userClientValidates )
  78. {
  79. $db->rollback();
  80. $tpl->setVariable( 'user_has_cookie', eZSession::userHasSessionCookie(), 'User' );
  81. $tpl->setVariable( 'user_session_validates', true, 'User' );
  82. $Result = array();
  83. $Result['content'] = $tpl->fetch( 'design:user/register_user_not_valid.tpl' );
  84. $Result['path'] = array( array( 'url' => false,
  85. 'text' => ezpI18n::tr( 'kernel/user', 'User' ) ),
  86. array( 'url' => false,
  87. 'text' => ezpI18n::tr( 'kernel/user', 'Register' ) ) );
  88. return $Result;
  89. }
  90. // else create user object
  91. if ( $http->hasSessionVariable( 'StartedRegistration' ) )
  92. {
  93. eZDebug::writeWarning( 'Cancel module run to protect against multiple form submits', 'user/register' );
  94. $http->removeSessionVariable( "RegisterUserID" );
  95. $http->removeSessionVariable( 'StartedRegistration' );
  96. $db->commit();
  97. return eZModule::HOOK_STATUS_CANCEL_RUN;
  98. }
  99. else if ( $http->hasPostVariable( 'PublishButton' ) or $http->hasPostVariable( 'CancelButton' ) )
  100. {
  101. $http->setSessionVariable( 'StartedRegistration', 1 );
  102. }
  103. $ini = eZINI::instance();
  104. $errMsg = '';
  105. $checkErrNodeId = false;
  106. $defaultUserPlacement = (int)$ini->variable( "UserSettings", "DefaultUserPlacement" );
  107. $sql = "SELECT count(*) as count FROM ezcontentobject_tree WHERE node_id = $defaultUserPlacement";
  108. $rows = $db->arrayQuery( $sql );
  109. $count = $rows[0]['count'];
  110. if ( $count < 1 )
  111. {
  112. $errMsg = ezpI18n::tr( 'design/standard/user', 'The node (%1) specified in [UserSettings].DefaultUserPlacement setting in site.ini does not exist!', null, array( $defaultUserPlacement ) );
  113. $checkErrNodeId = true;
  114. eZDebug::writeError( "$errMsg" );
  115. $tpl->setVariable( 'errMsg', $errMsg );
  116. $tpl->setVariable( 'checkErrNodeId', $checkErrNodeId );
  117. }
  118. $userClassID = $ini->variable( "UserSettings", "UserClassID" );
  119. $class = eZContentClass::fetch( $userClassID );
  120. $userCreatorID = $ini->variable( "UserSettings", "UserCreatorID" );
  121. $defaultSectionID = $ini->variable( "UserSettings", "DefaultSectionID" );
  122. if ( $defaultSectionID == 0 && $count > 0 )
  123. {
  124. $parentContentObject = eZContentObject::fetchByNodeID( $defaultUserPlacement );
  125. $defaultSectionID = $parentContentObject->attribute( 'section_id' );
  126. }
  127. $contentObject = $class->instantiate( $userCreatorID, $defaultSectionID );
  128. $objectID = $contentObject->attribute( 'id' );
  129. // Store the ID in session variable
  130. $http->setSessionVariable( "RegisterUserID", $objectID );
  131. $userID = $objectID;
  132. $nodeAssignment = eZNodeAssignment::create( array( 'contentobject_id' => $contentObject->attribute( 'id' ),
  133. 'contentobject_version' => 1,
  134. 'parent_node' => $defaultUserPlacement,
  135. 'is_main' => 1 ) );
  136. $nodeAssignment->store();
  137. }
  138. $Params['ObjectID'] = $userID;
  139. $Module->addHook( 'post_publish', 'registerSearchObject', 1, false );
  140. if ( !function_exists( 'checkContentActions' ) )
  141. {
  142. function checkContentActions( $module, $class, $object, $version, $contentObjectAttributes, $EditVersion, $EditLanguage )
  143. {
  144. if ( $module->isCurrentAction( 'Cancel' ) )
  145. {
  146. $http = eZHTTPTool::instance();
  147. if ( $http->hasPostVariable( 'RedirectIfDiscarded' ) )
  148. {
  149. eZRedirectManager::redirectTo( $module, $http->postVariable( 'RedirectIfDiscarded' ) );
  150. }
  151. else
  152. {
  153. eZRedirectManager::redirectTo( $module, '/' );
  154. }
  155. $version->removeThis();
  156. $http = eZHTTPTool::instance();
  157. $http->removeSessionVariable( "RegisterUserID" );
  158. $http->removeSessionVariable( 'StartedRegistration' );
  159. return eZModule::HOOK_STATUS_CANCEL_RUN;
  160. }
  161. if ( $module->isCurrentAction( 'Publish' ) )
  162. {
  163. $userID = $object->attribute( 'id' );
  164. $operationResult = eZOperationHandler::execute( 'user', 'register', array( 'user_id' => $userID ) );
  165. // send feedback
  166. $ini = eZINI::instance();
  167. $tpl = eZTemplate::factory();
  168. $hostname = eZSys::hostname();
  169. $user = eZUser::fetch( $userID );
  170. $feedbackTypes = $ini->variableArray( 'UserSettings', 'RegistrationFeedback' );
  171. foreach ( $feedbackTypes as $feedbackType )
  172. {
  173. switch ( $feedbackType )
  174. {
  175. case 'email':
  176. {
  177. // send feedback with the default email type
  178. $mail = new eZMail();
  179. $tpl->resetVariables();
  180. $tpl->setVariable( 'user', $user );
  181. $tpl->setVariable( 'object', $object );
  182. $tpl->setVariable( 'hostname', $hostname );
  183. $templateResult = $tpl->fetch( 'design:user/registrationfeedback.tpl' );
  184. if ( $tpl->hasVariable( 'content_type' ) )
  185. $mail->setContentType( $tpl->variable( 'content_type' ) );
  186. $emailSender = $ini->variable( 'MailSettings', 'EmailSender' );
  187. if ( $tpl->hasVariable( 'email_sender' ) )
  188. $emailSender = $tpl->variable( 'email_sender' );
  189. else if ( !$emailSender )
  190. $emailSender = $ini->variable( 'MailSettings', 'AdminEmail' );
  191. $feedbackReceiver = $ini->variable( 'UserSettings', 'RegistrationEmail' );
  192. if ( $tpl->hasVariable( 'email_receiver' ) )
  193. $feedbackReceiver = $tpl->variable( 'email_receiver' );
  194. else if ( !$feedbackReceiver )
  195. $feedbackReceiver = $ini->variable( 'MailSettings', 'AdminEmail' );
  196. if ( $tpl->hasVariable( 'subject' ) )
  197. $subject = $tpl->variable( 'subject' );
  198. else
  199. $subject = ezpI18n::tr( 'kernel/user/register', 'New user registered' );
  200. $mail->setSender( $emailSender );
  201. $mail->setReceiver( $feedbackReceiver );
  202. $mail->setSubject( $subject );
  203. $mail->setBody( $templateResult );
  204. $mailResult = eZMailTransport::send( $mail );
  205. } break;
  206. default:
  207. {
  208. $registrationFeedbackClass = false;
  209. // load custom registration feedback settings
  210. if ( $ini->hasGroup( 'RegistrationFeedback_' . $feedbackType ) )
  211. {
  212. if ( $ini->hasVariable( 'RegistrationFeedback_' . $feedbackType, 'File' ) )
  213. include_once( $ini->variable( 'RegistrationFeedback_' . $feedbackType, 'File' ) );
  214. $registrationFeedbackClass = $ini->variable( 'RegistrationFeedback_' . $feedbackType, 'Class' );
  215. }
  216. // try to call the registration feedback class with function registrationFeedback
  217. if ( $registrationFeedbackClass && method_exists( $registrationFeedbackClass, 'registrationFeedback' ) )
  218. call_user_func( array( $registrationFeedbackClass, 'registrationFeedback' ), $user, $tpl, $object, $hostname );
  219. else
  220. eZDebug::writeWarning( "Unknown feedback type '$feedbackType'", 'user/register' );
  221. }
  222. }
  223. }
  224. $http = eZHTTPTool::instance();
  225. $http->removeSessionVariable( "GeneratedPassword" );
  226. $http->removeSessionVariable( "RegisterUserID" );
  227. $http->removeSessionVariable( 'StartedRegistration' );
  228. // if everything is passed, login the user
  229. if (
  230. $operationResult['status'] === eZModuleOperationInfo::STATUS_CONTINUE
  231. && $ini->variable( "UserSettings", "RegisterAutoLogin" ) === "enabled"
  232. )
  233. {
  234. $user->loginCurrent();
  235. }
  236. // check for redirectionvariable
  237. if( $operationResult['status'] === eZModuleOperationInfo::STATUS_CONTINUE ||
  238. $operationResult['status'] === eZModuleOperationInfo::STATUS_HALTED )
  239. {
  240. if ( $http->hasSessionVariable( 'RedirectAfterUserRegister' ) )
  241. {
  242. $module->redirectTo( $http->sessionVariable( 'RedirectAfterUserRegister' ) );
  243. $http->removeSessionVariable( 'RedirectAfterUserRegister' );
  244. }
  245. else if ( $http->hasPostVariable( 'RedirectAfterUserRegister' ) )
  246. {
  247. $module->redirectTo( $http->postVariable( 'RedirectAfterUserRegister' ) );
  248. }
  249. else
  250. {
  251. $module->redirectTo( '/user/success/' );
  252. }
  253. }
  254. else
  255. {
  256. eZDebug::writeError( 'Unexpected operation status: ' . $operationResult['status'], 'user/register' );
  257. // @todo: finish the failure code
  258. $module->redirectTo( '/user/register/5' );
  259. }
  260. }
  261. }
  262. }
  263. $Module->addHook( 'action_check', 'checkContentActions' );
  264. $OmitSectionSetting = true;
  265. $includeResult = include( 'kernel/content/attribute_edit.php' );
  266. $db->commit();
  267. if ( $includeResult != 1 )
  268. {
  269. return $includeResult;
  270. }
  271. $ini = eZINI::instance();
  272. if ( $ini->variable( 'SiteSettings', 'LoginPage' ) == 'custom' )
  273. {
  274. $Result['pagelayout'] = 'loginpagelayout.tpl';
  275. }
  276. $Result['path'] = array( array( 'url' => false,
  277. 'text' => ezpI18n::tr( 'kernel/user', 'User' ) ),
  278. array( 'url' => false,
  279. 'text' => ezpI18n::tr( 'kernel/user', 'Register' ) ) );
  280. ?>