/classes/cjwnewsletterblacklistitem.php

https://github.com/heliopsis/cjw_newsletter · PHP · 302 lines · 189 code · 18 blank · 95 comment · 12 complexity · 3e586d6e9d5ee135a5b148cb75820122 MD5 · raw file

  1. <?php
  2. /**
  3. * File containing the CjwNewsletterBlacklistItem class
  4. *
  5. * @copyright Copyright (C) 2007-2010 CJW Network - Coolscreen.de, JAC Systeme GmbH, Webmanufaktur. All rights reserved.
  6. * @license http://ez.no/licenses/gnu_gpl GNU GPL v2
  7. * @version //autogentag//
  8. * @package cjw_newsletter
  9. * @filesource
  10. */
  11. /**
  12. * Handle Blacklist of NL users or emails
  13. *
  14. * @version //autogentag//
  15. * @package cjw_newsletter
  16. */
  17. class CjwNewsletterBlacklistItem extends eZPersistentObject
  18. {
  19. /**
  20. * constructor
  21. *
  22. * @param array $row
  23. * @return void
  24. */
  25. function CjwNewsletterBlacklistItem( $row )
  26. {
  27. $this->eZPersistentObject( $row );
  28. }
  29. /**
  30. * data fields...
  31. *
  32. * @return array
  33. */
  34. static function definition()
  35. {
  36. return array( 'fields' => array( 'id' => array( 'name' => 'Id',
  37. 'datatype' => 'integer',
  38. 'default' => 0,
  39. 'required' => true ),
  40. 'email_hash' => array( 'name' => 'EmailHash',
  41. 'datatype' => 'string',
  42. 'default' => '',
  43. 'required' => true ),
  44. 'email' => array( 'name' => 'Email',
  45. 'datatype' => 'string',
  46. 'default' => '',
  47. 'required' => true ),
  48. 'newsletter_user_id' => array( 'name' => 'NewsletterUserId',
  49. 'datatype' => 'integer',
  50. 'default' => 0,
  51. 'required' => false ),
  52. 'created' => array( 'name' => 'Created',
  53. 'datatype' => 'integer',
  54. 'default' => 0,
  55. 'required' => true ),
  56. 'creator_contentobject_id' => array( 'name' => 'CreatorContentObjectId',
  57. 'datatype' => 'integer',
  58. 'default' => 0,
  59. 'required' => true ),
  60. 'note' => array( 'name' => 'Note',
  61. 'datatype' => 'string',
  62. 'default' => '',
  63. 'required' => false ),
  64. ),
  65. 'keys' => array( 'id' ),
  66. 'increment_key' => 'id',
  67. 'function_attributes' => array( 'newsletter_user_object' => 'getNewsletterUserObject',
  68. 'creator' => 'getCreatorUserObject',
  69. ),
  70. 'class_name' => 'CjwNewsletterBlacklistItem',
  71. 'name' => 'cjwnl_blacklist_item' );
  72. }
  73. /**
  74. * fetch CjwNewsletterBlacklistItem object by id
  75. * return false if not found
  76. *
  77. * @param integer $id
  78. * @param boolean $asObject
  79. * @return CjwNewsletterBlacklistItem
  80. */
  81. public static function create( $email, $note )
  82. {
  83. $newsletterUserObject = CjwNewsletterUser::fetchByEmail( $email );
  84. $newsletterUserId = 0;
  85. if( is_object( $newsletterUserObject ) )
  86. {
  87. $newsletterUserId = $newsletterUserObject->attribute('id');
  88. }
  89. $row = array( 'email' => strtolower( $email ),
  90. 'note' => $note,
  91. 'created' => time(),
  92. 'creator_contentobject_id' => eZUser::currentUserID(),
  93. 'email_hash' => self::generateEmailHash( $email ),
  94. 'newsletter_user_id' => $newsletterUserId
  95. );
  96. $object = new CjwNewsletterBlacklistItem( $row );
  97. return $object;
  98. }
  99. /**
  100. * generate emailHash for mail
  101. * @param string $email
  102. * @return string emailHash
  103. */
  104. public static function generateEmailHash( $email )
  105. {
  106. $emailHash = md5( strtolower( trim( $email ) ) );
  107. return $emailHash;
  108. }
  109. /**
  110. * fetch CjwNewsletterBlacklistItem object by id
  111. * return false if not found
  112. *
  113. * @param integer $id
  114. * @param boolean $asObject
  115. * @return CjwNewsletterBlacklistItem
  116. */
  117. public static function fetch( $id, $asObject = true )
  118. {
  119. return eZPersistentObject::fetchObject(
  120. self::definition(),
  121. null,
  122. array( 'id' => (int) $id ),
  123. $asObject
  124. );
  125. }
  126. /**
  127. * fetch CjwNewsletterBlacklistItem object by email
  128. * generae hash from email and look for existing hash
  129. * => so it is possible to delete the email make the user anonym
  130. * but we can ask the system if the email is on blacklist
  131. * return false if not found
  132. *
  133. * @param string $email
  134. * @param boolean $asObject
  135. * @return CjwNewsletterBlacklistItem
  136. */
  137. public static function fetchByEmail( $email, $asObject = true )
  138. {
  139. $condArray = array( 'email_hash' => self::generateEmailHash( $email ) );
  140. $objectList = eZPersistentObject::fetchObjectList(
  141. self::definition(),
  142. null,
  143. $condArray,
  144. null,
  145. null,
  146. $asObject,
  147. null,
  148. null,
  149. null,
  150. null );
  151. if( count( $objectList ) >= 1 )
  152. {
  153. return $objectList[0];
  154. }
  155. else
  156. {
  157. return false;
  158. }
  159. }
  160. /**
  161. * Check if given email is on blacklist
  162. *
  163. * @param string $email
  164. * @return boolean
  165. */
  166. static function isEmailOnBlacklist( $email )
  167. {
  168. $object = CjwNewsletterBlacklistItem::fetchByEmail( $email );
  169. if( is_object( $object ) )
  170. {
  171. return true;
  172. }
  173. else
  174. {
  175. return false;
  176. }
  177. }
  178. /**
  179. * fetch all blacklist items
  180. *
  181. * @param integer $limit
  182. * @param integer $offset
  183. * @param boolean $asObject
  184. * @return unknown_type
  185. */
  186. static public function fetchAllBlacklistItems( $limit = 50, $offset = 0, $sortByArray = null, $asObject = true )
  187. {
  188. if ( (int) $limit != 0 )
  189. {
  190. $limitArr = array( 'limit' => $limit, 'offset' => $offset );
  191. }
  192. if( !is_array( $sortByArray ))
  193. {
  194. $sortByArray = array( 'id' => false );
  195. }
  196. $condArray = array( );
  197. $objectList = eZPersistentObject::fetchObjectList(
  198. self::definition(),
  199. null,
  200. $condArray,
  201. $sortByArray,
  202. $limitArr,
  203. $asObject,
  204. null,
  205. null,
  206. null,
  207. null );
  208. return $objectList;
  209. }
  210. /**
  211. * count all blacklsit items
  212. *
  213. * @return integer
  214. */
  215. static public function fetchAllBlacklistItemsCount( )
  216. {
  217. $count = eZPersistentObject::count(
  218. self::definition(),
  219. array( ),
  220. 'id' );
  221. return $count;
  222. }
  223. /**
  224. * Fetches the newsletter object the blacklist object is attached to
  225. *
  226. * @return CjwNewsletterUser
  227. */
  228. function getNewsletterUserObject()
  229. {
  230. if ( $this->attribute( 'newsletter_user_id' ) != 0 )
  231. {
  232. $user = CjwNewsletterUser::fetch( $this->attribute( 'newsletter_user_id' ) );
  233. return $user;
  234. }
  235. else
  236. {
  237. return false;
  238. }
  239. }
  240. /**
  241. * Get Creator user object
  242. *
  243. * @return eZContentObject
  244. */
  245. function getCreatorUserObject()
  246. {
  247. if ( $this->attribute( 'creator_contentobject_id' ) != 0 )
  248. {
  249. $user = eZContentObject::fetch( $this->attribute( 'creator_contentobject_id' ) );
  250. return $user;
  251. }
  252. else
  253. {
  254. return false;
  255. }
  256. }
  257. /**
  258. * if nl user exists update this data to
  259. * (non-PHPdoc)
  260. * @see kernel/classes/eZPersistentObject#store($fieldFilters)
  261. */
  262. public function store( $fieldFilters = null )
  263. {
  264. $newsletterUserObject = $this->getNewsletterUserObject();
  265. if( is_object( $newsletterUserObject ) )
  266. {
  267. $newsletterUserObject->setBlacklisted();
  268. }
  269. parent::store( $fieldFilters );
  270. }
  271. /**
  272. * When a blacklist item is removed, remove the blacklist entries for the user
  273. */
  274. public function remove( $conditions = null, $extraConditions = null )
  275. {
  276. $newsletterUserObject = $this->getNewsletterUserObject();
  277. if( is_object( $newsletterUserObject ) )
  278. {
  279. $newsletterUserObject->setNonBlacklisted();
  280. }
  281. return parent::remove( $conditions = null, $extraConditions = null );
  282. }
  283. }
  284. ?>