PageRenderTime 43ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/apps/Manager/controllers/AccountController.php

https://gitlab.com/HudsonNicoletti/Rhyno
PHP | 204 lines | 171 code | 31 blank | 2 comment | 18 complexity | ead8b88394f4eb5e767bc777083e72cf MD5 | raw file
  1. <?php
  2. namespace Manager\Controllers;
  3. use Manager\Controllers\RhynoException;
  4. use Manager\Models\Users as Users,
  5. Manager\Models\Clients as Clients,
  6. Manager\Models\Currencies as Currencies,
  7. Manager\Models\Team as Team;
  8. use Phalcon\Forms\Form,
  9. Phalcon\Forms\Element\Text,
  10. Phalcon\Forms\Element\Password,
  11. Phalcon\Forms\Element\Select,
  12. Phalcon\Forms\Element\File,
  13. Phalcon\Forms\Element\Hidden;
  14. class AccountController extends ControllerBase
  15. {
  16. public function IndexAction()
  17. {
  18. $this->assets->addCss("assets/manager/css/pages/profile.css");
  19. $form = new Form;
  20. $element['currency'] = new Select( "currency" , Currencies::find(["order"=>"code asc"]) ,[
  21. 'using' => ['_','code'],
  22. 'class' => "validate",
  23. ]);
  24. $element['security'] = new Hidden( "security" ,[
  25. 'name' => $this->security->getTokenKey(),
  26. 'value' => $this->security->getToken(),
  27. ]);
  28. # SELECT VIEW
  29. if($this->rhyno_user->permission >= $this->permissions->team):
  30. $member = Team::query()
  31. ->columns([
  32. "Manager\Models\Team.name",
  33. "Manager\Models\Team.image",
  34. "Manager\Models\Team.phone",
  35. "Manager\Models\Users.email",
  36. "Manager\Models\Users.username",
  37. ])
  38. ->innerJoin("Manager\Models\Users","Manager\Models\Team.uid = Manager\Models\Users._")
  39. ->where("Manager\Models\Team.uid = :user:")
  40. ->bind([
  41. "user" => $this->rhyno_user->_
  42. ])
  43. ->execute();
  44. $this->view->member = $member[0];
  45. $this->view->pick("account/member");
  46. elseif($this->rhyno_user->permission <= $this->permissions->client):
  47. $client = Clients::query()
  48. ->columns([
  49. 'Manager\Models\Clients._',
  50. 'Manager\Models\Clients.name',
  51. 'Manager\Models\Clients.phone',
  52. 'Manager\Models\Clients.domain',
  53. 'Manager\Models\Clients.image',
  54. 'Manager\Models\Clients.company',
  55. 'Manager\Models\Clients.role',
  56. 'Manager\Models\Clients.address',
  57. 'Manager\Models\Clients.country',
  58. 'Manager\Models\Clients.zip',
  59. 'Manager\Models\Clients.currency',
  60. 'Manager\Models\Clients.city',
  61. 'Manager\Models\Clients.state',
  62. 'Manager\Models\Clients.vat',
  63. 'Manager\Models\Users.username',
  64. 'Manager\Models\Users.email',
  65. ])
  66. ->innerJoin('Manager\Models\Users', 'Manager\Models\Users._ = Manager\Models\Clients.uid')
  67. ->where("Manager\Models\Clients.uid = :user: ")
  68. ->bind([
  69. "user" => $this->rhyno_user->_
  70. ])
  71. ->execute();
  72. $element['currency']->setAttribute("value",$client[0]->currency);
  73. $this->view->client = $client[0];
  74. $this->view->pick("account/client");
  75. endif;
  76. foreach($element as $e){ $form->add($e); }
  77. $this->view->form = $form;
  78. }
  79. public function UpdateAction()
  80. {
  81. $this->response->setContentType("application/json");
  82. $m = Team::findFirstByUid($this->rhyno_user->_);
  83. $c = Clients::findFirstByUid($this->rhyno_user->_);
  84. $u = Users::findFirst($this->rhyno_user->_);
  85. $username = preg_replace('/\s+/', '', $this->request->getPost("username","string"));
  86. $password = preg_replace('/\s+/', '', $this->request->getPost("password","string"));
  87. $email = $this->request->getPost("email","email");
  88. # catch any erros
  89. try
  90. {
  91. if(!$this->request->isPost() || !$this->request->isAjax()):
  92. return RhynoException::InvalidRequestMethod();
  93. elseif(!$email):
  94. return RhynoException::EmptyInput("E-Mail");
  95. elseif(!$this->isEmail($email)):
  96. return RhynoException::InvalidEmailAddress();
  97. elseif($email != $u->email && Users::findFirstByEmail($email)->_ != NULL):
  98. return RhynoException::RegisteredEmailAddress();
  99. elseif($username != $u->username && Users::findFirstByUsername($username)->_ != NULL):
  100. return RhynoException::RegisteredUsername();
  101. elseif(!$this->security->checkToken()):
  102. return RhynoException::InvalidCsrfToken();
  103. endif;
  104. }
  105. catch (\Exception $e)
  106. {
  107. $this->flags['status'] = false ;
  108. $this->flags['toast'] = "error";
  109. $this->flags['title'] = $e->getMessage();
  110. }
  111. if($this->flags['status']):
  112. try
  113. {
  114. if($this->request->hasFiles()):
  115. foreach($this->request->getUploadedFiles() as $file):
  116. if($file->getError() != 0):
  117. $this->flags['redirect'] = "{$this->rhyno_url}/account";
  118. return RhynoException::UploadError($file->getError());
  119. endif;
  120. $filename = substr(sha1(uniqid()), 0, 12).'.'.$file->getExtension();
  121. $file->moveTo("assets/manager/images/avatar/{$filename}");
  122. $this->ResizeImage("assets/manager/images/avatar/{$filename}");
  123. endforeach;
  124. @unlink("assets/manager/images/avatar/{$m->image}");
  125. endif;
  126. $u->username = $username;
  127. $u->password = ($password != null ) ? password_hash($password, PASSWORD_BCRYPT ) : $u->password;
  128. $u->email = $email;
  129. if(!$u->save()) { return RhynoException::DBError(); }
  130. if($m)
  131. {
  132. $m->name = $this->request->getPost("name","string");
  133. $m->phone = $this->request->getPost("phone","string");
  134. $m->image = ($filename ?: $m->image);
  135. if(!$m->save()) { return RhynoException::DBError(); }
  136. }
  137. elseif($c)
  138. {
  139. $c->name = $this->request->getPost("name","string");
  140. $c->phone = $this->request->getPost("phone","string");
  141. $c->domain = $this->request->getPost("domain","string");
  142. $c->address = $this->request->getPost("address","string");
  143. $c->zip = $this->request->getPost("zip","string");
  144. $c->country = $this->request->getPost("country","string");
  145. $c->city = $this->request->getPost("city","string");
  146. $c->state = $this->request->getPost("state","string");
  147. $c->vat = $this->request->getPost("vat","string");
  148. $c->currency = $this->request->getPost("currency","int");
  149. $c->company = $this->request->getPost("company","string");
  150. $c->role = $this->request->getPost("role","string");
  151. $c->image = ($filename ?: $c->image);
  152. if(!$c->save()) { return RhynoException::DBError(); }
  153. }
  154. $this->flags['toast'] = "success";
  155. $this->flags['title'] = "Account information successfully updated!";
  156. $this->flags['redirect'] = "{$this->rhyno_url}/account";
  157. }
  158. catch (\Exception $e)
  159. {
  160. $this->flags['toast'] = "warning";
  161. $this->flags['title'] = $e->getMessage();
  162. }
  163. endif;
  164. return $this->response->setJsonContent([
  165. "toast" => $this->flags['toast'],
  166. "title" => $this->flags['title'],
  167. "redirect" => $this->flags['redirect'],
  168. "time" => $this->flags['time']
  169. ]);
  170. $this->response->send();
  171. $this->view->setRenderLevel(View::LEVEL_ACTION_VIEW);
  172. }
  173. }