/**
  * Copy a project task to a template task
  *
  * @access public
  * @param $project_task ProjectTask project task
  * @param $template_id int the template id
  * @param $parent_id int the parent id if is a subtask
  * @return TemplateTask
  */
 function copyFromProjectTask($project_task, $template_id, $parent_id = 0, $milestone_id = 0)
 {
     //param
     $parent_subtask = 0;
     $new_st_date = '';
     $new_due_date = '';
     $new_task = new TemplateTask();
     $new_task->setObjectName($project_task->getObjectName());
     $new_task->setText($project_task->getText());
     $new_task->setAssignedToContactId($project_task->getAssignedToContactId());
     $new_task->setAssignedOn($project_task->getAssignedOn());
     $new_task->setAssignedById($project_task->getAssignedById());
     $new_task->setTimeEstimate($project_task->getTimeEstimate());
     $new_task->setStartedOn($project_task->getStartedOn());
     $new_task->setStartedById($project_task->getStartedById());
     $new_task->setPriority($project_task->getPriority());
     $new_task->setOrder($project_task->getOrder());
     $new_task->setUseStartTime($project_task->getUseStartTime());
     $new_task->setUseDueTime($project_task->getUseDueTime());
     $new_task->setTypeContent($project_task->getTypeContent());
     $new_task->setParentId($project_task->getParentId());
     $new_task->setOriginalTaskId($project_task->getId());
     $new_task->setTemplateId($template_id);
     $new_task->setSessionId(null);
     $new_task->setParentId($parent_id);
     $new_task->setMilestoneId($milestone_id);
     if ($project_task->getDueDate() instanceof DateTimeValue) {
         $new_task->setDueDate(new DateTimeValue($project_task->getDueDate()->getTimestamp()));
     }
     if ($project_task->getStartDate() instanceof DateTimeValue) {
         $new_task->setStartDate(new DateTimeValue($project_task->getStartDate()->getTimestamp()));
     }
     if ($new_st_date != "") {
         if ($new_task->getStartDate() instanceof DateTimeValue) {
             $new_task->setStartDate($new_st_date);
         }
     }
     if ($new_due_date != "") {
         if ($new_task->getDueDate() instanceof DateTimeValue) {
             $new_task->setDueDate($new_due_date);
         }
     }
     $new_task->save();
     // Copy members, linked_objects, custom_properties, subscribers, reminders and comments
     copy_additional_object_data($project_task, $new_task);
     // Ensure that assigned user is subscribed
     if ($new_task->getAssignedTo() instanceof Contact) {
         $new_task->subscribeUser($new_task->getAssignedTo());
     }
     return $new_task;
 }