/**
  * @see ProjectItemFactoryInterface::create()
  * @param integer $project_id
  * @param integer $item_id
  * @param integer $gid
  * @param string $keywords
  * @param string $description
  * @return bool
  */
 public static function create($project_id, $item_id, $gid, $keywords = null, $description = null, $parent_item_id = null, $status_id = null)
 {
     global $transaction;
     if ($transaction->is_in_transction() == true and is_numeric($project_id) and is_numeric($item_id)) {
         if (self::$project_instance_array[$project_id]) {
             $project = self::$project_instance_array[$project_id];
         } else {
             $project = new Project($project_id);
             self::$project_instance_array[$project_id] = $project;
         }
         $project_item = new ProjectItem($project_id);
         $project_item->set_gid($gid);
         if (!$status_id) {
             $project_item->set_status_id($project->get_current_status_id());
         } else {
             $project_item->set_status_id($status_id);
         }
         $project_item->set_parent_item_id($parent_item_id);
         if ($project_item->set_item_id($item_id) == false) {
             return false;
         }
         if ($project_item->link_item() == false) {
             return false;
         }
         $project_item->set_item_status();
         if (($class_name = $project_item->is_classified()) == true) {
             if ($project_item->set_class($class_name) == false) {
                 return false;
             }
         }
         $description_required = $project_item->is_description();
         $keywords_required = $project_item->is_keywords();
         if ($description_required == true xor $keywords_required == true) {
             if ($description_required == false and $keywords_required == true) {
                 $project_item->set_information(null, $keywords);
             } else {
                 $project_item->set_information($description, null);
             }
         } else {
             if ($description_required == true and $keywords_required == true) {
                 $project_item->set_information($description, $keywords);
             }
         }
         if ($project_item->create_log_entry() == false) {
             return false;
         } else {
             ProjectTask::check_over_time_tasks($project_id);
             return true;
         }
     } else {
         return false;
     }
 }