Exemplo n.º 1
0
 public function build($obj_build_exclude = array(), $do_substitutions = true)
 {
     if ($this->obj_debug) {
         echo "building parent HF_ID_USER...\n";
     }
     parent::build($obj_build_exclude);
     if ($this->obj_debug) {
         echo "finished building parent...\n";
     }
     if (!isset($this->obj_expression)) {
         //echo "SETTING EXPRESSION";
         $this->obj_expression = new strings();
     }
     $this->obj_hf_inherit = array();
     $this->obj_hf_parameters = array();
     $this->obj_hf_node_filters = array();
     $this->obj_hf_tags = array();
     $this->obj_hf_outputs = array();
     $this->obj_hf_files = array();
     $this->obj_hf_kill = array();
     $this->obj_hf_resources = array();
     $this->obj_hf_system_kind = array();
     // MANY TO 1 RELATIONSHIPS
     if ($this->obj_debug) {
         echo "hf inherits...\n";
     }
     $hf_inherit = new hf_inherit();
     $all_hf_inherit = $hf_inherit->get_from_hashrange($this->id);
     if ($all_hf_inherit && !in_array("obj_hf_inherit", $obj_build_exclude)) {
         foreach ($all_hf_inherit as $each_hf_inherit) {
             $a_hf_inherit = new hf_inherit();
             $a_hf_inherit->set($each_hf_inherit);
             $a_hf_inherit->build();
             $this->obj_hf_inherit[] = $a_hf_inherit;
         }
     }
     if ($this->obj_debug) {
         echo "hf parameters...\n";
     }
     $hf_parameter = new hf_parameter();
     $all_hf_parameters = $hf_parameter->get_from_hashrange($this->id);
     if ($all_hf_parameters && !in_array("obj_hf_parameters", $obj_build_exclude)) {
         foreach ($all_hf_parameters as $each_hf_parameter) {
             $a_hf_parameter = new hf_parameter();
             $a_hf_parameter->set($each_hf_parameter);
             $a_hf_parameter->build();
             $this->obj_hf_parameters[] = $a_hf_parameter;
         }
         foreach ($this->obj_hf_parameters as &$a_hf_parameter) {
             $a_hf_parameter->merge($this->obj_hf_parameters);
         }
     }
     if ($this->obj_debug) {
         echo "hf resource...\n";
     }
     $hf_resource = new hf_resource();
     $all_hf_resource = $hf_resource->get_from_hashrange($this->id);
     if ($all_hf_resource && !in_array("obj_hf_resources", $obj_build_exclude)) {
         foreach ($all_hf_resource as $each_hf_resource) {
             $a_hf_resource = new hf_resource();
             $a_hf_resource->set($each_hf_resource);
             $a_hf_resource->build();
             $a_hf_resource->subs = $this->name;
             $this->obj_hf_resources[] = $a_hf_resource;
         }
     }
     if ($do_substitutions) {
         $this->int_maxruntime_value = replace_hf_parameters($this->int_maxruntime, $this->obj_hf_parameters);
     } else {
         $this->int_maxruntime_value = $this->int_maxruntime;
     }
     if ($this->obj_debug) {
         echo "hf node filters...\n";
     }
     $hf_node_filter = new hf_node_filter();
     $all_hf_node_filters = $hf_node_filter->get_from_hashrange($this->id);
     if ($all_hf_node_filters && !in_array("obj_hf_node_filters", $obj_build_exclude)) {
         foreach ($all_hf_node_filters as $each_hf_node_filter) {
             $a_hf_node_filter = new hf_node_filter();
             $a_hf_node_filter->set($each_hf_node_filter);
             $a_hf_node_filter->build();
             $this->obj_hf_node_filters[] = $a_hf_node_filter;
         }
     }
     foreach ($this->obj_hf_node_filters as &$a_hf_node_filter) {
         if ($do_substitutions) {
             $a_hf_node_filter->value = replace_hf_parameters($a_hf_node_filter->obj_filter->body, $this->obj_hf_parameters);
         } else {
             $a_hf_node_filter->value = $a_hf_node_filter->obj_filter->body;
         }
     }
     if ($this->obj_debug) {
         echo "hf tags...\n";
     }
     $hf_tag = new hf_tag();
     $all_hf_tags = $hf_tag->get_from_hashrange($this->id);
     if ($all_hf_tags && !in_array("obj_hf_tags", $obj_build_exclude)) {
         foreach ($all_hf_tags as $each_hf_tag) {
             $a_hf_tag = new hf_tag();
             $a_hf_tag->set($each_hf_tag);
             $a_hf_tag->build();
             $this->obj_hf_tags[] = $a_hf_tag;
         }
     }
     if ($this->obj_debug) {
         echo "hf file...\n";
     }
     $hf_file = new hf_file();
     $all_hf_files = $hf_file->get_from_hashrange($this->id);
     if ($all_hf_files && !in_array("obj_hf_files", $obj_build_exclude)) {
         foreach ($all_hf_files as $each_hf_file) {
             $a_hf_file = new hf_file();
             $a_hf_file->set($each_hf_file);
             $a_hf_file->build();
             $this->obj_hf_files[] = $a_hf_file;
         }
     }
     foreach ($this->obj_hf_files as &$a_hf_file) {
         if ($do_substitutions) {
             $a_hf_file->value = replace_hf_parameters($a_hf_file->obj_targetfile->body, $this->obj_hf_parameters);
         } else {
             $a_hf_file->value = $a_hf_file->obj_targetfile->body;
         }
     }
     if ($this->obj_debug) {
         echo "hf kill...\n";
     }
     $hf_kill = new hf_kill();
     $all_hf_kill = $hf_kill->get_from_hashrange($this->id);
     if ($all_hf_kill && !in_array("obj_hf_kill", $obj_build_exclude)) {
         foreach ($all_hf_kill as $each_hf_kill) {
             $a_hf_kill = new hf_kill();
             $a_hf_kill->set($each_hf_kill);
             $a_hf_kill->build();
             $this->obj_hf_kill[] = $a_hf_kill;
         }
     }
     foreach ($this->obj_hf_kill as &$a_hf_kill) {
         if ($do_substitutions) {
             $a_hf_kill->value = replace_hf_parameters($a_hf_kill->obj_name->body, $this->obj_hf_parameters);
         } else {
             $a_hf_kill->value = $a_hf_kill->obj_name->body;
         }
     }
     foreach ($this->obj_hf_resources as &$a_hf_resource) {
         if ($do_substitutions) {
             $a_hf_resource->value_location = replace_hf_parameters($a_hf_resource->obj_location->body, $this->obj_hf_parameters);
             $a_hf_resource->value_filename = replace_hf_parameters($a_hf_resource->obj_filename->body, $this->obj_hf_parameters);
         } else {
             $a_hf_resource->value_location = $a_hf_resource->obj_location->body;
             $a_hf_resource->value_filename = $a_hf_resource->obj_filename->body;
         }
     }
     if ($this->obj_debug) {
         echo "hf system kinds...\n";
     }
     $hf_system_kind = new hf_system_kind();
     $all_hf_system_kind = $hf_system_kind->get_from_hashrange($this->id);
     if ($all_hf_system_kind && !in_array("obj_hf_system_kind", $obj_build_exclude)) {
         foreach ($all_hf_system_kind as $each_hf_system_kind) {
             $a_hf_system_kind = new hf_system_kind();
             $a_hf_system_kind->set($each_hf_system_kind);
             $a_hf_system_kind->build();
             $this->obj_hf_system_kind[] = $a_hf_system_kind;
         }
     }
     if ($this->obj_debug) {
         echo "hf assimilation...\n";
     }
     // ASSIMILATE PARENT INHERITANCE
     foreach ($this->obj_hf_inherit as $hf_inherit) {
         // RECURSIVELY ASSIMILATE THE PARENT FUNCTION
         $hf_inherit->assimilate($this, $obj_build_exclude);
     }
     $local_sk_found = false;
     foreach ($this->obj_hf_system_kind as &$tsk) {
         if ($tsk->id_hf == $this->id) {
             $local_sk_found = true;
             break;
         }
     }
     if ($local_sk_found) {
         foreach ($this->obj_hf_system_kind as &$tsk) {
             if ($tsk->id_hf != $this->id) {
                 $tsk->obj_enabled = false;
             }
         }
     }
     /*
     if ($do_substitutions)
     {
     echo "<pre>";
     print_r($this);
     }
     */
     $this->obj_bool_inheritable = false;
     $hf_inheritable = new user_inherit();
     $hf_inheritable->get_from_hashrange($this->id_user, $this->id);
     if ($hf_inheritable->id_user != "undefined") {
         $this->obj_bool_inheritable = true;
     }
     // BUILD RECURSIVE EXPRESSION TREE
     if ($this->obj_debug) {
         echo "building hash expression tree";
     }
     $this->hash_to_expression_tree($this->str_expression, $do_substitutions);
     if (isset($this->obj_hf_parameters)) {
         if ($this->obj_debug) {
             echo "merging expressions";
         }
         if (isset($this->obj_expression) && !is_bool($this->obj_expression) && get_class($this->obj_expression) == "strings") {
             $this->obj_expression->merge($this->obj_hf_parameters);
         }
     }
     if ($this->obj_debug) {
         echo "finished building function";
     }
 }