root/trunk/app/controllers/newsletters_controller.php

Revision 833, 6.1 kB (checked in by aarkerio, 5 weeks ago)

Models extended

Line 
1<?php
2/**
3*   Karamelo E-Learning Platform
4*   Manuel Montoya 2002-2008
5*   GPLv3 License manuel<arroba>mononeurona<punto>org
6*   Chipotle Software
7*   @version 0.3
8**/ 
9
10App::import('Sanitize');
11
12class NewslettersController extends AppController{
13
14  public $helpers    = array('Ajax', 'Fck', 'Gags');
15  public $components = array('Portal', 'Email');
16 
17  public function beforeFilter()
18  {
19    parent::beforeFilter();
20    $this->Auth->allow(array('view', 'display', 'subscribe'));
21  }
22 
23  public function subscribe()
24  {
25    $this->pageTitle = __('Newsletters', true);
26    $this->layout    = 'portal';
27    $this->Portal->statics(); // Charge Portal components aka Sidebars
28  }
29
30  public function display()
31  { 
32    $this->pageTitle = __('Newsletters', true);
33    $this->layout = 'portal';
34    if ($this->Auth->user()):
35       $conditions   = array('Newsletter.status'=>1);
36    else:
37    $conditions   = array('Newsletter.status'=>1, 'Newsletter.public'=>1);  //get only public NL
38    endif;
39    $fields       = array('Newsletter.id', 'Newsletter.title', 'Newsletter.created', 'Newsletter.public');
40    $order        = 'Newsletter.id DESC';
41    $limit        = 40;
42     
43    $this->set('data', $this->Newsletter->findAll($conditions, $fields, $order, $limit)); 
44    $this->Portal->statics(); // Using Portal component
45  }
46     
47  public function view($newsletter_id)
48  {
49   $conditions = array('Newsletter.status'=>1, 'Newsletter.id'=>$newsletter_id);
50   $fields     = array('Newsletter.id', 'Newsletter.title', 'Newsletter.body', 'Newsletter.created', 'Newsletter.public');
51   $data       = $this->Newsletter->find($conditions, $fields);
52   if ($data['Newsletter']['public'] == 0 && !$this->Auth->user()):
53     $this->redirect('/newsletters/display');
54     return false;
55   else:
56     $this->layout = 'portal';
57     $this->pageTitle = $data['Newsletter']['title'];
58     $this->set('data', $data);     
59     $this->Portal->statics(); // Charge Portal components aka Sidebars
60   endif;
61  }
62
63  /***  === ADMIN METHODS ***/ 
64 public function admin_listing()
65 {
66  $this->layout    = 'admin';   
67  $this->pageTitle =  __('Newsletters', true);
68       
69  $conditions   = null;
70  $fields       = array('id', 'title', 'body', 'created', 'status', 'delivered', 'public');
71  $order        = 'Newsletter.id DESC';
72  $limit        = 20;
73     
74  $this->set('data', $this->Newsletter->findAll($conditions, $fields, $order, $limit)); 
75 }
76
77 public function admin_add()
78 {
79   $this->layout = 'admin';
80
81   if (!empty($this->data['Newsletter'])):
82       Sanitize::paranoid($this->data['Newsletter']['title']);
83
84       Sanitize::html($this->data['Newsletter']['body']);
85
86       $this->data['Newsletter']['user_id'] = $this->Auth->user('id');
87   
88       if ($this->Newsletter->save($this->data) ):
89        if ( $this->data['Newsletter']['end'] == 1  ):
90               $this->msgFlash(__('Data saved', true), '/admin/newsletters/listing');
91            else:
92               $id = $this->Newsletter->getLastInsertID();
93                   $this->msgFlash(__('Data saved', true), '/admin/newsletters/edit/'.$id); 
94        endif;
95       endif;
96    endif;
97 }
98
99 public function admin_edit($newsletter_id=null)
100 {
101    $this->layout = 'admin';
102
103    if (!empty($this->data['Newsletter'])):
104       
105       Sanitize::paranoid($this->data['Newsletter']['title']);
106
107       Sanitize::html($this->data['Newsletter']['body']);
108   
109       if ($this->Newsletter->save($this->data)):
110        if ( $this->data['Newsletter']['end'] == 1  ):
111               $this->msgFlash(__('Data saved', true), '/admin/newsletters/listing');
112            else:
113                   $this->msgFlash(__('Data saved', true), '/admin/newsletters/edit/'.$this->data['Newsletter']['id']); 
114        endif;
115       endif;
116   else:
117       $this->data     = $this->Newsletter->read(null, $newsletter_id);
118   endif;
119 }
120
121  public function admin_send($newsletter_id)
122  {
123     if (!intval($newsletter_id))
124     {
125        die('Something is wrong!');
126     }
127
128     $this->layout = 'admin';
129
130     $this->pageTitle = __('Newsletters', true);
131               
132     $this->set('number', $this->__sendNewsletter($newsletter_id));
133  }
134
135  private function __sendNewsletter($newsletter_id)
136  {
137     $conditions   = array('Newsletter.status' => 1, 'Newsletter.id' => $newsletter_id);
138
139     $fields       = array('id', 'title', 'body', 'created', 'status');
140     
141     $data         = $this->Newsletter->find($conditions, $fields);
142
143     $this->Newsletter->User->unbindModel(array("hasMany"=>array('Entry', 'Lesson', 'Faq', 'Vclassroom', 'Acquaintance')));
144
145     $users        = $this->Newsletter->User->findAll(
146                   array("User.active"=>1),
147                               array("User.name", "User.email")
148                ); 
149   
150     //exit(var_dump($users));
151     $i = 0;   
152     foreach ($users as $user):
153        $this->Email->sender      = '::Karamelo Platform::';
154
155        $this->Email->to          = $user['User']['email'];
156        $this->Email->subject     = $data['Newsletter']['title'];
157    $this->Email->sendAs      = 'txt';
158        $this->Email->template    = null;
159        $this->Email->from        = 'noreply@chipotle-software.com';
160       
161    if ( $this->Email->send($data['Newsletter']['body']) ):
162                  $i++;
163        else:
164                 exit("Error!!");
165    endif;
166      endforeach;
167     return $i;
168 }
169
170 // change status enabled/disabled
171 public function admin_change($newsletter_id, $status)
172 { 
173   $this->data['Newsletter']['status'] = ($status == 0 ) ? 1 : 0;
174     
175   $this->data['Newsletter']['id']     = (int) $newsletter_id;
176   
177   if ($this->Newsletter->save($this->data, false)):
178       $this->msgFlash(__('Status modified', true), '/admin/newsletters/listing');
179   endif;
180 }
181 // change public / no  public
182 public function admin_public($newsletter_id, $public)
183 { 
184   $this->data['Newsletter']['public'] = ($public == 0 ) ? 1 : 0;
185     
186   $this->data['Newsletter']['id']     = (int) $newsletter_id;
187   
188   if ($this->Newsletter->save($this->data, false)):
189       $this->msgFlash(__('Status modified', true), '/admin/newsletters/listing');
190   endif;
191 }
192 public function admin_delete($newsletter_id) 
193 {
194   if ( $this->Newsletter->del($newsletter_id) ):
195        $this->msgFlash(__('Data removed', true), '/admin/newsletters/listing');
196   endif;
197  }
198}
199?>
Note: See TracBrowser for help on using the browser.