public function detail() { $model_data = array(); $template_data = array(); $cr = 0; $check_filament = array(); $change_filament = array(); $array_data = array(); $time_estimation = NULL; $body_page = NULL; $mono_model = FALSE; $bicolor = $this->config->item('nb_extruder') >= 2; $heat_bed = $this->config->item('heat_bed'); $enable_print = 'true'; $enable_exchange = 'disabled="disabled"'; // select disable $calibration = FALSE; $this->load->helper(array('printlist', 'printerstate', 'slicer', 'timedisplay')); $this->load->library('parser'); $this->lang->load('printlist', $this->config->item('language')); $this->lang->load('timedisplay', $this->config->item('language')); $mid = $this->input->get('id'); // check model id, resend user to if not valid if ($mid) { if ($mid == 'calibration') { $mid = ModelList_codeModelHash(PRINTLIST_MODEL_CALIBRATION); $calibration = TRUE; } $cr = ModelList__getDetailAsArray($mid, $model_data, TRUE); if ($cr != ERROR_OK || is_null($model_data)) { $this->output->set_header('Location: /printmodel/listmodel'); return; } } else { $this->output->set_header('Location: /printmodel/listmodel'); return; } // check the model is mono-color or 2 colors if (isset($model_data[PRINTLIST_TITLE_LENG_F2]) && $model_data[PRINTLIST_TITLE_LENG_F2] > 0) { $mono_model = FALSE; } else { $mono_model = TRUE; } // initialize variables $check_filament = array('l' => t('ok'), 'r' => t('ok')); $change_filament = array('l' => t('Change'), 'r' => t('Change')); // check quantity of filament and get cartridge information (color) // color1 => right, color2 => left foreach (array('r', 'l') as $abb_filament) { $data_cartridge = array(); $key_length = $abb_filament == 'l' ? PRINTLIST_TITLE_LENG_F2 : PRINTLIST_TITLE_LENG_F1; $key_color = $abb_filament == 'l' ? PRINTLIST_TITLE_COLOR_F2 : PRINTLIST_TITLE_COLOR_F1; if ($model_data[$key_length] <= 0) { $check_filament[$abb_filament] = t('filament_not_need'); } // check mono extruder case (normally, it's not necessary) if ($bicolor == FALSE && $abb_filament == 'l') { $cr = ERROR_MISS_LEFT_CART; } else { $cr = PrinterState_checkFilament($abb_filament, $model_data[$key_length], $data_cartridge); } if (in_array($cr, array(ERROR_OK, ERROR_MISS_LEFT_FILA, ERROR_MISS_RIGT_FILA, ERROR_LOW_LEFT_FILA, ERROR_LOW_RIGT_FILA))) { $array_data[$abb_filament] = array(PRINTERSTATE_TITLE_COLOR => $data_cartridge[PRINTERSTATE_TITLE_COLOR], PRINTERSTATE_TITLE_EXT_TEMPER => $data_cartridge[PRINTERSTATE_TITLE_EXT_TEMPER]); // set default temperature if pla if ($data_cartridge[PRINTERSTATE_TITLE_MATERIAL] == PRINTERSTATE_DESP_MATERIAL_PLA) { $array_data[$abb_filament][PRINTERSTATE_TITLE_EXT_TEMPER] = PRINTERSTATE_VALUE_FILAMENT_PLA_PRINT_TEMPER; } } else { $array_data[$abb_filament] = array(PRINTERSTATE_TITLE_COLOR => PRINTERSTATE_VALUE_DEFAULT_COLOR, PRINTERSTATE_TITLE_EXT_TEMPER => SLICER_VALUE_DEFAULT_TEMPER); } $array_data[$abb_filament][PRINTERSTATE_TITLE_NEED_L] = $model_data[$key_length]; // treat error switch ($cr) { case ERROR_OK: // do nothing if no error break; case ERROR_LOW_RIGT_FILA: $check_filament['r'] = t('not enough'); break; case ERROR_MISS_RIGT_FILA: $check_filament['r'] = t('unloaded'); $change_filament['r'] = t('Load'); break; case ERROR_MISS_RIGT_CART: $check_filament['r'] = t('empty'); $change_filament['r'] = t('Load'); break; case ERROR_LOW_LEFT_FILA: $check_filament['l'] = t('not enough'); break; case ERROR_MISS_LEFT_FILA: $check_filament['l'] = t('unloaded'); $change_filament['l'] = t('Load'); break; case ERROR_MISS_LEFT_CART: $check_filament['l'] = t('empty'); $change_filament['l'] = t('Load'); break; default: $this->load->helper('printerlog'); PrinterLog_logError('not previewed return code for checking filament ' . $abb_filament, __FILE__, __LINE__); // assign error message if necessary $check_filament[$abb_filament] = t('error'); break; } if ($cr != ERROR_OK && $model_data[$key_length] > 0) { $enable_print = 'false'; } } // get a more legible time of estimation $time_estimation = TimeDisplay__convertsecond($model_data[PRINTLIST_TITLE_TIME], t('Time estimation: '), t('unknown')); // check if we can inverse filament / exchange extruder or not $cr = PrinterState_checkFilaments(array('l' => $array_data['r'][PRINTERSTATE_TITLE_NEED_L], 'r' => $array_data['l'][PRINTERSTATE_TITLE_NEED_L])); if ($cr == ERROR_OK && $calibration == FALSE) { $enable_exchange = NULL; } else { if ($mono_model == TRUE) { if ($array_data['l'][PRINTERSTATE_TITLE_NEED_L] == 0) { $check_filament['l'] = t('filament_not_enough_for_switch'); } else { // ($array_data['r'][PRINTERSTATE_TITLE_NEED_L] == 0) $check_filament['r'] = t('filament_not_enough_for_switch'); } } } // show detail page if valid, parse the body of page $template_data = array('home' => t('Home'), 'title' => $model_data[PRINTLIST_TITLE_NAME], 'image' => $model_data[PRINTLIST_TITLE_PIC][0], 'model_c_r' => $model_data[PRINTLIST_TITLE_COLOR_F1], 'model_c_l' => $model_data[PRINTLIST_TITLE_COLOR_F2], 'time' => $time_estimation, 'desp' => $model_data[PRINTLIST_TITLE_DESP], 'state_c_l' => $array_data['l'][PRINTERSTATE_TITLE_COLOR], 'state_c_r' => $array_data['r'][PRINTERSTATE_TITLE_COLOR], 'state_f_l' => $check_filament['l'], 'state_f_r' => $check_filament['r'], 'model_id' => $mid, 'title_current' => t('Filament'), 'change_filament_l' => $change_filament['l'], 'change_filament_r' => $change_filament['r'], 'need_filament_l' => $model_data[PRINTLIST_TITLE_LENG_F2], 'need_filament_r' => $model_data[PRINTLIST_TITLE_LENG_F1], 'temper_filament_l' => $array_data['l'][PRINTERSTATE_TITLE_EXT_TEMPER], 'temper_filament_r' => $array_data['r'][PRINTERSTATE_TITLE_EXT_TEMPER], 'print_model' => t('Print'), 'back' => t('back'), 'preview_title' => t('Preview'), 'desp_title' => t('Description'), 'color_suggestion' => t('color_suggestion'), 'temp_adjustments_l' => t('temp_adjustments_l'), 'temp_adjustments_r' => t('temp_adjustments_r'), 'chg_temperature' => t('chg_temperature'), 'error' => t('error'), 'filament_not_need' => t('filament_not_need'), 'filament_ok' => t('ok'), 'temper_max' => PRINTERSTATE_TEMPER_CHANGE_MAX, 'temper_min' => PRINTERSTATE_TEMPER_CHANGE_MIN, 'temper_delta' => PRINTERSTATE_TEMPER_CHANGE_VAL, 'exchange_on' => t('exchange_left'), 'exchange_off' => t('exchange_right'), 'exchange_extruder' => t('exchange_extruder'), 'random_prefix' => $mid . '_' . rand() . '_', 'enable_exchange' => $enable_exchange, 'enable_print' => $enable_print, 'bicolor_model' => $mono_model ? 'false' : 'true', 'bicolor_printer' => $bicolor ? 'true' : 'false', 'advanced' => t('advanced'), 'extrud_multiply' => t('extrud_multiply'), 'left_extrud_mult' => t('left_extrud_mult'), 'right_extrud_mult' => t('right_extrud_mult'), 'extrud_r' => PRINTERSTATE_EXT_MULTIPLY_DEFAULT, 'extrud_l' => PRINTERSTATE_EXT_MULTIPLY_DEFAULT, 'extrud_min' => PRINTERSTATE_EXT_MULTIPLY_MIN, 'extrud_max' => PRINTERSTATE_EXT_MULTIPLY_MAX, 'title_heatbed' => t('title_heatbed'), 'button_bed_off' => t('button_bed_off'), 'heat_bed' => $heat_bed ? 'true' : 'false', 'bed_temper_pla' => PRINTERSTATE_TEMPER_BED_PLA, 'bed_temper_abs' => PRINTERSTATE_TEMPER_BED_ABS, 'bed_temper_max' => PRINTERSTATE_TEMPER_MAX_H); $this->_parseBaseTemplate(t('ZeePro Personal Printer 21 - Printing details'), $this->parser->parse('printlist/detail', $template_data, TRUE)); return; }
function Printer_printFromPrime($abb_extruder, $first_run = TRUE) { $name_prime = NULL; $gcode_path = NULL; $model_id = NULL; $ret_val = 0; $id_model = ''; $array_info = array(); $array_cartridge = array(); $is_pva = 0; $CI =& get_instance(); $CI->load->helper(array('printlist', 'corestatus', 'printerstate')); $ret_val = PrinterState_getCartridgeAsArray($array_cartridge, $abb_extruder); if ($ret_val != ERROR_OK) { $CI->load->helper('printerlog'); PrinterLog_logError('read cartridge material error in printing prime: ' . $ret_val, __FILE__, __LINE__); return $ret_val; } else { if ($array_cartridge[PRINTERSTATE_TITLE_MATERIAL] == PRINTERSTATE_DESP_MATERIAL_PVA) { $is_pva = 1; } } switch ($abb_extruder . $is_pva) { case 'l0': if ($first_run == TRUE) { $name_prime = PRINTLIST_MODEL_PRIME_L; } else { $name_prime = PRINTLIST_MODEL_REPRIME_L; } case 'l1': $model_id = CORESTATUS_VALUE_MID_PRIME_L; if (!is_null($name_prime)) { break; } if ($first_run == TRUE) { $name_prime = PRINTLIST_MODEL_PRIME_L_PVA; } else { $name_prime = PRINTLIST_MODEL_REPRIME_L_PVA; } break; case 'r0': if ($first_run == TRUE) { $name_prime = PRINTLIST_MODEL_PRIME_R; } else { $name_prime = PRINTLIST_MODEL_REPRIME_R; } case 'r1': $model_id = CORESTATUS_VALUE_MID_PRIME_R; if (!is_null($name_prime)) { break; } if ($first_run == TRUE) { $name_prime = PRINTLIST_MODEL_PRIME_R_PVA; } else { $name_prime = PRINTLIST_MODEL_REPRIME_R_PVA; } break; default: return ERROR_WRONG_PRM; break; //never reach here } $id_model = ModelList_codeModelHash($name_prime); $ret_val = Printer_getFileFromModel(PRINTER_TYPE_MODELLIST, $id_model, $gcode_path, NULL, $array_info); if ($ret_val == ERROR_OK && $gcode_path) { $array_filament = array(); $array_temper = array(); if (!Printer__getLengthFromJson(PRINTER_TYPE_MODELLIST, $array_info, $array_filament)) { return ERROR_INTERNAL; // $ret_val = ERROR_INTERNAL; } // modify the temperature of gcode file according to cartridge info $ret_val = Printer__changeGcode($gcode_path, $array_filament, FALSE, $array_temper, TRUE); if ($ret_val != ERROR_OK) { return $ret_val; } $ret_val = Printer_printFromFile($gcode_path, $model_id, $array_info[PRINTLIST_TITLE_TIME], FALSE, FALSE, $array_filament, $array_temper); } return $ret_val; }
public function timelapse() { $template_data = array(); $array_info = array(); $status_current = NULL; $array_status = array(); $restart_url = NULL; $model_displayname = NULL; $show_storegcode = FALSE; $this->load->library('parser'); $this->load->helper('zimapi'); $this->lang->load('printdetail', $this->config->item('language')); if (CoreStatus_checkInIdle($status_current, $array_status) && array_key_exists(CORESTATUS_TITLE_PRINTMODEL, $array_status)) { $model_id = NULL; $abb_cartridge = NULL; $model_temper = NULL; if (strpos($array_status[CORESTATUS_TITLE_PRINTMODEL], CORESTATUS_VALUE_MID_PREFIXGCODE) === 0) { // gcode library model $gcode_info = array(); $gid = (int) substr($array_status[CORESTATUS_TITLE_PRINTMODEL], strlen(CORESTATUS_VALUE_MID_PREFIXGCODE)); $model_displayname = t('timelapse_info_modelname_unknown'); $this->load->helper('printerstoring'); $gcode_info = PrinterStoring_getInfo("gcode", $gid); if (!is_null($gcode_info) && array_key_exists("name", $gcode_info)) { $model_displayname = $gcode_info["name"]; } $array_info[] = array('title' => t('timelapse_info_modelname_title'), 'value' => $model_displayname); $restart_url = '/printdetail/printgcode?id=' . $gid; } else { switch ($array_status[CORESTATUS_TITLE_PRINTMODEL]) { case CORESTATUS_VALUE_MID_SLICE: $preset_id = NULL; $model_filename = array(); $preset_name = t('timelapse_info_presetname_unknown'); $this->load->helper('slicer'); if (ERROR_OK == Slicer_getModelFile(0, $model_filename, TRUE)) { foreach ($model_filename as $model_basename) { if (strlen($model_displayname)) { $model_displayname .= ' + ' . $model_basename; } else { $model_displayname = $model_basename; } } } else { $model_displayname = t('timelapse_info_modelname_slice'); } $array_info[] = array('title' => t('timelapse_info_modelname_title'), 'value' => $model_displayname); if (ZimAPI_getPreset($preset_id)) { $array_json = array(); if (ERROR_OK == ZimAPI_getPresetInfoAsArray($preset_id, $array_json)) { $preset_name = $array_json[ZIMAPI_TITLE_PRESET_NAME]; } } $array_info[] = array('title' => t('timelapse_info_presetname_title'), 'value' => $preset_name); $restart_url = '/printdetail/printslice'; $show_storegcode = TRUE; break; case CORESTATUS_VALUE_MID_PRIME_R: $abb_cartridge = 'r'; // treat priming in the same way // treat priming in the same way case CORESTATUS_VALUE_MID_PRIME_L: // never reach here normally (no timelapse for priming in principe, just for safety) $array_info[] = array('title' => t('timelapse_info_modelname_title'), 'value' => t('timelapse_info_modelname_prime')); if (is_null($abb_cartridge)) { $abb_cartridge = 'l'; } $restart_url = '/printdetail/printprime?r&v=' . $abb_cartridge; //TODO we lose callback info here break; case CORESTATUS_VALUE_MID_CALIBRATION: // never reach here normally (no timelapse for calibration model, just for safety) $this->load->helper('printlist'); $model_id = ModelList_codeModelHash(PRINTLIST_MODEL_CALIBRATION); $restart_url = '/printmodel/detail?id=calibration'; // treat as a normal pre-sliced model // treat as a normal pre-sliced model default: // treat as pre-sliced model $model_data = array(); $model_displayname = t('timelapse_info_modelname_unknown'); if (is_null($model_id)) { $this->load->helper('printlist'); $model_id = $array_status[CORESTATUS_TITLE_PRINTMODEL]; } if (ERROR_OK == ModelList__getDetailAsArray($model_id, $model_data, TRUE)) { $model_displayname = $model_data[PRINTLIST_TITLE_NAME]; } $array_info[] = array('title' => t('timelapse_info_modelname_title'), 'value' => $model_displayname); if (is_null($restart_url)) { $restart_url = '/printdetail/printmodel?id=' . $model_id; } break; } } if (array_key_exists(CORESTATUS_TITLE_ELAPSED_TIME, $array_status)) { $display_time = NULL; $this->load->helper('timedisplay'); $display_time = TimeDisplay__convertsecond($array_status[CORESTATUS_TITLE_ELAPSED_TIME], ''); $array_info[] = array('title' => t('timelapse_info_elapsedtime_title'), 'value' => $display_time); } if ($this->config->item('nb_extruder') < 2 && array_key_exists(CORESTATUS_TITLE_P_TEMPER_R, $array_status) && $array_status[CORESTATUS_TITLE_P_TEMPER_R] > 0) { $model_temper = t('timelapse_info_temperature_value_mono', array($array_status[CORESTATUS_TITLE_P_TEMPER_R])); } else { if (array_key_exists(CORESTATUS_TITLE_P_TEMPER_L, $array_status) && $array_status[CORESTATUS_TITLE_P_TEMPER_L] > 0 && array_key_exists(CORESTATUS_TITLE_P_TEMPER_R, $array_status) && $array_status[CORESTATUS_TITLE_P_TEMPER_R] > 0) { $model_temper = t('timelapse_info_temperature_values', array($array_status[CORESTATUS_TITLE_P_TEMPER_L], $array_status[CORESTATUS_TITLE_P_TEMPER_R])); } else { if (array_key_exists(CORESTATUS_TITLE_P_TEMPER_R, $array_status) && $array_status[CORESTATUS_TITLE_P_TEMPER_R] > 0) { $model_temper = t('timelapse_info_temperature_value_r', array($array_status[CORESTATUS_TITLE_P_TEMPER_R])); } else { if (array_key_exists(CORESTATUS_TITLE_P_TEMPER_L, $array_status) && $array_status[CORESTATUS_TITLE_P_TEMPER_L] > 0) { $model_temper = t('timelapse_info_temperature_value_l', array($array_status[CORESTATUS_TITLE_P_TEMPER_L])); } } } } if ($model_temper) { if (array_key_exists(CORESTATUS_TITLE_P_TEMPER_B, $array_status) && $array_status[CORESTATUS_TITLE_P_TEMPER_B] > 0) { $model_temper .= t('timelapse_info_extra_temperature_value_b', array($array_status[CORESTATUS_TITLE_P_TEMPER_B])); } $array_info[] = array('title' => t('timelapse_info_temperature_title'), 'value' => $model_temper); } } else { $this->load->helper('printerlog'); PrinterLog_logError('unintended status detected in timelapse page: ' . $status_current, __FILE__, __LINE__); $this->output->set_header('Location: /'); return; } // parse the main body $template_data = array('internet_ok' => @file_get_contents("https://sso.zeepro.com/login.ashx") === FALSE ? 'false' : 'true', 'loading_player' => t('timelapse_info'), 'finish_info' => t('Congratulation, your printing is complete!'), 'home_button' => t('Home'), 'home_popup_text' => t('home_popup_text'), 'yes' => t('Yes'), 'no' => t('No'), 'video_error' => t('video_error'), 'timelapse_title' => t('timelapse_title'), 'send_email_button' => t('send_email_button'), 'send_yt_button' => t('send_yt_button'), 'send_fb_button' => t('send_fb_button'), 'send_email_hint' => t('send_email_hint'), 'send_email_action' => t('send_email_action'), 'send_email_error' => t('send_email_error'), 'send_email_wrong' => t('send_email_wrong'), 'send_email_multi' => t('send_email_multi'), 'video_url' => '/tmp/' . ZIMAPI_FILENAME_TIMELAPSE . '?_=' . time(), 'timelapse_info_title' => t('timelapse_info_title'), 'timelapse_info' => $array_info, 'again_button' => t('Print again'), 'restart_url' => $restart_url ? $restart_url : '/', 'send_email_modelname' => $model_displayname, 'display_storegocde' => $show_storegcode ? 'true' : 'false', 'storegcode_checkbox' => t('storegcode_info'), 'storegcode_hint' => t('storegcode_name'), 'storegcode_err_cfm' => t('storegcode_err_cfm'), 'storegcode_title' => t('storegcode_title')); // parse all page $this->_parseBaseTemplate(t('ZeePro Personal Printer 21 - Printing details'), $this->parser->parse('printdetail/timelapse', $template_data, TRUE)); return; }
function ModelList__find($id_model_find, &$model_path) { global $CFG; $printlist_basepath = $CFG->config['printlist']; $model_path = NULL; if (strlen($id_model_find) != 32) { //default length of md5 return ERROR_UNKNOWN_MODEL; } $model_array = directory_map($printlist_basepath, 1); foreach ($model_array as $model_name) { if (!is_dir($printlist_basepath . $model_name)) { //check whether it is a folder or not continue; } $id_model_cal = ModelList_codeModelHash($model_name); if ($id_model_cal == $id_model_find) { $model_path = $printlist_basepath . $model_name . '/'; return ERROR_OK; //leave directly the loop when finding the correct folder break; // never reach here } } return ERROR_UNKNOWN_MODEL; }