/**
  * Unlink object from related object
  *
  * @param void
  * @return null
  */
 function unlink_from_object()
 {
     // ex detach_from_object() {
     if (logged_user()->isGuest()) {
         flash_error(lang('no access permissions'));
         ajx_current("empty");
         return;
     }
     $object_id = get_id('object_id');
     $object1 = Objects::findObject($object_id);
     $dont_reload = array_var($_GET, 'dont_reload');
     if (array_var($_GET, 'rel_objects')) {
         $objects_to_unlink = explode(",", array_var($_GET, 'rel_objects'));
     } else {
         $objects_to_unlink = array(get_id('rel_object_id'));
     }
     try {
         DB::beginWork();
         $err = 0;
         $succ = 0;
         foreach ($objects_to_unlink as $rel_object_id) {
             $object2 = Objects::findObject($rel_object_id);
             if (!$object1 instanceof ApplicationDataObject || !$object2 instanceof ApplicationDataObject) {
                 flash_error(lang('object not found'));
                 ajx_current("empty");
                 return;
             }
             // if
             $linked_object = LinkedObjects::findById(array('rel_object_id' => $object_id, 'object_id' => $rel_object_id));
             // findById
             if (!$linked_object instanceof LinkedObject) {
                 //search for reverse link
                 $linked_object = LinkedObjects::findById(array('rel_object_id' => $rel_object_id, 'object_id' => $object_id));
                 // findById
             }
             if (!$linked_object instanceof LinkedObject) {
                 $err++;
                 continue;
             }
             // if
             $linked_object->delete();
             if ($object1 instanceof ContentDataObject) {
                 ApplicationLogs::createLog($object1, ApplicationLogs::ACTION_UNLINK, false, null, true, $object2->getId());
             }
             if ($object2 instanceof ContentDataObject) {
                 ApplicationLogs::createLog($object2, ApplicationLogs::ACTION_UNLINK, false, null, true, $object1->getId());
             }
             $succ++;
         }
         DB::commit();
         $message = "";
         if ($err > 0) {
             $message .= lang("error unlink object", $err) . "\n";
         }
         if ($succ > 0) {
             $message .= lang("success unlink object", $succ) . "\n";
         }
         if ($succ == 0 && $err > 0) {
             flash_error($message);
         } else {
             if ($succ > 0) {
                 flash_success($message);
             }
         }
         flash_success(lang('success unlink object'));
         if ($dont_reload) {
             ajx_current("empty");
         } else {
             ajx_current("reload");
         }
     } catch (Exception $e) {
         flash_error(lang('error unlink object'));
         DB::rollback();
         ajx_current("empty");
     }
     // try
 }
 /**
  * Link object to this object
  *
  * @param ProjectDataObject $object
  * @return LinkedObject
  */
 function linkObject(ApplicationDataObject $object)
 {
     $manager_class = get_class($this->manager());
     $object_id = $this->getObjectId();
     $linked_object = LinkedObjects::findById(array('rel_object_manager' => $manager_class, 'rel_object_id' => $object_id, 'object_id' => $object->getId(), 'object_manager' => get_class($object->manager())));
     // findById
     if ($linked_object instanceof LinkedObject) {
         return $linked_object;
         // Already linked
     } else {
         //check inverse link
         $linked_object = LinkedObjects::findById(array('rel_object_manager' => get_class($object->manager()), 'rel_object_id' => $object->getId(), 'object_id' => $object_id, 'object_manager' => $manager_class));
         // findById
         if ($linked_object instanceof LinkedObject) {
             return $linked_object;
             // Already linked
         }
     }
     // if
     $linked_object = new LinkedObject();
     $linked_object->setRelObjectManager($manager_class);
     $linked_object->setRelObjectId($object_id);
     $linked_object->setObjectId($object->getId());
     $linked_object->setObjectManager(get_class($object->manager()));
     $linked_object->save();
     /*  if(!$object->getIsVisible()) {
     		 $object->setIsVisible(true);
     		 $object->setExpirationTime(EMPTY_DATETIME);
     		 $object->save();
     	  } // if*/
     return $linked_object;
 }
 /**
  * Link object to this object
  *
  * @param ApplicationDataObject $object
  * @return LinkedObject
  */
 function linkObject(ApplicationDataObject $object)
 {
     $object_id = $this->getObjectId();
     $linked_object = LinkedObjects::findById(array('rel_object_id' => $object_id, 'object_id' => $object->getId()));
     // findById
     if ($linked_object instanceof LinkedObject) {
         return $linked_object;
         // Already linked
     } else {
         //check inverse link
         $linked_object = LinkedObjects::findById(array('rel_object_id' => $object->getId(), 'object_id' => $object_id));
         // findById
         if ($linked_object instanceof LinkedObject) {
             return $linked_object;
             // Already linked
         }
     }
     // if
     $linked_object = new LinkedObject();
     $linked_object->setRelObjectId($object_id);
     $linked_object->setObjectId($object->getId());
     $linked_object->save();
     return $linked_object;
 }