function popup_reminders() { ajx_current("empty"); // if no new popup reminders don't make useless queries if (GlobalCache::isAvailable()) { $check = GlobalCache::get('check_for_popup_reminders_' . logged_user()->getId(), $success); if ($success && $check == 0) { return; } } $reminders = ObjectReminders::getDueReminders("reminder_popup"); $popups = array(); foreach ($reminders as $reminder) { $object = $reminder->getObject(); $context = $reminder->getContext(); $type = $object->getObjectTypeName(); $date = $object->getColumnValue($reminder->getContext()); if (!$date instanceof DateTimeValue) { continue; } if ($object->isTrashed()) { $reminder->delete(); continue; } // convert time to the user's locale $timezone = logged_user()->getTimezone(); if ($date->getTimestamp() + 5 * 60 < DateTimeValueLib::now()->getTimestamp()) { // don't show popups older than 5 minutes $reminder->delete(); continue; } if ($reminder->getUserId() == 0) { if (!$object->isSubscriber(logged_user())) { // reminder for subscribers and user is not subscriber continue; } } else { if ($reminder->getUserId() != logged_user()->getId()) { continue; } } if ($context == "due_date" && $object instanceof ProjectTask) { if ($object->isCompleted()) { // don't show popups for completed tasks $reminder->delete(); continue; } } $url = $object->getViewUrl(); $link = '<a href="#" onclick="og.openLink(\'' . $url . '\');return false;">' . clean($object->getObjectName()) . '</a>'; evt_add("popup", array('title' => lang("{$context} {$type} reminder"), 'message' => lang("{$context} {$type} reminder desc", $link, format_datetime($date)), 'type' => 'reminder', 'sound' => 'info')); if ($reminder->getUserId() == 0) { // reminder is for all subscribers, so change it for one reminder per user (except logged_user) // otherwise if deleted it won't notify other subscribers and if not deleted it will keep notifying // logged user $subscribers = $object->getSubscribers(); foreach ($subscribers as $subscriber) { if ($subscriber->getId() != logged_user()->getId()) { $new = new ObjectReminder(); $new->setContext($reminder->getContext()); $new->setDate($reminder->getDate()); $new->setMinutesBefore($reminder->getMinutesBefore()); $new->setObject($object); $new->setUser($subscriber); $new->setType($reminder->getType()); $new->save(); } } } $reminder->delete(); } // popup reminders already checked for logged user if (GlobalCache::isAvailable()) { $today_next_reminders = ObjectReminders::findAll(array('conditions' => array("`date` > ? AND `date` < ?", DateTimeValueLib::now(), DateTimeValueLib::now()->endOfDay()), 'limit' => config_option('cron reminder limit', 100))); if (count($today_next_reminders) == 0) { GlobalCache::update('check_for_popup_reminders_' . logged_user()->getId(), 0, 60 * 30); } } }
function popup_reminders() { ajx_current("empty"); // extra data to send to interface $extra_data = array(); // if no new popup reminders don't make useless queries if (GlobalCache::isAvailable()) { $check = GlobalCache::get('check_for_popup_reminders_' . logged_user()->getId(), $success); if ($success && $check == 0) { return; } } $reminders = ObjectReminders::getDueReminders("reminder_popup"); $popups = array(); foreach ($reminders as $reminder) { $context = $reminder->getContext(); if (str_starts_with($context, "mails_in_outbox")) { if ($reminder->getUserId() > 0 && $reminder->getUserId() != logged_user()->getId()) { continue; } preg_match('!\\d+!', $context, $matches); evt_add("popup", array('title' => lang("mails_in_outbox reminder"), 'message' => lang("mails_in_outbox reminder desc", $matches[0]), 'type' => 'reminder', 'sound' => 'info')); $reminder->delete(); continue; } if (str_starts_with($context, "eauthfail")) { if ($reminder->getUserId() == logged_user()->getId()) { $acc = trim(substr($context, strrpos($context, " "))); evt_add("popup", array('title' => lang("failed to authenticate email account"), 'message' => lang("failed to authenticate email account desc", $acc), 'type' => 'reminder', 'sound' => 'info')); $reminder->delete(); } continue; } $object = $reminder->getObject(); $type = $object->getObjectTypeName(); $date = $object->getColumnValue($reminder->getContext()); if (!$date instanceof DateTimeValue) { continue; } if ($object->isTrashed()) { $reminder->delete(); continue; } // convert time to the user's locale $timezone = logged_user()->getTimezone(); if ($date->getTimestamp() + 5 * 60 < DateTimeValueLib::now()->getTimestamp()) { // don't show popups older than 5 minutes //$reminder->delete(); //continue; } if ($reminder->getUserId() == 0) { if (!$object->isSubscriber(logged_user())) { // reminder for subscribers and user is not subscriber continue; } } else { if ($reminder->getUserId() != logged_user()->getId()) { continue; } } if ($context == "due_date" && $object instanceof ProjectTask) { if ($object->isCompleted()) { // don't show popups for completed tasks $reminder->delete(); continue; } } $url = $object->getViewUrl(); $link = '<a href="#" onclick="og.openLink(\'' . $url . '\');return false;">' . clean($object->getObjectName()) . '</a>'; evt_add("popup", array('title' => lang("{$context} {$type} reminder", clean($object->getObjectName())), 'message' => lang("{$context} {$type} reminder desc", $link, format_datetime($date)), 'type' => 'reminder', 'sound' => 'info')); if ($reminder->getUserId() == 0) { // reminder is for all subscribers, so change it for one reminder per user (except logged_user) // otherwise if deleted it won't notify other subscribers and if not deleted it will keep notifying // logged user $subscribers = $object->getSubscribers(); foreach ($subscribers as $subscriber) { if ($subscriber->getId() != logged_user()->getId()) { $new = new ObjectReminder(); $new->setContext($reminder->getContext()); $new->setDate($reminder->getDate()); $new->setMinutesBefore($reminder->getMinutesBefore()); $new->setObject($object); $new->setUser($subscriber); $new->setType($reminder->getType()); $new->save(); } } } $reminder->delete(); } // popup reminders already checked for logged user if (GlobalCache::isAvailable()) { $today_next_reminders = ObjectReminders::findAll(array('conditions' => array("`date` > ? AND `date` < ?", DateTimeValueLib::now(), DateTimeValueLib::now()->endOfDay()), 'limit' => config_option('cron reminder limit', 100))); if (count($today_next_reminders) == 0) { GlobalCache::update('check_for_popup_reminders_' . logged_user()->getId(), 0, 60 * 30); } } // check for member modifications if (isset($_POST['dims_check_date'])) { $dims_check_date = new DateTimeValue($_POST['dims_check_date']); $dims_check_date_sql = $dims_check_date->toMySQL(); $members_log_count = ApplicationLogs::instance()->count("member_id>0 AND created_on>'{$dims_check_date_sql}'"); if ($members_log_count > 0) { $extra_data['reload_dims'] = 1; } } ajx_extra_data($extra_data); }