Account Suspended
Account Suspended
This Account has been suspended.
Contact your hosting provider for more information.
 All Data Structures Functions Variables Pages
RedBeanManyToManyRelatedModels.php
1 <?php
2  /*********************************************************************************
3  * Zurmo is a customer relationship management program developed by
4  * Zurmo, Inc. Copyright (C) 2017 Zurmo Inc.
5  *
6  * Zurmo is free software; you can redistribute it and/or modify it under
7  * the terms of the GNU Affero General Public License version 3 as published by the
8  * Free Software Foundation with the addition of the following permission added
9  * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
10  * IN WHICH THE COPYRIGHT IS OWNED BY ZURMO, ZURMO DISCLAIMS THE WARRANTY
11  * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
12  *
13  * Zurmo is distributed in the hope that it will be useful, but WITHOUT
14  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15  * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
16  * details.
17  *
18  * You should have received a copy of the GNU Affero General Public License along with
19  * this program; if not, see http://www.gnu.org/licenses or write to the Free
20  * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21  * 02110-1301 USA.
22  *
23  * You can contact Zurmo, Inc. with a mailing address at 27 North Wacker Drive
24  * Suite 370 Chicago, IL 60606. or at email address contact@zurmo.com.
25  *
26  * The interactive user interfaces in original and modified versions
27  * of this program must display Appropriate Legal Notices, as required under
28  * Section 5 of the GNU Affero General Public License version 3.
29  *
30  * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
31  * these Appropriate Legal Notices must retain the display of the Zurmo
32  * logo and Zurmo copyright notice. If the display of the logo is not reasonably
33  * feasible for technical reasons, the Appropriate Legal Notices must display the words
34  * "Copyright Zurmo Inc. 2017. All rights reserved".
35  ********************************************************************************/
36 
37  $basePath = Yii::app()->getBasePath();
38  require_once("$basePath/../../redbean/rb.php");
39 
45  {
46  protected $inside = false;
47 
48  protected $linkName;
49 
56  public function __construct(RedBean_OODBBean $bean, $modelClassName, $linkType, $linkName = null)
57  {
58  assert('is_string($modelClassName)');
59  assert('$modelClassName != ""');
60  assert('is_int($linkType)');
61  assert('is_string($linkName) || $linkName == null');
62  assert('($linkType == RedBeanModel::LINK_TYPE_ASSUMPTIVE && $linkName == null) ||
63  ($linkType == RedBeanModel::LINK_TYPE_SPECIFIC && $linkName != null)');
64  $this->modelClassName = $modelClassName;
65  $tableName = $modelClassName::getTableName();
66  $this->bean = $bean;
67  $this->linkName = $linkName;
68  if ($this->bean->id > 0)
69  {
70  $this->relatedBeansAndModels = array_values(ZurmoRedBean::related($this->bean, $tableName, null, array(),
71  $this->getTableName(ZurmoRedBean::dispense($tableName))));
72  }
73  else
74  {
75  $this->relatedBeansAndModels = array();
76  }
77  }
78 
79  public function getModelClassName()
80  {
81  return $this->modelClassName;
82  }
83 
84  public function getErrors($attributeNameOrNames = null)
85  {
86  if (!$this->inside)
87  {
88  $this->inside = true;
89  $errors = parent::getErrors($attributeNameOrNames);
90  $this->inside = false;
91  }
92  else
93  {
94  $errors = array();
95  }
96  return $errors;
97  }
98 
99  public function validate(array $attributeNames = null)
100  {
101  // Many many relations do not validation the related models.
102  return true;
103  }
104 
105  public function save($runValidation = true)
106  {
107  foreach ($this->deferredRelateBeans as $bean)
108  {
109  $tableName = $this->getTableName($bean);
110  ZurmoRedBean::associate($this->bean, $bean, null, $tableName);
111  }
112  $this->deferredRelateBeans = array();
113  foreach ($this->deferredUnrelateBeans as $bean)
114  {
115  $tableName = $this->getTableName($bean);
116  ZurmoRedBean::unassociate($this->bean, $bean, false, $tableName);
117  }
118  $this->deferredUnrelateBeans = array();
119  return true;
120  }
121 
122  public function getTableName(RedBean_OODBBean $bean = null)
123  {
124  if ($bean == null)
125  {
126  $modelClassName = $this->modelClassName;
127  $bean = ZurmoRedBean::dispense($modelClassName::getTableName());
128  }
129  $types = array($this->bean->getMeta("type"), $bean->getMeta("type"));
130  return static::resolveTableNamesWithLinkName($types, $this->linkName);
131  }
132 
133  public static function getTableNameByModelClassNames($modelClassName, $anotherModelClassName, $linkName = null)
134  {
135  $modelTableName = $modelClassName::getTableName();
136  $anotherModelTableName = $anotherModelClassName::getTableName();
137  $tableNames = array($modelTableName, $anotherModelTableName);
138  return static::resolveTableNamesWithLinkName($tableNames, $linkName);
139  }
140 
141  protected static function resolveTableNamesWithLinkName(array $tableNames, $linkName = null)
142  {
143  sort($tableNames);
144  $tableName = implode("_", $tableNames);
145  if ($linkName != null)
146  {
147  $tableName = strtolower($linkName) . '_' . $tableName;
148  }
149  return $tableName;
150  }
151  }
152 ?>
Generated on Sun Jul 12 2020 07:10:27
Account Suspended
Account Suspended
This Account has been suspended.
Contact your hosting provider for more information.