/src/classes/XLite/Module/CDev/DrupalConnector/Model/Profile.php

https://github.com/chaikk/core · PHP · 124 lines · 40 code · 15 blank · 69 comment · 5 complexity · afeade328e4db74af468e02fdf176241 MD5 · raw file

  1. <?php
  2. // vim: set ts=4 sw=4 sts=4 et:
  3. /**
  4. * LiteCommerce
  5. *
  6. * NOTICE OF LICENSE
  7. *
  8. * This source file is subject to the Open Software License (OSL 3.0)
  9. * that is bundled with this package in the file LICENSE.txt.
  10. * It is also available through the world-wide-web at this URL:
  11. * http://opensource.org/licenses/osl-3.0.php
  12. * If you did not receive a copy of the license and are unable to
  13. * obtain it through the world-wide-web, please send an email
  14. * to licensing@litecommerce.com so we can send you a copy immediately.
  15. *
  16. * @category LiteCommerce
  17. * @package XLite
  18. * @subpackage Model
  19. * @author Creative Development LLC <info@cdev.ru>
  20. * @copyright Copyright (c) 2011 Creative Development LLC <info@cdev.ru>. All rights reserved
  21. * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
  22. * @link http://www.litecommerce.com/
  23. * @see ____file_see____
  24. * @since 1.0.0
  25. */
  26. namespace XLite\Module\CDev\DrupalConnector\Model;
  27. /**
  28. * \XLite\Module\CDev\DrupalConnector\Model\Profile
  29. *
  30. * @package XLite
  31. * @subpackage Model
  32. * @see ____class_see____
  33. * @since 1.0.0
  34. */
  35. class Profile extends \XLite\Model\Profile implements \XLite\Base\IDecorator
  36. {
  37. /**
  38. * User roles defined on Drupal side
  39. *
  40. * @var \XLite\Module\CDev\DrupalConnector\Model\DrupalRole
  41. * @see ____var_see____
  42. * @since 1.0.0
  43. *
  44. * @OneToMany (targetEntity="XLite\Module\CDev\DrupalConnector\Model\DrupalRole", mappedBy="profile", cascade={"all"})
  45. */
  46. protected $drupalRoles;
  47. /**
  48. * prepareCreate
  49. *
  50. * @return void
  51. * @access protected
  52. * @see ____func_see____
  53. * @since 1.0.0
  54. */
  55. protected function prepareCreate()
  56. {
  57. parent::prepareCreate();
  58. if (\XLite\Module\CDev\DrupalConnector\Handler::getInstance()->checkCurrentCMS()) {
  59. $this->setCmsName(\XLite\Module\CDev\DrupalConnector\Handler::getInstance()->getCMSName());
  60. }
  61. }
  62. /**
  63. * Get CMS profile
  64. *
  65. * @return object|void
  66. * @access public
  67. * @see ____func_see____
  68. * @since 1.0.0
  69. */
  70. public function getCMSProfile()
  71. {
  72. return \XLite\Module\CDev\DrupalConnector\Handler::getInstance()->checkCurrentCMS() && $this->getCMSProfileId()
  73. ? user_load($this->getCMSProfileId())
  74. : null;
  75. }
  76. /**
  77. * Update user's Drupal roles
  78. *
  79. * @param array $newDrupalRoles Array of Drupal role IDs
  80. *
  81. * @return void
  82. * @see ____func_see____
  83. * @since 1.0.0
  84. */
  85. public function updateDrupalRoles($newDrupalRoles)
  86. {
  87. $processedRoles = array();
  88. $drupalRoles = $this->getDrupalRoles();
  89. if ($drupalRoles) {
  90. // Remove roles that is not in new roles array
  91. foreach ($this->getDrupalRoles() as $drupalRole) {
  92. if (!in_array($drupalRole->getDrupalRoleId(), $newDrupalRoles)) {
  93. \XLite\Core\Database::getEM()->remove($drupalRole);
  94. } else {
  95. $processedRoles[] = $drupalRole->getDrupalRoleId();
  96. }
  97. }
  98. }
  99. // Get roles to add
  100. $rolesToAdd = array_diff($newDrupalRoles, $processedRoles);
  101. // Create new roles
  102. foreach ($rolesToAdd as $roleId) {
  103. $newDrupalRole = new \XLite\Module\CDev\DrupalConnector\Model\DrupalRole();
  104. $newDrupalRole->setProfile($this);
  105. $newDrupalRole->setDrupalRoleId($roleId);
  106. $this->addDrupalRoles($newDrupalRole);
  107. }
  108. }
  109. }