diff --git a/zabapgit.prog.abap b/zabapgit.prog.abap index c0be103a4..7a188b571 100644 --- a/zabapgit.prog.abap +++ b/zabapgit.prog.abap @@ -13180,6 +13180,15 @@ ENDCLASS. *----------------------------------------------------------------------* CLASS lcl_html_action_utils DEFINITION FINAL. PUBLIC SECTION. + + TYPES: BEGIN OF ty_commit_fields, "TODO refactor ! Move to normal place + repo_key TYPE lcl_persistence_repo=>ty_repo-key, + username TYPE string, + email TYPE string, + comment TYPE string, + body TYPE string, + END OF ty_commit_fields. + CLASS-METHODS jump_encode IMPORTING iv_obj_type TYPE tadir-object iv_obj_name TYPE tadir-obj_name @@ -13210,6 +13219,10 @@ CLASS lcl_html_action_utils DEFINITION FINAL. IMPORTING iv_string TYPE clike RETURNING VALUE(rs_key) TYPE lcl_persistence_db=>ty_content. + CLASS-METHODS parse_commit_request + IMPORTING it_postdata TYPE cnht_post_data_tab + RETURNING VALUE(rs_fields) TYPE ty_commit_fields. + ENDCLASS. "lcl_html_action_utils DEFINITION *----------------------------------------------------------------------* @@ -13361,6 +13374,42 @@ CLASS lcl_html_action_utils IMPLEMENTATION. ENDMETHOD. "dbkey_decode + METHOD parse_commit_request. + + CONSTANTS: lc_replace TYPE string VALUE '<>'. + + DATA: lv_string TYPE string, + lt_fields TYPE tihttpnvp. + + FIELD-SYMBOLS: LIKE LINE OF lt_fields. + + + CONCATENATE LINES OF it_postdata INTO lv_string. + + REPLACE ALL OCCURRENCES OF gc_newline IN lv_string WITH lc_replace. + + lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ). + + READ TABLE lt_fields ASSIGNING WITH KEY name = 'username' ##NO_TEXT. + ASSERT sy-subrc = 0. + rs_fields-username = -value. + + READ TABLE lt_fields ASSIGNING WITH KEY name = 'email' ##NO_TEXT. + ASSERT sy-subrc = 0. + rs_fields-email = -value. + + READ TABLE lt_fields ASSIGNING WITH KEY name = 'comment' ##NO_TEXT. + ASSERT sy-subrc = 0. + rs_fields-comment = -value. + + READ TABLE lt_fields ASSIGNING WITH KEY name = 'body' ##NO_TEXT. + ASSERT sy-subrc = 0. + rs_fields-body = -value. + REPLACE ALL OCCURRENCES OF lc_replace IN rs_fields-body WITH gc_newline. + + ENDMETHOD. "parse_commit_request + + ENDCLASS. "lcl_html_action_utils IMPLEMENTATION *----------------------------------------------------------------------* @@ -16394,6 +16443,10 @@ CLASS lcl_gui_router DEFINITION FINAL. IMPORTING it_postdata TYPE cnht_post_data_tab RAISING lcx_exception. + METHODS commit_push + IMPORTING it_postdata TYPE cnht_post_data_tab + RAISING lcx_exception. + ENDCLASS. *----------------------------------------------------------------------* @@ -19959,32 +20012,12 @@ CLASS lcl_gui_page_commit DEFINITION FINAL INHERITING FROM lcl_gui_page_super. IMPORTING iv_repo_key TYPE lcl_persistence_repo=>ty_repo-key RAISING lcx_exception. - METHODS lif_gui_page~on_event REDEFINITION. METHODS lif_gui_page~render REDEFINITION. PRIVATE SECTION. DATA: mo_repo TYPE REF TO lcl_repo_online, mo_stage TYPE REF TO lcl_stage. - TYPES: BEGIN OF ty_fields, - username TYPE string, - email TYPE string, - comment TYPE string, - body TYPE string, - END OF ty_fields. - - METHODS push - IMPORTING it_postdata TYPE cnht_post_data_tab - RAISING lcx_exception. - - METHODS update_userdata - IMPORTING is_fields TYPE ty_fields - RAISING lcx_exception. - - METHODS parse - IMPORTING it_postdata TYPE cnht_post_data_tab - RETURNING VALUE(rs_fields) TYPE ty_fields. - METHODS render_menu RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper. @@ -20013,101 +20046,6 @@ CLASS lcl_gui_page_commit IMPLEMENTATION. mo_stage = lcl_app=>repo_srv( )->get_stage( iv_repo_key ). ENDMETHOD. - METHOD update_userdata. - - DATA: lo_user TYPE REF TO lcl_persistence_user. - - lo_user = lcl_app=>user( ). - lo_user->set_username( is_fields-username ). - lo_user->set_email( is_fields-email ). - - ENDMETHOD. - - METHOD lif_gui_page~on_event. - - CASE iv_action. - WHEN 'commit_post'. - push( it_postdata ). - "lcl_app=>repo_srv( )->free_stage( ??? ). -* MESSAGE 'POST PUSHED' TYPE 'S' DISPLAY LIKE 'S'. - rv_state = gc_event_state-go_back_to_bookmark. - WHEN 'commit_cancel'. - rv_state = gc_event_state-go_back. - ENDCASE. - - ENDMETHOD. - - METHOD push. - - DATA: ls_fields TYPE ty_fields, - ls_comment TYPE ty_comment. - - - ls_fields = parse( it_postdata ). - - update_userdata( ls_fields ). - - IF ls_fields-username IS INITIAL. - _raise 'empty username'. - ENDIF. - IF ls_fields-email IS INITIAL. - _raise 'empty email'. - ENDIF. - IF ls_fields-comment IS INITIAL. - _raise 'empty comment'. - ENDIF. - - ls_comment-username = ls_fields-username. - ls_comment-email = ls_fields-email. - ls_comment-comment = ls_fields-comment. - - IF NOT ls_fields-body IS INITIAL. - CONCATENATE ls_comment-comment gc_newline ls_fields-body - INTO ls_comment-comment. - ENDIF. - - mo_repo->push( is_comment = ls_comment - io_stage = mo_stage ). - - COMMIT WORK. - - ENDMETHOD. - - METHOD parse. - - CONSTANTS: lc_replace TYPE string VALUE '<>'. - - DATA: lv_string TYPE string, - lt_fields TYPE tihttpnvp. - - FIELD-SYMBOLS: LIKE LINE OF lt_fields. - - - CONCATENATE LINES OF it_postdata INTO lv_string. - - REPLACE ALL OCCURRENCES OF gc_newline IN lv_string WITH lc_replace. - - lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ). - - READ TABLE lt_fields ASSIGNING WITH KEY name = 'username' ##NO_TEXT. - ASSERT sy-subrc = 0. - rs_fields-username = -value. - - READ TABLE lt_fields ASSIGNING WITH KEY name = 'email' ##NO_TEXT. - ASSERT sy-subrc = 0. - rs_fields-email = -value. - - READ TABLE lt_fields ASSIGNING WITH KEY name = 'comment' ##NO_TEXT. - ASSERT sy-subrc = 0. - rs_fields-comment = -value. - - READ TABLE lt_fields ASSIGNING WITH KEY name = 'body' ##NO_TEXT. - ASSERT sy-subrc = 0. - rs_fields-body = -value. - REPLACE ALL OCCURRENCES OF lc_replace IN rs_fields-body WITH gc_newline. - - ENDMETHOD. - METHOD render_stage. DATA: lt_stage TYPE lcl_stage=>ty_stage_tt. @@ -23870,6 +23808,14 @@ CLASS lcl_gui_router IMPLEMENTATION. ei_page = get_page_stage( lv_key ). ev_state = gc_event_state-new_page_w_bookmark. + " Commit + WHEN 'commit_post'. + commit_push( it_postdata ). + ev_state = gc_event_state-go_back_to_bookmark. + WHEN 'commit_cancel'. + ev_state = gc_event_state-go_back. + + WHEN OTHERS. ev_state = gc_event_state-not_handled. ENDCASE. @@ -24388,6 +24334,49 @@ CLASS lcl_gui_router IMPLEMENTATION. ENDMETHOD. + METHOD commit_push. + + DATA: ls_fields TYPE lcl_html_action_utils=>ty_commit_fields, + ls_comment TYPE ty_comment, + lo_stage TYPE REF TO lcl_stage, + lo_repo TYPE REF TO lcl_repo_online, + lo_user TYPE REF TO lcl_persistence_user. + + ls_fields = lcl_html_action_utils=>parse_commit_request( it_postdata ). + + lo_user = lcl_app=>user( ). " TODO refactor - password manager + lo_user->set_username( ls_fields-username ). + lo_user->set_email( ls_fields-email ). + + IF ls_fields-username IS INITIAL. + _raise 'empty username'. + ENDIF. + IF ls_fields-email IS INITIAL. + _raise 'empty email'. + ENDIF. + IF ls_fields-comment IS INITIAL. + _raise 'empty comment'. + ENDIF. + + lo_repo ?= lcl_app=>repo_srv( )->get( ls_fields-repo_key ). + lo_stage = lcl_app=>repo_srv( )->get_stage( ls_fields-repo_key ). + ls_comment-username = ls_fields-username. + ls_comment-email = ls_fields-email. + ls_comment-comment = ls_fields-comment. + + IF NOT ls_fields-body IS INITIAL. + CONCATENATE ls_comment-comment gc_newline ls_fields-body + INTO ls_comment-comment. + ENDIF. + + lo_repo->push( is_comment = ls_comment + io_stage = lo_stage ). + + COMMIT WORK. + + ENDMETHOD. "commit_push + + ENDCLASS. " lcl_gui_router CLASS ltcl_git_porcelain DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL.