/**
  * Save an entry
  *
  * @return     string HTML
  */
 private function _save()
 {
     // Check for request forgeries
     Request::checkToken();
     //verify were authorized
     if ($this->authorized != 'manager') {
         $this->setError(Lang::txt('PLG_GROUPS_ANNOUNCEMENTS_ONLY_MANAGERS_CAN_CREATE'));
         return $this->_list();
     }
     // Incoming
     $fields = Request::getVar('fields', array(), 'post', 'none', 2);
     $fields = array_map('trim', $fields);
     // email announcement
     $email = isset($fields['email']) && $fields['email'] == 1 ? true : false;
     //mark as not sent if we want to email again
     if ($email === true) {
         $fields['sent'] = 0;
     }
     // are we creating the announcement?
     if (!isset($fields['id']) || $fields['id'] == 0) {
         $fields['scope'] = 'group';
         $fields['scope_id'] = $this->group->get('gidNumber');
         $fields['created'] = Date::toSql();
         $fields['created_by'] = User::get('id');
     }
     //do we want to mark sticky?
     $fields['sticky'] = isset($fields['sticky']) && $fields['sticky'] == 1 ? 1 : 0;
     //do we want to mark as high priority
     $fields['priority'] = isset($fields['priority']) && $fields['priority'] == 1 ? 1 : 0;
     //format publish up
     if (isset($fields['publish_up']) && $fields['publish_up'] != '' && $fields['publish_up'] != '0000-00-00 00:00:00') {
         $fields['publish_up'] = Date::of(str_replace('@', '', $fields['publish_up']), Config::get('offset'))->toSql();
     }
     //format publish down
     if (isset($fields['publish_down']) && $fields['publish_down'] != '' && $fields['publish_down'] != '0000-00-00 00:00:00') {
         $fields['publish_down'] = Date::of(str_replace('@', '', $fields['publish_down']), Config::get('offset'))->toSql();
     }
     if ($fields['publish_up'] > $fields['publish_down']) {
         $this->setError(Lang::txt('PLG_GROUPS_ANNOUNCEMENTS_INVALID_PUBLISH_DATES'));
         return $this->_edit($fields);
     }
     //announcement model
     $announcement = new \Hubzero\Item\Announcement($this->database);
     //attempt to save
     if (!$announcement->save($fields)) {
         $this->setError($announcement->getError());
         return $this->_edit($fields);
     }
     // does user want to email and should we email yet?
     if ($email === true && $announcement->announcementPublishedForDate()) {
         // email announcement
         $announcement->emailAnnouncement();
         //set that we sent it and resave
         $announcement->sent = 1;
         $announcement->save($announcement);
     }
     //success!
     App::redirect(Route::url('index.php?option=' . $this->option . '&cn=' . $this->group->get('cn') . '&active=announcements'), Lang::txt('PLG_GROUPS_ANNOUNCEMENTS_SUCCESSFULLY_CREATED'), 'success');
     return;
 }
Exemple #2
0
 /**
  * Send scheduled group announcements
  *
  * @param   object   $job  \Components\Cron\Models\Job
  * @return  boolean
  */
 public function sendGroupAnnouncements(\Components\Cron\Models\Job $job)
 {
     $database = App::get('db');
     // get hubzero announcement object
     $hubzeroAnnouncement = new \Hubzero\Item\Announcement($database);
     // get all announcements that are not yet sent but want to be mailed
     $announcements = $hubzeroAnnouncement->find(array('email' => 1, 'sent' => 0));
     // loop through each announcement
     foreach ($announcements as $announcement) {
         // load the announcement object
         $hubzeroAnnouncement->load($announcement->id);
         // check to see if we can send
         if ($hubzeroAnnouncement->announcementPublishedForDate()) {
             // email announcement
             $hubzeroAnnouncement->emailAnnouncement();
             // mark as sent
             $hubzeroAnnouncement->sent = 1;
             $hubzeroAnnouncement->save($hubzeroAnnouncement);
         }
     }
     return true;
 }