function add_subscribers(ContentDataObject $object, $subscribers = null, $check_permissions = true)
 {
     if (logged_user()->isGuest()) {
         flash_error(lang('no access permissions'));
         ajx_current("empty");
         return;
     }
     $log_info = "";
     $log_info_unsubscribe = "";
     if ($subscribers == null) {
         $subscribers = array_var($_POST, 'subscribers');
     }
     $subscribers_ids = array();
     if (is_array($subscribers)) {
         $user_ids = array();
         $subscribers_to_remove = array();
         //add new subscribers
         foreach ($subscribers as $key => $checked) {
             $user_id = substr($key, 5);
             $subscribers_ids[] = $user_id;
             if ($checked == "1" && !in_array($user_id, $object->getSubscriberIds())) {
                 $user = Contacts::findById($user_id);
                 if ($user instanceof Contact) {
                     $object->subscribeUser($user);
                     $log_info .= ($log_info == "" ? "" : ",") . $user->getId();
                     $user_ids[] = $user_id;
                 }
             } else {
                 if ((!$checked || $checked == '0') && in_array($user_id, $object->getSubscriberIds())) {
                     $subscribers_to_remove[] = $user_id;
                 }
             }
         }
         //remove subscribers
         //$subscribers_to_remove = array_diff($object->getSubscriberIds(), $subscribers_ids);
         foreach ($subscribers_to_remove as $subs_remove) {
             $user = Contacts::findById($subs_remove);
             if ($user instanceof Contact) {
                 $object->unsubscribeUser($user);
                 $log_info_unsubscribe .= ($log_info_unsubscribe == "" ? "" : ",") . $user->getId();
             }
         }
         Hook::fire('after_add_subscribers', array('object' => $object, 'user_ids' => $user_ids), $null);
         if ($log_info != "") {
             ApplicationLogs::createLog($object, ApplicationLogs::ACTION_SUBSCRIBE, false, true, true, $log_info);
         }
         if ($log_info_unsubscribe != "") {
             ApplicationLogs::createLog($object, ApplicationLogs::ACTION_UNSUBSCRIBE, false, true, true, $log_info_unsubscribe);
         }
     } else {
         $subscribers_to_remove = $object->getSubscriberIds();
         foreach ($subscribers_to_remove as $user_id_remove) {
             $log_info_unsubscribe .= ($log_info_unsubscribe == "" ? "" : ",") . $user_id_remove;
         }
         $object->clearSubscriptions();
         if ($log_info_unsubscribe != "") {
             ApplicationLogs::createLog($object, ApplicationLogs::ACTION_UNSUBSCRIBE, false, true, true, $log_info_unsubscribe);
         }
     }
     if ($check_permissions) {
         // remove subscribers without permissions
         $subscribed_users = $object->getSubscribers();
         foreach ($subscribed_users as $user) {
             if (!$object->canView($user)) {
                 $object->unsubscribeUser($user);
             }
         }
     }
 }