PageRenderTime 49ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 1ms

/plugins/grinkomeda/networker/components/Registration.php

https://gitlab.com/gideonmarked/wellmarketing
PHP | 224 lines | 166 code | 38 blank | 20 comment | 22 complexity | b32481dd0f83d2ce8b61df38d81842b8 MD5 | raw file
  1. <?php namespace Grinkomeda\Networker\Components;
  2. use October\Rain\Database\Traits\Validation;
  3. use Redirect;
  4. use Auth;
  5. use Flash;
  6. use Event;
  7. use Cms\Classes\ComponentBase;
  8. use October\Rain\Exception\ApplicationException;
  9. use October\Rain\Exception\ValidationException;
  10. use Grinkomeda\Networker\Models\Package;
  11. use Grinkomeda\Networker\Models\Ticket;
  12. use Grinkomeda\Networker\Models\Account;
  13. use Grinkomeda\Networker\Models\Profile;
  14. use Grinkomeda\Networker\Models\Finance;
  15. use Grinkomeda\Networker\Models\Entry;
  16. use RainLab\User\Models\User;
  17. use RainLab\User\Models\Settings as UserSettings;
  18. class Registration extends ComponentBase
  19. {
  20. public function componentDetails()
  21. {
  22. return [
  23. 'name' => 'Registration Component',
  24. 'description' => 'Adds a registration form for profile and account creation'
  25. ];
  26. }
  27. public function onRun()
  28. {
  29. $this->getPackages();
  30. }
  31. public function defineProperties()
  32. {
  33. return [];
  34. }
  35. public function onRegister()
  36. {
  37. /*
  38. * Validate input
  39. */
  40. $data = post();
  41. $this->page['data'] = $data;
  42. $account_code = $this->createAccountCode();
  43. $data['email'] = "bm" . $account_code . "@temporary.com";
  44. $is_spill = false;
  45. /*
  46. * Register user
  47. */
  48. $requireActivation = UserSettings::get('require_activation', false);
  49. $automaticActivation = UserSettings::get('activate_mode') == UserSettings::ACTIVATE_AUTO;
  50. $userActivation = UserSettings::get('activate_mode') == UserSettings::ACTIVATE_USER;
  51. $models_created = array();
  52. $errors = 0;
  53. /*
  54. * Create account
  55. */
  56. $models_created['account'] = new Account;
  57. $models_created['account']->level_id = 1; //this should be a dynamic value
  58. $models_created['account']->account_code = $account_code;
  59. $models_created['account']->leader_code = $data["leader_code"];
  60. if(!is_null(post("placement_code")) && post('placement_code') != "")
  61. {
  62. $models_created['account']->placement_code = post("placement_code");
  63. $models_created['account']->placement_exists = true;
  64. $is_spill = true;
  65. }
  66. else {$models_created['account']->placement_code = $data["leader_code"];}
  67. $models_created['account']->creation_date = date('Y-m-d H:i:s');
  68. /*
  69. * Create profile
  70. */
  71. $models_created['profile'] = new Profile;
  72. $models_created['profile']->first_name = $data["first_name"];
  73. $models_created['profile']->last_name = $data["last_name"];
  74. $models_created['profile']->middle_name = $data["middle_name"];
  75. $models_created['profile']->creation_date = date('Y-m-d H:i:s');
  76. /*
  77. * Create entry
  78. */
  79. $models_created['entry'] = new Entry;
  80. $models_created['entry']->ticket_code = $data['ticket_code'];
  81. $models_created['entry']->package_id = post('package');
  82. $models_created['entry']->creation_date = date('Y-m-d H:i:s');
  83. $errors = $errors + $this->validateModels( $models_created );
  84. /*
  85. * Check ticket
  86. */
  87. $models_created['ticket'] = Ticket::where('code',$data['ticket_code'])->where('link_id',null)->first();
  88. if( !is_null($models_created['ticket']) && $models_created['ticket']->exists ) {
  89. $models_created['ticket']->purchase_date = date('Y-m-d H:i:s');
  90. $models_created['ticket']->link_date = date('Y-m-d H:i:s');
  91. } else {
  92. $errors++;
  93. throw new ValidationException(['The ticket is invalid. Please contact customer relations.','tcket']);
  94. }
  95. if( $errors == 0 ) {
  96. $user = new User;
  97. $user->username = $data['username'];
  98. $user->email = $data['email'];
  99. $user->password = $data['password'];
  100. $user->password_confirmation = $data['password_confirmation'];
  101. $user->save();
  102. $models_created['account']->user_id = $models_created['profile']->user_id = $models_created['entry']->user_id = $models_created['ticket']->link_id = $user->id;
  103. $this->saveModels( $models_created );
  104. $package_amount = Package::find($data["package"])->first()['amount'];
  105. $this->startNetworking( $account_code, $package_amount, 1 );
  106. /*$finance = Finance::createForceMatrix( $account_code, $data["package"],
  107. ($is_spill ? $data["leader_code"] : null ));*/
  108. $this->page['registered'] = true;
  109. $this->page['account_code'] = $account_code;
  110. Auth::login($user);
  111. return Redirect::to('account/dashboard');
  112. }
  113. }
  114. private function startNetworking( $account_code, $amount, $level )
  115. {
  116. $active_counter = 1;
  117. $package_amount = Package::find(6)->first()['amount'];
  118. $active_account = Account::where( 'account_code',$account_code )->first();
  119. $leader_code = $active_account['leader_code'];
  120. $children_accounts = Account::getAncestralChildren( $leader_code, $level );
  121. $finance_list = array(
  122. 500,
  123. 750,
  124. 1125,
  125. 1686,
  126. 2529
  127. );
  128. Finance::createPendingUpgrade( $account_code, $leader_code, $package_amount, $amount, $level);
  129. if(count($children_accounts) == 3) {
  130. Finance::convertPendingToUpgrade($children_accounts,$level,$amount);
  131. $leader_account = Account::where( 'account_code', $active_account['leader_code'] )->first();
  132. Account::upgradeToNextLevel( $leader_account, $level );
  133. }
  134. if(count($children_accounts) > 3) {
  135. Finance::addExtraProfit($children_accounts,$level,$amount);
  136. }
  137. if($account_code != $active_account['leader_code']) {
  138. $this->startNetworking( $active_account['leader_code'], $finance_list[$level], $level+1 );
  139. }
  140. }
  141. public function validateModels( $models_created ) {
  142. $errors = 0;
  143. foreach ($models_created as $model) {
  144. if(!is_null($model))
  145. $errors += ($model->validate() ? 0 : 1);
  146. }
  147. return $errors;
  148. }
  149. public function saveModels( $models_created ) {
  150. foreach ($models_created as $key => $model) {
  151. $model->save();
  152. }
  153. }
  154. public function getPackages()
  155. {
  156. $packages = Package::select('level_id','description','amount')->where('id',6)->get();
  157. $this->page['packages'] = $packages;
  158. }
  159. private function createAccountCode()
  160. {
  161. $account_code = $this->randomGeneration(7);
  162. return $account_code;
  163. }
  164. private function randomGeneration($length)
  165. {
  166. $characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  167. $string = '';
  168. for ($i = 0; $i < $length; $i++) {
  169. $string .= $characters[rand(0, strlen($characters) - 1)];
  170. }
  171. if( $this->checkUniqueTickets( $string ) ) {
  172. return $string;
  173. } else {
  174. return $this->randomGeneration($length);
  175. }
  176. }
  177. private function checkUniqueTickets( $string )
  178. {
  179. $ticketlist = Account::where('account_code',$string)->get();
  180. if(count($ticketlist) > 0) {
  181. return false;
  182. } else {
  183. return true;
  184. }
  185. }
  186. }