/**
  * 
  * 
  * @param ContentDataObject $object
  * @param $additional_attributes array 
  * @param $go_deep bool copy all subtasks or if is a milestone copy all tasks 
  * @return int Template Object id
  */
 function addObject($object, $additional_attributes = array(), $go_deep = true)
 {
     //if ($this->hasObject($object)) return;
     //if object is a ProjectTask
     if ($object instanceof ProjectTask) {
         if ($go_deep) {
             $object = TemplateTask::copyFromProjectTaskIncludeSubTasks($object, $this->getId());
         } else {
             $object = TemplateTask::copyFromProjectTask($object, $this->getId());
         }
         //if object is a ProjectMilestone
     } else {
         if ($object instanceof ProjectMilestone) {
             $object = TemplateMilestone::copyFromProjectMilestone($object, $this->getId(), $go_deep);
             //if object is a TemplateTask
         } else {
             if ($object instanceof TemplateTask) {
                 $object->setColumnValue('template_id', $this->getId());
                 $object->setColumnValue('session_id', null);
                 if (isset($additional_attributes['milestone'])) {
                     $object->setMilestoneId($additional_attributes['milestone']);
                 }
                 $object->save();
                 //if object is a TemplateMilestone
             } else {
                 if ($object instanceof TemplateMilestone) {
                     $object->setColumnValue('template_id', $this->getId());
                     $object->setColumnValue('session_id', null);
                     $object->save();
                 }
             }
         }
     }
     // the object is already a template or can't be one, use it as it is
     $template = $object;
     //create a TemplateObject
     $to = new TemplateObject();
     $to->setObject($template);
     $to->setTemplate($this);
     $to->save();
     return $template->getObjectId();
 }
 /**
  * Copies tasks from milestoneFrom to milestoneTo.
  *
  * @param TemplateMilestone $milestoneFrom
  * @param TemplateMilestone $milestoneTo
  */
 function copyTasks(TemplateMilestone $milestoneFrom, TemplateMilestone $milestoneTo, $as_template = false)
 {
     //FIXME
     foreach ($milestoneFrom->getTasks($as_template) as $sub) {
         if ($sub->getParentId() != 0) {
             continue;
         }
         $new = TemplateTasks::createTaskCopy($sub);
         $new->setMilestoneId($milestoneTo->getId());
         $new->save();
         $object_controller = new ObjectController();
         $members = $milestoneFrom->getMemberIds();
         if (count($members)) {
             $object_controller->add_to_members($new, $members);
         }
         /*
         			foreach ($sub->getWorkspaces() as $workspace) {
         				if (TemplateTask::canAdd(logged_user(), $workspace)) {
         					$new->addToWorkspace($workspace);
         				}
         			}
         
         			if (!$as_template && active_project() instanceof Project && TemplateTask::canAdd(logged_user(), active_project())) {
         				$new->removeFromAllWorkspaces();
         				$new->addToWorkspace(active_project());
         			}
         */
         $new->copyCustomPropertiesFrom($sub);
         $new->copyLinkedObjectsFrom($sub);
         TemplateTasks::copySubTasks($sub, $new, $as_template);
     }
 }