PageRenderTime 52ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/kernel/classes/datatypes/ezurl/ezurlobjectlink.php

https://github.com/eeggenberger/ezpublish
PHP | 227 lines | 162 code | 14 blank | 51 comment | 7 complexity | b6beb5c9e58c830a59a70eb00979f850 MD5 | raw file
  1. <?php
  2. /**
  3. * File containing the eZURLObjectLink class.
  4. *
  5. * @copyright Copyright (C) 1999-2011 eZ Systems AS. All rights reserved.
  6. * @license http://www.gnu.org/licenses/gpl-2.0.txt GNU General Public License v2
  7. * @version //autogentag//
  8. * @package kernel
  9. */
  10. /*!
  11. \class eZURLObjectLink ezurlobjectlink.php
  12. \ingroup eZDatatype
  13. \brief The class eZURLObjectLink does
  14. */
  15. class eZURLObjectLink extends eZPersistentObject
  16. {
  17. /*!
  18. Constructor
  19. */
  20. function eZURLObjectLink( $row )
  21. {
  22. $this->eZPersistentObject( $row );
  23. }
  24. static function definition()
  25. {
  26. static $definition = array( 'fields' => array( 'url_id' => array( 'name' => 'URLID',
  27. 'datatype' => 'integer',
  28. 'default' => 0,
  29. 'required' => true,
  30. 'foreign_class' => 'eZURL',
  31. 'foreign_attribute' => 'id',
  32. 'multiplicity' => '1..*' ),
  33. 'contentobject_attribute_id' => array( 'name' => 'ContentObjectAttributeID',
  34. 'datatype' => 'integer',
  35. 'default' => 0,
  36. 'required' => true,
  37. 'foreign_class' => 'eZContentObjectAttribute',
  38. 'foreign_attribute' => 'id',
  39. 'multiplicity' => '1..*' ),
  40. 'contentobject_attribute_version' => array( 'name' => 'ContentObjectAttributeVersion',
  41. 'datatype' => 'integer',
  42. 'default' => 0,
  43. 'short_name' => 'contentobject_attr_version',
  44. 'required' => true ) ),
  45. 'keys' => array( 'url_id', 'contentobject_attribute_id', 'contentobject_attribute_version' ),
  46. 'sort' => array( 'url_id' => 'asc' ),
  47. 'class_name' => 'eZURLObjectLink',
  48. 'name' => 'ezurl_object_link' );
  49. return $definition;
  50. }
  51. /*!
  52. \static
  53. */
  54. static function create( $urlID, $contentObjectAttributeID, $contentObjectAttributeVersion )
  55. {
  56. $row = array(
  57. 'url_id' => $urlID,
  58. 'contentobject_attribute_id' => $contentObjectAttributeID,
  59. 'contentobject_attribute_version' => $contentObjectAttributeVersion );
  60. return new eZURLObjectLink( $row );
  61. }
  62. /*!
  63. \static
  64. \return the url object for id \a $id.
  65. */
  66. static function fetch( $urlID, $contentObjectAttributeID, $contentObjectAttributeVersion, $asObject = true )
  67. {
  68. return eZPersistentObject::fetchObject( eZURLObjectLink::definition(),
  69. null,
  70. array( 'url_id' => $urlID,
  71. 'contentobject_attribute_id' => $contentObjectAttributeID,
  72. 'contentobject_attribute_version' => $contentObjectAttributeVersion ),
  73. $asObject );
  74. }
  75. /*!
  76. \static
  77. \return \c true if the URL \a $urlID has any object links
  78. */
  79. static function hasObjectLinkList( $urlID )
  80. {
  81. return ( eZURLObjectLink::fetchObjectVersionCount( $urlID ) > 0 );
  82. }
  83. /*!
  84. \static
  85. \return all object versions which has the link.
  86. */
  87. static function fetchObjectVersionList( $urlID, $parameters = false )
  88. {
  89. $objectVersionList = array();
  90. $urlObjectLinkList = eZPersistentObject::fetchObjectList( eZURLObjectLink::definition(),
  91. null,
  92. array( 'url_id' => $urlID ),
  93. null,
  94. $parameters,
  95. true );
  96. $storedVersionList = array();
  97. foreach ( $urlObjectLinkList as $urlObjectLink )
  98. {
  99. $objectAttributeID = $urlObjectLink->attribute( 'contentobject_attribute_id' );
  100. $objectAttributeVersion = $urlObjectLink->attribute( 'contentobject_attribute_version' );
  101. $objectAttribute = eZContentObjectAttribute::fetch( $objectAttributeID, $objectAttributeVersion );
  102. if ( $objectAttribute ) // Object and version has been deleted
  103. {
  104. $objectID = $objectAttribute->attribute( 'contentobject_id' );
  105. $objectVersion = $objectAttribute->attribute( 'version' );
  106. $object = eZContentObject::fetch( $objectID );
  107. if ( $object )
  108. {
  109. $versionObject = $object->version( $objectVersion );
  110. if ( $versionObject and !in_array( $versionObject->attribute( 'id' ), $storedVersionList ) )
  111. {
  112. $objectVersionList[] = $versionObject;
  113. $storedVersionList[] = $versionObject->attribute( 'id' );
  114. }
  115. }
  116. }
  117. }
  118. return $objectVersionList;
  119. }
  120. /*!
  121. Get url object count
  122. \param urld id
  123. */
  124. static function fetchObjectVersionCount( $urlID )
  125. {
  126. $result = eZPersistentObject::fetchObjectList( eZURLObjectLink::definition(),
  127. array(),
  128. array( 'url_id' => $urlID ),
  129. false,
  130. null,
  131. false,
  132. false,
  133. array( array( 'operation' => 'count( * )',
  134. 'name' => 'count' ) ) );
  135. return $result[0]['count'];
  136. }
  137. /*!
  138. \static
  139. Removes all links for the object attribute \a $contentObjectAttributeID and version \a $contentObjectVersion.
  140. If \a $contentObjectVersion is \c false then all versions are removed as well.
  141. */
  142. static function removeURLlinkList( $contentObjectAttributeID, $contentObjectAttributeVersion )
  143. {
  144. $conditions = array( 'contentobject_attribute_id' => $contentObjectAttributeID );
  145. if ( $contentObjectAttributeVersion !== false )
  146. $conditions['contentobject_attribute_version'] = $contentObjectAttributeVersion;
  147. eZPersistentObject::removeObject( eZURLObjectLink::definition(),
  148. $conditions );
  149. }
  150. /*!
  151. \static
  152. \return all links for the contenobject attribute ID \a $contenObjectAttributeID and version \a $contenObjectVersion.
  153. If \a $contentObjectVersion is \c false then all links for all versions are returned.
  154. */
  155. static function fetchLinkList( $contentObjectAttributeID, $contentObjectAttributeVersion, $asObject = true )
  156. {
  157. $linkList = array();
  158. $conditions = array( 'contentobject_attribute_id' => $contentObjectAttributeID );
  159. if ( $contentObjectAttributeVersion !== false )
  160. $conditions['contentobject_attribute_version'] = $contentObjectAttributeVersion;
  161. $urlObjectLinkList = eZPersistentObject::fetchObjectList( eZURLObjectLink::definition(),
  162. null,
  163. $conditions,
  164. null,
  165. null,
  166. $asObject );
  167. foreach ( $urlObjectLinkList as $urlObjectLink )
  168. {
  169. if ( $asObject )
  170. {
  171. $linkID = $urlObjectLink->attribute( 'url_id' );
  172. $linkList[] = eZURL::fetch( $linkID );
  173. }
  174. else
  175. {
  176. $linkID = $urlObjectLink['url_id'];
  177. $linkList[] = $linkID;
  178. }
  179. }
  180. return $linkList;
  181. }
  182. /*!
  183. \static
  184. Clear view cache for every object which contains URL with given link ID \a $urlID.
  185. */
  186. static function clearCacheForObjectLink( $urlID )
  187. {
  188. $urlObjectLinkList = eZPersistentObject::fetchObjectList( eZURLObjectLink::definition(),
  189. null,
  190. array( 'url_id' => $urlID ),
  191. null,
  192. null,
  193. true );
  194. foreach ( $urlObjectLinkList as $urlObjectLink )
  195. {
  196. $objectAttributeID = $urlObjectLink->attribute( 'contentobject_attribute_id' );
  197. $objectAttributeVersion = $urlObjectLink->attribute( 'contentobject_attribute_version' );
  198. $objectAttribute = eZContentObjectAttribute::fetch( $objectAttributeID, $objectAttributeVersion );
  199. if ( $objectAttribute )
  200. {
  201. $objectID = $objectAttribute->attribute( 'contentobject_id' );
  202. $objectVersion = $objectAttribute->attribute( 'version' );
  203. eZContentCacheManager::clearContentCacheIfNeeded( $objectID, $objectVersion );
  204. }
  205. }
  206. }
  207. /// \privatesection
  208. public $URLID;
  209. public $ContentObjectAttributeID;
  210. public $ContentObjectAttributeVersion;
  211. }
  212. ?>