/models/link.php
PHP | 287 lines | 136 code | 51 blank | 100 comment | 10 complexity | 2ee103e7792a428266dda2f0c4291792 MD5 | raw file
Possible License(s): GPL-3.0, LGPL-2.1
- <?php
- /**
- * Model Link
- *
- * @filesource models/link.php
- * @author Stéphane et Sylvain
- * @copyright Agora Advertisement
- * @version 1.00
- */
- class Link extends AppModel {
-
- /**
- * Nom du model
- *
- * @var string
- */
-
- var $name = 'Link';
-
- /**
- * Actas
- *
- * @var array
- */
-
- var $actsAs = array('Containable','FormatUrl' => array('fields' => array('redirection')));
-
- /**
- * Associations "belongsTo"
- *
- * @var array
- */
-
- var $belongsTo = array(
- 'Campaign' => array(
- 'className' => 'Campaign',
- 'foreignKey' => 'campaign_id'
- )
- );
-
- /**
- * Associations "hasMany"
- *
- * @var array
- */
-
- var $hasMany = array(
-
- 'LinksZonelink' => array(
- 'className' => 'LinksZonelink',
- 'foreignKey' => 'link_id'
- )
- );
- /**
- * Associations "hasAndBelongsToMany"
- *
- * @var array
- */
-
- var $hasAndBelongsToMany = array(
- 'Keyword' => array(
- 'className' => 'Keyword',
- 'joinTable' => 'keywords_links',
- 'foreignKey' => 'link_id',
- 'associationForeignKey' => 'keyword_id',
- 'unique' => true
- ),
- 'Zonelink' => array(
- 'className' => 'Zonelink',
- 'joinTable' => 'links_zonelinks',
- 'foreignKey' => 'link_id',
- 'associationForeignKey' => 'zonelink_id',
- 'unique' => true
- )
- );
-
- /**
- * Validations
- *
- * @var array
- */
-
- var $validate = array(
- 'title' => array(
- 'notEmtpty' => array(
- 'rule' => 'notEmpty',
- 'message' => MSG_VALIDATION_EMPTY
- ),
- 'maxLength' => array(
- 'rule' => array('maxLength', '45'),
- 'message' => MSG_VALIDATION_MAX45
- ),
- ),
- 'description' => array(
- 'notEmtpty' => array(
- 'rule' => 'notEmpty',
- 'message' => MSG_VALIDATION_EMPTY
- ),
- 'maxLength' => array(
- 'rule' => array('maxLength', '250'),
- 'message' => MSG_VALIDATION_MAX250
- ),
- ),
- 'redirection' => array(
- 'rule' => 'url',
- 'message' => MSG_VALIDATION_URL,
- 'allowEmpty' => true
- )
- );
-
- /**
- * Ajoute des paramètres de recherche à une requete
- *
- * @author Stéphane et Sylvain
- * @copyright Agora Advertisement
- * @version 1.00
- * @access public
- * @param array $data array('campaign'=>int)
- * @return array array('conditions'=>array('Campaign'=>array('id'=>int)))
- */
-
- function createStatement($data) {
-
- $statement = array();
-
- // Campagnes
- if(isset($data['campaign']))
- $statement['conditions'][] = array("Campaign.id" => $data['campaign']);
-
- return $statement;
-
- }
-
- /**
- * Logique à executer avant la sauvegarde
- *
- * @author Stéphane et Sylvain
- * @copyright Agora Advertisement
- * @version 1.00
- * @access public
- * @return boolean true
- */
-
- function beforeSave () {
- // Nettoie les données
- App::import('Sanitize');
- Sanitize::clean($this->data);
-
- if (isset($this->data['Link']['title']))
- $this->data['Link']['title'] = Sanitize::html($this->data['Link']['title'], true); // Formate les données en HTML
-
- if (isset($this->data['Link']['description']))
- $this->data['Link']['description'] = Sanitize::html($this->data['Link']['description'], true); // Formate les données en HTML
-
- return true;
-
- }
-
- /**
- * Retourne les données à insérer dans les notifications
- *
- * @author Stéphane et Sylvain
- * @copyright Agora Advertisement
- * @version 1.00
- * @access public
- * @param array $ids Tableau des liens
- * @return array array('Campaign'=>array('user_id'=>int, 'name'=>string), User=>array('language'=>string, 'email'=>string)))
- */
-
- function getDataNotification ($ids) {
-
- return $this->Campaign->find('all', array(
- 'fields' => array('Campaign.user_id','Campaign.name','User.language','User.email'),
- 'conditions' => array('Link.id' => $ids),
- 'contain' => array('User', 'Link' => array('fields' => array('Link.id','Link.title'),'conditions'=>array('Link.id'=>$ids))),
- 'group' => array('Campaign.id'),
- 'joins' => array(
- array(
- 'table' => 'links', 'alias' => 'Link', 'type' => 'inner',
- 'conditions'=> array('Link.campaign_id = Campaign.id')
- )
- )
- ));
-
- }
-
- /**
- * Retourne les liens actifs d'une campagne
- *
- * @author Stéphane et Sylvain
- * @copyright Agora Advertisement
- * @version 1.00
- * @access public
- * @param int $campaign_id Id de la campagne
- * @return array array('Link'=>array('id'=>int))
- */
-
- function getActiveLink($campaign_id){
-
- $conditions=array('Link.status_nb'=>1,'Link.validation'=>1,'Link.campaign_id'=>$campaign_id);
- $fields=array('Link.id');
-
- $links=$this->find('all',array('conditions'=>$conditions,'recursive'=>-1,'fields'=>$fields));
- return $links;
- }
-
- /**
- * Ajoute des liens sur les zones des sites inscris à la campagne
- *
- * @author Stéphane et Sylvain
- * @copyright Agora Advertisement
- * @version 1.00
- * @access public
- * @param array $links Tableau de liens
- */
-
- function addToZonelink ($links) {
-
- foreach ($links as $link) {
-
- $link['Keyword'] = Set::extract('/id', $link['Keyword']);
-
- if (!empty($link['Keyword'])) {
-
- $group = array('Zonelink.id HAVING COUNT(*) = `'.count($link['Keyword']).'`');
- $keywords = array('KeywordsZonelink.keyword_id' => $link['Keyword']);
-
- } else {
-
- $group = array('Zonelink.id');
- $keywords = null;
-
- }
- // Retourne le résultat de la requête
- $zonelinks = classregistry::init('CampaignsSite')->find('all', array(
- 'fields' => array('Zonelink.id','Zonelink.site_id','Zonelink.mode','Zonelink.autolinks'),
- '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))),
- 'contain' => false,
- 'group' => $group,
- 'joins' => array(
- array(
- 'table' => 'zonelinks', 'alias' => 'Zonelink', 'type' => 'INNER', 'foreignKey' => false,
- 'conditions'=> array('CampaignsSite.site_id = Zonelink.site_id')
- ),
- array(
- 'table' => 'keywords_zonelinks', 'alias' => 'KeywordsZonelink', 'type' => 'LEFT', 'foreignKey' => false,
- 'conditions'=> array('Zonelink.id = KeywordsZonelink.zonelink_id')
- ),
- ),
- ));
-
- if (count($zonelinks) > 0) {
-
- foreach ($zonelinks as $key => $zone) {
-
- if ($zone['Zonelink']['autolinks'] == 1 || $zone['Zonelink']['mode'] == 1) {
-
- $data[$key]['link_id'] = $link['Link']['id'];
- $data[$key]['zonelink_id'] = $zone['Zonelink']['id'];
-
- }
-
- }
- // Sauvegarde
- $this->LinksZonelink->saveAll($data);
- }
-
- }
-
- }
-
- /**
- * Fonctionnalité de la function
- *
- * @author Stéphane et Sylvain
- * @copyright Agora Advertisement
- * @version 1.00
- * @access public
- * @param int $link_id Id du lien
- * @return array array('Link'=>array('id'=>int))
- */
- function getLink($link_id){
- return $this->find('first',array('conditions'=>array('Link.id'=>$link_id),'contain'=>false));
- }
- }
-
- ?>