PageRenderTime 39ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/models/link.php

https://bitbucket.org/svbailey/agora-advertising.com-fork
PHP | 287 lines | 136 code | 51 blank | 100 comment | 10 complexity | 2ee103e7792a428266dda2f0c4291792 MD5 | raw file
Possible License(s): GPL-3.0, LGPL-2.1
  1. <?php
  2. /**
  3. * Model Link
  4. *
  5. * @filesource models/link.php
  6. * @author Stéphane et Sylvain
  7. * @copyright Agora Advertisement
  8. * @version 1.00
  9. */
  10. class Link extends AppModel {
  11. /**
  12. * Nom du model
  13. *
  14. * @var string
  15. */
  16. var $name = 'Link';
  17. /**
  18. * Actas
  19. *
  20. * @var array
  21. */
  22. var $actsAs = array('Containable','FormatUrl' => array('fields' => array('redirection')));
  23. /**
  24. * Associations "belongsTo"
  25. *
  26. * @var array
  27. */
  28. var $belongsTo = array(
  29. 'Campaign' => array(
  30. 'className' => 'Campaign',
  31. 'foreignKey' => 'campaign_id'
  32. )
  33. );
  34. /**
  35. * Associations "hasMany"
  36. *
  37. * @var array
  38. */
  39. var $hasMany = array(
  40. 'LinksZonelink' => array(
  41. 'className' => 'LinksZonelink',
  42. 'foreignKey' => 'link_id'
  43. )
  44. );
  45. /**
  46. * Associations "hasAndBelongsToMany"
  47. *
  48. * @var array
  49. */
  50. var $hasAndBelongsToMany = array(
  51. 'Keyword' => array(
  52. 'className' => 'Keyword',
  53. 'joinTable' => 'keywords_links',
  54. 'foreignKey' => 'link_id',
  55. 'associationForeignKey' => 'keyword_id',
  56. 'unique' => true
  57. ),
  58. 'Zonelink' => array(
  59. 'className' => 'Zonelink',
  60. 'joinTable' => 'links_zonelinks',
  61. 'foreignKey' => 'link_id',
  62. 'associationForeignKey' => 'zonelink_id',
  63. 'unique' => true
  64. )
  65. );
  66. /**
  67. * Validations
  68. *
  69. * @var array
  70. */
  71. var $validate = array(
  72. 'title' => array(
  73. 'notEmtpty' => array(
  74. 'rule' => 'notEmpty',
  75. 'message' => MSG_VALIDATION_EMPTY
  76. ),
  77. 'maxLength' => array(
  78. 'rule' => array('maxLength', '45'),
  79. 'message' => MSG_VALIDATION_MAX45
  80. ),
  81. ),
  82. 'description' => array(
  83. 'notEmtpty' => array(
  84. 'rule' => 'notEmpty',
  85. 'message' => MSG_VALIDATION_EMPTY
  86. ),
  87. 'maxLength' => array(
  88. 'rule' => array('maxLength', '250'),
  89. 'message' => MSG_VALIDATION_MAX250
  90. ),
  91. ),
  92. 'redirection' => array(
  93. 'rule' => 'url',
  94. 'message' => MSG_VALIDATION_URL,
  95. 'allowEmpty' => true
  96. )
  97. );
  98. /**
  99. * Ajoute des paramètres de recherche à une requete
  100. *
  101. * @author Stéphane et Sylvain
  102. * @copyright Agora Advertisement
  103. * @version 1.00
  104. * @access public
  105. * @param array $data array('campaign'=>int)
  106. * @return array array('conditions'=>array('Campaign'=>array('id'=>int)))
  107. */
  108. function createStatement($data) {
  109. $statement = array();
  110. // Campagnes
  111. if(isset($data['campaign']))
  112. $statement['conditions'][] = array("Campaign.id" => $data['campaign']);
  113. return $statement;
  114. }
  115. /**
  116. * Logique à executer avant la sauvegarde
  117. *
  118. * @author Stéphane et Sylvain
  119. * @copyright Agora Advertisement
  120. * @version 1.00
  121. * @access public
  122. * @return boolean true
  123. */
  124. function beforeSave () {
  125. // Nettoie les données
  126. App::import('Sanitize');
  127. Sanitize::clean($this->data);
  128. if (isset($this->data['Link']['title']))
  129. $this->data['Link']['title'] = Sanitize::html($this->data['Link']['title'], true); // Formate les données en HTML
  130. if (isset($this->data['Link']['description']))
  131. $this->data['Link']['description'] = Sanitize::html($this->data['Link']['description'], true); // Formate les données en HTML
  132. return true;
  133. }
  134. /**
  135. * Retourne les données à insérer dans les notifications
  136. *
  137. * @author Stéphane et Sylvain
  138. * @copyright Agora Advertisement
  139. * @version 1.00
  140. * @access public
  141. * @param array $ids Tableau des liens
  142. * @return array array('Campaign'=>array('user_id'=>int, 'name'=>string), User=>array('language'=>string, 'email'=>string)))
  143. */
  144. function getDataNotification ($ids) {
  145. return $this->Campaign->find('all', array(
  146. 'fields' => array('Campaign.user_id','Campaign.name','User.language','User.email'),
  147. 'conditions' => array('Link.id' => $ids),
  148. 'contain' => array('User', 'Link' => array('fields' => array('Link.id','Link.title'),'conditions'=>array('Link.id'=>$ids))),
  149. 'group' => array('Campaign.id'),
  150. 'joins' => array(
  151. array(
  152. 'table' => 'links', 'alias' => 'Link', 'type' => 'inner',
  153. 'conditions'=> array('Link.campaign_id = Campaign.id')
  154. )
  155. )
  156. ));
  157. }
  158. /**
  159. * Retourne les liens actifs d'une campagne
  160. *
  161. * @author Stéphane et Sylvain
  162. * @copyright Agora Advertisement
  163. * @version 1.00
  164. * @access public
  165. * @param int $campaign_id Id de la campagne
  166. * @return array array('Link'=>array('id'=>int))
  167. */
  168. function getActiveLink($campaign_id){
  169. $conditions=array('Link.status_nb'=>1,'Link.validation'=>1,'Link.campaign_id'=>$campaign_id);
  170. $fields=array('Link.id');
  171. $links=$this->find('all',array('conditions'=>$conditions,'recursive'=>-1,'fields'=>$fields));
  172. return $links;
  173. }
  174. /**
  175. * Ajoute des liens sur les zones des sites inscris à la campagne
  176. *
  177. * @author Stéphane et Sylvain
  178. * @copyright Agora Advertisement
  179. * @version 1.00
  180. * @access public
  181. * @param array $links Tableau de liens
  182. */
  183. function addToZonelink ($links) {
  184. foreach ($links as $link) {
  185. $link['Keyword'] = Set::extract('/id', $link['Keyword']);
  186. if (!empty($link['Keyword'])) {
  187. $group = array('Zonelink.id HAVING COUNT(*) = `'.count($link['Keyword']).'`');
  188. $keywords = array('KeywordsZonelink.keyword_id' => $link['Keyword']);
  189. } else {
  190. $group = array('Zonelink.id');
  191. $keywords = null;
  192. }
  193. // Retourne le résultat de la requête
  194. $zonelinks = classregistry::init('CampaignsSite')->find('all', array(
  195. 'fields' => array('Zonelink.id','Zonelink.site_id','Zonelink.mode','Zonelink.autolinks'),
  196. 'conditions' => array('CampaignsSite.campaign_id' => $link['Campaign']['id'], 'CampaignsSite.status_nb' => 1, 'OR' => array(array('Zonelink.mode' => 0, 'Zonelink.autolinks' => 1), array('Zonelink.mode' => 1, $keywords))),
  197. 'contain' => false,
  198. 'group' => $group,
  199. 'joins' => array(
  200. array(
  201. 'table' => 'zonelinks', 'alias' => 'Zonelink', 'type' => 'INNER', 'foreignKey' => false,
  202. 'conditions'=> array('CampaignsSite.site_id = Zonelink.site_id')
  203. ),
  204. array(
  205. 'table' => 'keywords_zonelinks', 'alias' => 'KeywordsZonelink', 'type' => 'LEFT', 'foreignKey' => false,
  206. 'conditions'=> array('Zonelink.id = KeywordsZonelink.zonelink_id')
  207. ),
  208. ),
  209. ));
  210. if (count($zonelinks) > 0) {
  211. foreach ($zonelinks as $key => $zone) {
  212. if ($zone['Zonelink']['autolinks'] == 1 || $zone['Zonelink']['mode'] == 1) {
  213. $data[$key]['link_id'] = $link['Link']['id'];
  214. $data[$key]['zonelink_id'] = $zone['Zonelink']['id'];
  215. }
  216. }
  217. // Sauvegarde
  218. $this->LinksZonelink->saveAll($data);
  219. }
  220. }
  221. }
  222. /**
  223. * Fonctionnalité de la function
  224. *
  225. * @author Stéphane et Sylvain
  226. * @copyright Agora Advertisement
  227. * @version 1.00
  228. * @access public
  229. * @param int $link_id Id du lien
  230. * @return array array('Link'=>array('id'=>int))
  231. */
  232. function getLink($link_id){
  233. return $this->find('first',array('conditions'=>array('Link.id'=>$link_id),'contain'=>false));
  234. }
  235. }
  236. ?>