SKYHAWK AI DEBUG REPORT Task: Comprehensive read-only Journal uploader, Journal storage, and article-index architecture inspection. Generated: 2026-09-04T01:52:15+00:00 Report-ID: 20260904T015215Z-4066261 Archive-URL: https://skyhawk.org/downloads/chatgpt-debug-20260904T015215Z-4066261.txt Host: s19522.use2.stableserver.net Working directory: /home/darwus Drupal root: /home/darwus/drupalbeta/web ===== MODE ===== READ_ONLY_DISCOVERY=YES DRUPAL_MUTATION=NO APPLICATION_SOURCE_MUTATION=NO DATABASE_MUTATION=NO BACKUP_REQUIRED=NO ===== PRE-FLIGHT ===== DRUSH=PASS|/home/darwus/drupalbeta/vendor/bin/drush PHP=PASS|/opt/alt/php84/usr/bin/php CANONICAL_PYTHON=PASS|/home/darwus/virtualenv/skyhawk_py310/3.10/bin/python3.10 UPLOAD_FORM=PASS|/home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php UPLOAD_FORM_SHA256=2218b3710d39d7e369fe5affc8aa9b36510a8da54e4c350afe1fa6513da1dd66 ROUTING_FILE=PASS|/home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.routing.yml ROUTING_SHA256=be37c6b9bc5564b8ca45376db6727a240682a0ac3176dd2b77264b648c8bb6c8 ===== DRUPAL STRUCTURAL INSPECTION ===== ===== AUTHORITATIVE REFERENCE ENTITY STATE ===== RULES_READ=PASS RULES_NID=49418 RULES_REVISION=67910 RULES_ACTIVE_MARKER=PASS RULES_TRANSPORT_CURRENT=PASS ENV_READ=PASS ENV_NID=49461 ENV_REVISION=67911 ENV_JOURNAL_ARCHITECTURE=PASS ===== ROUTE OWNER ===== ROUTE_NAME=skyhawk_site_fixes.journal_upload ROUTE_PATH=/journal-upload ROUTE_FORM=\Drupal\skyhawk_site_fixes\Form\JournalUploadForm ROUTE_CONTROLLER= ROUTE_REQUIREMENTS={"_role":"journal+admin"} ===== CONTENT TYPE COUNTS ===== NODE_COUNT|journal|105 NODE_COUNT|journal_index|0 NODE_COUNT|skyhawk_association_journal_inde|534 NODE_COUNT|article_journal_private|1 NODE_COUNT|article_journal_public|0 NODE_COUNT|pdf|4 ===== JOURNAL FIELD SCHEMA ===== BUNDLE=journal FIELD=body|LABEL=Body|TYPE=text_with_summary|REQUIRED=NO|CARDINALITY=1|FIELD_SETTINGS={"display_summary":true,"required_summary":false} FIELD=field_journal_is_print|LABEL=Print-Friendly Version|TYPE=boolean|REQUIRED=NO|CARDINALITY=1|FIELD_SETTINGS={"on_label":"On","off_label":"Off"} FIELD=field_journal_issue|LABEL=Issue|TYPE=integer|REQUIRED=NO|CARDINALITY=1|STORAGE_SETTINGS={"unsigned":false,"size":"normal"}|FIELD_SETTINGS={"min":null,"max":null,"prefix":"","suffix":"","unsigned":false,"size":"normal"} FIELD=field_journal_label|LABEL=Season Label|TYPE=string|REQUIRED=NO|CARDINALITY=1|STORAGE_SETTINGS={"max_length":64,"case_sensitive":false,"is_ascii":false}|FIELD_SETTINGS={"max_length":64,"case_sensitive":false,"is_ascii":false} FIELD=field_journal_thumbnail|LABEL=Cover Thumbnail|TYPE=image|REQUIRED=NO|CARDINALITY=1|STORAGE_SETTINGS={"target_type":"file","display_field":false,"display_default":true,"uri_scheme":"public","default_image":{"uuid":null,"alt":"","title":"","width":null,"height":null}}|FIELD_SETTINGS={"handler":"default:file","handler_settings":[],"file_directory":"[date:custom:Y]-[date:custom:m]","file_extensions":"png gif jpg jpeg webp","max_filesize":"","max_resolution":"","min_resolution":"","alt_field":true,"alt_field_required":true,"title_field":false,"title_field_required":false,"default_image":{"uuid":null,"alt":"","title":"","width":null,"height":null},"target_type":"file","display_field":false,"display_default":true,"uri_scheme":"public"} FIELD=field_journal_volume|LABEL=Volume|TYPE=integer|REQUIRED=NO|CARDINALITY=1|STORAGE_SETTINGS={"unsigned":false,"size":"normal"}|FIELD_SETTINGS={"min":null,"max":null,"prefix":"","suffix":"","unsigned":false,"size":"normal"} FIELD=field_journal_year|LABEL=Year|TYPE=integer|REQUIRED=NO|CARDINALITY=1|STORAGE_SETTINGS={"unsigned":false,"size":"normal"}|FIELD_SETTINGS={"min":null,"max":null,"prefix":"","suffix":"","unsigned":false,"size":"normal"} FIELD=field_pdf|LABEL=PDF|TYPE=file|REQUIRED=NO|CARDINALITY=-1|STORAGE_SETTINGS={"target_type":"file","display_field":true,"display_default":true,"uri_scheme":"private"}|FIELD_SETTINGS={"handler":"default:file","handler_settings":[],"file_directory":"pdf","file_extensions":"pdf","max_filesize":"","description_field":true,"target_type":"file","display_field":true,"display_default":true,"uri_scheme":"private"} FIELD=field_pdf_print|LABEL=Spreads PDF|TYPE=file|REQUIRED=NO|CARDINALITY=1|STORAGE_SETTINGS={"target_type":"file","display_field":false,"display_default":false,"uri_scheme":"private"}|FIELD_SETTINGS={"handler":"default:file","handler_settings":[],"file_directory":"[date:custom:Y]-[date:custom:m]","file_extensions":"txt","max_filesize":"","description_field":false,"target_type":"file","display_field":false,"display_default":false,"uri_scheme":"private"} ===== LIVE ARTICLE INDEX FIELD SCHEMA ===== BUNDLE=skyhawk_association_journal_inde FIELD=body|LABEL=Body|TYPE=text_with_summary|REQUIRED=NO|CARDINALITY=1|FIELD_SETTINGS={"display_summary":true,"required_summary":false} FIELD=field_article|LABEL=Article|TYPE=string|REQUIRED=NO|CARDINALITY=1|STORAGE_SETTINGS={"max_length":80,"case_sensitive":false,"is_ascii":false}|FIELD_SETTINGS={"max_length":80,"case_sensitive":false,"is_ascii":false} FIELD=field_author_last_name|LABEL=Author Last Name|TYPE=string|REQUIRED=NO|CARDINALITY=1|STORAGE_SETTINGS={"max_length":25,"case_sensitive":false,"is_ascii":false}|FIELD_SETTINGS={"max_length":25,"case_sensitive":false,"is_ascii":false} FIELD=field_category|LABEL=Category|TYPE=list_string|REQUIRED=NO|CARDINALITY=1|STORAGE_SETTINGS={"allowed_values":{"Allied Operations":"Allied Operations","Attack":"Attack","Book Review":"Book Review","Combat":"Combat","Conventional Weapons":"Conventional Weapons","Cover":"Cover","Gann's Gallery":"Gann's Gallery","Index":"Index","Journal":"Journal","Maintenance/Ordnance":"Maintenance/Ordnance","Memorial":"Memorial","Miscellaneous":"Miscellaneous","Maintenance":"Maintenance","Modeling":"Modeling","Nuclear":"Nuclear","Poem":"Poem","Prez Sez":"Prez Sez","Puresome":"Puresome","Restoration":"Restoration","R.G.'s Art":"R.G.'s Art","Reunions":"Reunions","Skyhawk Art":"Skyhawk Art","Skyhawk Displays":"Skyhawk Displays","Skyhawk Modeling":"Skyhawk Modeling","Skyhawk Movies":"Skyhawk Movies","Skyhawk News":"Skyhawk News","Skyhawk Operations":"Skyhawk Operations","Skyhawk Restoration":"Skyhawk Restoration","Skyhawk TINS":"Skyhawk TINS","Skyhawk Trivia":"Skyhawk Trivia","TAPS":"TAPS","TINS":"TINS","Website":"Website"},"allowed_values_function":""}|FIELD_SETTINGS={"allowed_values":{"Allied Operations":"Allied Operations","Attack":"Attack","Book Review":"Book Review","Combat":"Combat","Conventional Weapons":"Conventional Weapons","Cover":"Cover","Gann's Gallery":"Gann's Gallery","Index":"Index","Journal":"Journal","Maintenance/Ordnance":"Maintenance/Ordnance","Memorial":"Memorial","Miscellaneous":"Miscellaneous","Maintenance":"Maintenance","Modeling":"Modeling","Nuclear":"Nuclear","Poem":"Poem","Prez Sez":"Prez Sez","Puresome":"Puresome","Restoration":"Restoration","R.G.'s Art":"R.G.'s Art","Reunions":"Reunions","Skyhawk Art":"Skyhawk Art","Skyhawk Displays":"Skyhawk Displays","Skyhawk Modeling":"Skyhawk Modeling","Skyhawk Movies":"Skyhawk Movies","Skyhawk News":"Skyhawk News","Skyhawk Operations":"Skyhawk Operations","Skyhawk Restoration":"Skyhawk Restoration","Skyhawk TINS":"Skyhawk TINS","Skyhawk Trivia":"Skyhawk Trivia","TAPS":"TAPS","TINS":"TINS","Website":"Website"},"allowed_values_function":""} FIELD=field_first_name|LABEL=First Name|TYPE=string|REQUIRED=NO|CARDINALITY=1|STORAGE_SETTINGS={"max_length":20,"case_sensitive":false,"is_ascii":false}|FIELD_SETTINGS={"max_length":20,"case_sensitive":false,"is_ascii":false} FIELD=field_issue|LABEL=Issue|TYPE=list_string|REQUIRED=NO|CARDINALITY=1|STORAGE_SETTINGS={"allowed_values":{"Spring":"Spring","Summer":"Summer","Fall":"Fall","Winter":"Winter"},"allowed_values_function":""}|FIELD_SETTINGS={"allowed_values":{"Spring":"Spring","Summer":"Summer","Fall":"Fall","Winter":"Winter"},"allowed_values_function":""} FIELD=field_journal_number|LABEL=Journal Number|TYPE=list_float|REQUIRED=NO|CARDINALITY=1|STORAGE_SETTINGS={"allowed_values":{"1.1":"1.1","1.2":"1.2","1.3":"1.3","1.4":"1.4","2.1":"2.1","2.2":"2.2","2.3":"2.3","2.4":"2.4","3.1":"3.1","3.2":"3.2","3.3":"3.3","3.4":"3.4","4.1":"4.1","4.2":"4.2","4.3":"4.3","4.4":"4.4","5.1":"5.1","5.2":"5.2","5.3":"5.3","5.4":"5.4","6.1":"6.1","6.2":"6.2","6.3":"6.3","6.4":"6.4","7.1":"7.1","7.2":"7.2","7.3":"7.3","7.4":"7.4","8.1":"8.1","8.2":"8.2","8.3":"8.3","8.4":"8.4","9.1":"9.1","9.2":"9.2","9.3":"9.3","9.4":"9.4","10.1":"10.1","10.2":"10.2","10.3":"10.3","10.4":"10.4","11.1":"11.1","11.2":"11.2","11.3":"11.3","11.4":"11.4","12.1":"12.1","12.2":"12.2","12.3":"12.3","12.4":"12.4","13.1":"13.1","13.2":"13.2","13.3":"13.3","13.4":"13.4","14.1":"14.1","14.2":"14.2","14.3":"14.3","14.4":"14.4","15.1":"15.1","15.2":"15.2","15.3":"15.3","15.4":"15.4","16.1":"16.1","16.2":"16.2","16.3":"16.3","16.4":"16.4","17.1":"17.1","17.2":"17.2","17.3":"17.3","17.4":"17.4","18.1":"18.1","18.2":"18.2","18.3":"18.3","18.4":"18.4","19.1":"19.1","19.2":"19.2","19.3":"19.3","19.4":"19.4","20.1":"20.1","20.2":"20.2","20.3":"20.3","20.4":"20.4","21.1":"21.1","21.2":"21.2","21.3":"21.3","21.4":"21.4","22.1":"22.1","22.2":"22.2","22.3":"22.3","22.4":"22.4","23.1":"23.1","23.2":"23.2","23.3":"23.3","23.4":"23.4","24.1":"24.1","24.2":"24.2","24.3":"24.3","24.4":"24.4","25.1":"25.1","25.2":"25.2","25.3":"25.3","25.4":"25.4","26.1":"26.1","26.2":"26.2","26.3":"26.3","26.4":"26.4","27.1":"27.1","27.2":"27.2","27.3":"27.3","27.4":"27.4","28.1":"28.1","28.2":"28.2","28.3":"28.3","28.4":"28.4","29.1":"29.1","29.2":"29.2","29.3":"29.3","29.4":"29.4","30.1":"30.1","30.2":"30.2","30.3":"30.3","30.4":"30.4","31.1":"31.1","31.2":"31.2","31.3":"31.3","31.4":"31.4","32.1":"32.1","32.2":"32.2","32.3":"32.3","32.4":"32.4","33.1":"33.1","33.2":"33.2","33.3":"33.3","33.4":"33.4","34.1":"34.1","34.2":"34.2","34.3":"34.3","34.4":"34.4","35.1":"35.1","35.2":"35.2","35.3":"35.3","35.4":"35.4","36.1":"36.1","36.2":"36.2","36.3":"36.3","36.4":"36.4","37.1":"37.1","37.2":"37.2","37.3":"37.3","37.4":"37.4","38.1":"38.1","38.2":"38.2","38.3":"38.3","38.4":"38.4","39.1":"39.1","39.2":"39.2","39.3":"39.3","39.4":"39.4","40.1":"40.1","40.2":"40.2","40.3":"40.3","40.4":"40.4"},"allowed_values_function":""}|FIELD_SETTINGS={"allowed_values":{"1.1":"1.1","1.2":"1.2","1.3":"1.3","1.4":"1.4","2.1":"2.1","2.2":"2.2","2.3":"2.3","2.4":"2.4","3.1":"3.1","3.2":"3.2","3.3":"3.3","3.4":"3.4","4.1":"4.1","4.2":"4.2","4.3":"4.3","4.4":"4.4","5.1":"5.1","5.2":"5.2","5.3":"5.3","5.4":"5.4","6.1":"6.1","6.2":"6.2","6.3":"6.3","6.4":"6.4","7.1":"7.1","7.2":"7.2","7.3":"7.3","7.4":"7.4","8.1":"8.1","8.2":"8.2","8.3":"8.3","8.4":"8.4","9.1":"9.1","9.2":"9.2","9.3":"9.3","9.4":"9.4","10.1":"10.1","10.2":"10.2","10.3":"10.3","10.4":"10.4","11.1":"11.1","11.2":"11.2","11.3":"11.3","11.4":"11.4","12.1":"12.1","12.2":"12.2","12.3":"12.3","12.4":"12.4","13.1":"13.1","13.2":"13.2","13.3":"13.3","13.4":"13.4","14.1":"14.1","14.2":"14.2","14.3":"14.3","14.4":"14.4","15.1":"15.1","15.2":"15.2","15.3":"15.3","15.4":"15.4","16.1":"16.1","16.2":"16.2","16.3":"16.3","16.4":"16.4","17.1":"17.1","17.2":"17.2","17.3":"17.3","17.4":"17.4","18.1":"18.1","18.2":"18.2","18.3":"18.3","18.4":"18.4","19.1":"19.1","19.2":"19.2","19.3":"19.3","19.4":"19.4","20.1":"20.1","20.2":"20.2","20.3":"20.3","20.4":"20.4","21.1":"21.1","21.2":"21.2","21.3":"21.3","21.4":"21.4","22.1":"22.1","22.2":"22.2","22.3":"22.3","22.4":"22.4","23.1":"23.1","23.2":"23.2","23.3":"23.3","23.4":"23.4","24.1":"24.1","24.2":"24.2","24.3":"24.3","24.4":"24.4","25.1":"25.1","25.2":"25.2","25.3":"25.3","25.4":"25.4","26.1":"26.1","26.2":"26.2","26.3":"26.3","26.4":"26.4","27.1":"27.1","27.2":"27.2","27.3":"27.3","27.4":"27.4","28.1":"28.1","28.2":"28.2","28.3":"28.3","28.4":"28.4","29.1":"29.1","29.2":"29.2","29.3":"29.3","29.4":"29.4","30.1":"30.1","30.2":"30.2","30.3":"30.3","30.4":"30.4","31.1":"31.1","31.2":"31.2","31.3":"31.3","31.4":"31.4","32.1":"32.1","32.2":"32.2","32.3":"32.3","32.4":"32.4","33.1":"33.1","33.2":"33.2","33.3":"33.3","33.4":"33.4","34.1":"34.1","34.2":"34.2","34.3":"34.3","34.4":"34.4","35.1":"35.1","35.2":"35.2","35.3":"35.3","35.4":"35.4","36.1":"36.1","36.2":"36.2","36.3":"36.3","36.4":"36.4","37.1":"37.1","37.2":"37.2","37.3":"37.3","37.4":"37.4","38.1":"38.1","38.2":"38.2","38.3":"38.3","38.4":"38.4","39.1":"39.1","39.2":"39.2","39.3":"39.3","39.4":"39.4","40.1":"40.1","40.2":"40.2","40.3":"40.3","40.4":"40.4"},"allowed_values_function":""} FIELD=field_page|LABEL=Page|TYPE=integer|REQUIRED=NO|CARDINALITY=1|STORAGE_SETTINGS={"unsigned":false,"size":"normal"}|FIELD_SETTINGS={"min":null,"max":null,"prefix":"","suffix":"","unsigned":false,"size":"normal"} FIELD=field_pdf_access|LABEL=PDF Access|TYPE=link|REQUIRED=NO|CARDINALITY=1|FIELD_SETTINGS={"title":1,"link_type":1} FIELD=field_record|LABEL=Record|TYPE=integer|REQUIRED=NO|CARDINALITY=1|STORAGE_SETTINGS={"unsigned":false,"size":"normal"}|FIELD_SETTINGS={"min":null,"max":null,"prefix":"","suffix":"","unsigned":false,"size":"normal"} FIELD=field_year|LABEL=Year|TYPE=list_integer|REQUIRED=NO|CARDINALITY=1|STORAGE_SETTINGS={"allowed_values":{"1995":"1995","1996":"1996","1997":"1997","1998":"1998","1999":"1999","2000":"2000","2001":"2001","2002":"2002","2003":"2003","2004":"2004","2005":"2005","2006":"2006","2007":"2007","2008":"2008","2009":"2009","2010":"2010","2011":"2011","2012":"2012","2013":"2013","2014":"2014","2015":"2015","2016":"2016","2017":"2017","2018":"2018","2019":"2019","2020":"2020","2021":"2021","2022":"2022","2023":"2023","2024":"2024","2025":"2025","2026":"2026","2027":"2027","2028":"2028","2029":"2029","2030":"2030","2031":"2031","2032":"2032","2033":"2033","2034":"2034","2035":"2035","2036":"2036","2037":"2037","2038":"2038","2039":"2039","2040":"2040","2041":"2041","2042":"2042","2043":"2043","2044":"2044","2045":"2045","2046":"2046","2047":"2047","2048":"2048","2049":"2049","2050":"2050"},"allowed_values_function":""}|FIELD_SETTINGS={"allowed_values":{"1995":"1995","1996":"1996","1997":"1997","1998":"1998","1999":"1999","2000":"2000","2001":"2001","2002":"2002","2003":"2003","2004":"2004","2005":"2005","2006":"2006","2007":"2007","2008":"2008","2009":"2009","2010":"2010","2011":"2011","2012":"2012","2013":"2013","2014":"2014","2015":"2015","2016":"2016","2017":"2017","2018":"2018","2019":"2019","2020":"2020","2021":"2021","2022":"2022","2023":"2023","2024":"2024","2025":"2025","2026":"2026","2027":"2027","2028":"2028","2029":"2029","2030":"2030","2031":"2031","2032":"2032","2033":"2033","2034":"2034","2035":"2035","2036":"2036","2037":"2037","2038":"2038","2039":"2039","2040":"2040","2041":"2041","2042":"2042","2043":"2043","2044":"2044","2045":"2045","2046":"2046","2047":"2047","2048":"2048","2049":"2049","2050":"2050"},"allowed_values_function":""} ===== NOMINAL JOURNAL_INDEX FIELD SCHEMA ===== BUNDLE=journal_index FIELD=field_journal_index|LABEL=Journal Index|TYPE=list_string|REQUIRED=YES|CARDINALITY=1|STORAGE_SETTINGS={"allowed_values":[],"allowed_values_function":""}|FIELD_SETTINGS={"allowed_values":[],"allowed_values_function":""} ===== JOURNAL NODE INVENTORY ===== JOURNAL|NID=49227|STATUS=1|TITLE=Spring 1995 (Vol. 1 No. 1)|YEAR=1995|VOLUME=1|ISSUE=1|LABEL=Spring 1995 (Vol. 1 No. 1)|IS_PRINT=0|PDF_FID=61555|PDF_NAME=1995-1.1.pdf|PDF_URI=public://sajournals/1995-1.1.pdf|PDF_SIZE=19996274|PDF_EXISTS=YES JOURNAL|NID=49228|STATUS=1|TITLE=Spring 1996 (Vol. 2 No. 1)|YEAR=1996|VOLUME=2|ISSUE=1|LABEL=Spring 1996 (Vol. 2 No. 1)|IS_PRINT=0|PDF_FID=61556|PDF_NAME=1996-2.1.pdf|PDF_URI=public://sajournals/1996-2.1.pdf|PDF_SIZE=21885820|PDF_EXISTS=YES JOURNAL|NID=49229|STATUS=1|TITLE=Summer 1996 (Vol. 2 No. 2)|YEAR=1996|VOLUME=2|ISSUE=2|LABEL=Summer 1996 (Vol. 2 No. 2)|IS_PRINT=0|PDF_FID=61246|PDF_NAME=1996-2.2.pdf|PDF_URI=public://sajournals/1996-2.2.pdf|PDF_SIZE=20171217|PDF_EXISTS=YES JOURNAL|NID=49230|STATUS=1|TITLE=Fall 1996 (Vol. 2 No. 3)|YEAR=1996|VOLUME=2|ISSUE=3|LABEL=Fall 1996 (Vol. 2 No. 3)|IS_PRINT=0|PDF_FID=61248|PDF_NAME=1996-2.3.pdf|PDF_URI=public://sajournals/1996-2.3.pdf|PDF_SIZE=20258496|PDF_EXISTS=YES JOURNAL|NID=49231|STATUS=1|TITLE=Spring 1997 (Vol. 3 No. 1)|YEAR=1997|VOLUME=3|ISSUE=1|LABEL=Spring 1997 (Vol. 3 No. 1)|IS_PRINT=0|PDF_FID=61557|PDF_NAME=1997-3.1.pdf|PDF_URI=public://sajournals/1997-3.1.pdf|PDF_SIZE=20083841|PDF_EXISTS=YES JOURNAL|NID=49232|STATUS=1|TITLE=Summer 1997 (Vol. 3 No. 2)|YEAR=1997|VOLUME=3|ISSUE=2|LABEL=Summer 1997 (Vol. 3 No. 2)|IS_PRINT=0|PDF_FID=61252|PDF_NAME=1997-3.2.pdf|PDF_URI=public://sajournals/1997-3.2.pdf|PDF_SIZE=12905828|PDF_EXISTS=YES JOURNAL|NID=49233|STATUS=1|TITLE=Fall 1997 (Vol. 3 No. 3)|YEAR=1997|VOLUME=3|ISSUE=3|LABEL=Fall 1997 (Vol. 3 No. 3)|IS_PRINT=0|PDF_FID=61254|PDF_NAME=1997-3.3.pdf|PDF_URI=public://sajournals/1997-3.3.pdf|PDF_SIZE=15284397|PDF_EXISTS=YES JOURNAL|NID=49234|STATUS=1|TITLE=Winter 1997 (Vol. 3 No. 4)|YEAR=1997|VOLUME=3|ISSUE=4|LABEL=Winter 1997 (Vol. 3 No. 4)|IS_PRINT=0|PDF_FID=61256|PDF_NAME=1997-3.4.pdf|PDF_URI=public://sajournals/1997-3.4.pdf|PDF_SIZE=12327683|PDF_EXISTS=YES JOURNAL|NID=49235|STATUS=1|TITLE=Spring 1998 (Vol. 4 No. 1)|YEAR=1998|VOLUME=4|ISSUE=1|LABEL=Spring 1998 (Vol. 4 No. 1)|IS_PRINT=0|PDF_FID=61558|PDF_NAME=1998-4.1.pdf|PDF_URI=public://sajournals/1998-4.1.pdf|PDF_SIZE=12877927|PDF_EXISTS=YES JOURNAL|NID=49236|STATUS=1|TITLE=Summer 1998 (Vol. 4 No. 2)|YEAR=1998|VOLUME=4|ISSUE=2|LABEL=Summer 1998 (Vol. 4 No. 2)|IS_PRINT=0|PDF_FID=61260|PDF_NAME=1998-4.2.pdf|PDF_URI=public://sajournals/1998-4.2.pdf|PDF_SIZE=12961418|PDF_EXISTS=YES JOURNAL|NID=49237|STATUS=1|TITLE=Fall 1998 (Vol. 4 No. 3)|YEAR=1998|VOLUME=4|ISSUE=3|LABEL=Fall 1998 (Vol. 4 No. 3)|IS_PRINT=0|PDF_FID=61262|PDF_NAME=1998-4.3.pdf|PDF_URI=public://sajournals/1998-4.3.pdf|PDF_SIZE=14781383|PDF_EXISTS=YES JOURNAL|NID=49238|STATUS=1|TITLE=Winter 1998 (Vol. 4 No. 4)|YEAR=1998|VOLUME=4|ISSUE=4|LABEL=Winter 1998 (Vol. 4 No. 4)|IS_PRINT=0|PDF_FID=61264|PDF_NAME=1998-4.4.pdf|PDF_URI=public://sajournals/1998-4.4.pdf|PDF_SIZE=13191241|PDF_EXISTS=YES JOURNAL|NID=49240|STATUS=1|TITLE=Spring 1999 (Vol. 5 No. 1)|YEAR=1999|VOLUME=5|ISSUE=1|LABEL=Spring 1999 (Vol. 5 No. 1)|IS_PRINT=0|PDF_FID=61560|PDF_NAME=1999-5.1.pdf|PDF_URI=public://sajournals/1999-5.1.pdf|PDF_SIZE=10848974|PDF_EXISTS=YES JOURNAL|NID=49241|STATUS=1|TITLE=Summer 1999 (Vol. 5 No. 2)|YEAR=1999|VOLUME=5|ISSUE=2|LABEL=Summer 1999 (Vol. 5 No. 2)|IS_PRINT=0|PDF_FID=61270|PDF_NAME=1999-5.2.pdf|PDF_URI=public://sajournals/1999-5.2.pdf|PDF_SIZE=12647752|PDF_EXISTS=YES JOURNAL|NID=49242|STATUS=1|TITLE=Fall 1999 (Vol. 5 No. 3)|YEAR=1999|VOLUME=5|ISSUE=3|LABEL=Fall 1999 (Vol. 5 No. 3)|IS_PRINT=0|PDF_FID=61272|PDF_NAME=1999-5.3.pdf|PDF_URI=public://sajournals/1999-5.3.pdf|PDF_SIZE=14582843|PDF_EXISTS=YES JOURNAL|NID=49243|STATUS=1|TITLE=Winter 1999 (Vol. 5 No. 4)|YEAR=1999|VOLUME=5|ISSUE=4|LABEL=Winter 1999 (Vol. 5 No. 4)|IS_PRINT=0|PDF_FID=61274|PDF_NAME=1999-5.4.pdf|PDF_URI=public://sajournals/1999-5.4.pdf|PDF_SIZE=19269394|PDF_EXISTS=YES JOURNAL|NID=49244|STATUS=1|TITLE=Spring 2000 (Vol. 6 No. 1)|YEAR=2000|VOLUME=6|ISSUE=1|LABEL=Spring 2000 (Vol. 6 No. 1)|IS_PRINT=0|PDF_FID=61561|PDF_NAME=2000-6.1.pdf|PDF_URI=public://sajournals/2000-6.1.pdf|PDF_SIZE=16901933|PDF_EXISTS=YES JOURNAL|NID=49245|STATUS=1|TITLE=Summer/Fall 2000 (Vol. 6 No. 2-3)|YEAR=2000|VOLUME=6|ISSUE=2|LABEL=Summer/Fall 2000 (Vol. 6 No. 2-3)|IS_PRINT=0|PDF_FID=61278|PDF_NAME=2000-6.2-6.3.pdf|PDF_URI=public://sajournals/2000-6.2-6.3.pdf|PDF_SIZE=22429231|PDF_EXISTS=YES JOURNAL|NID=49340|STATUS=1|TITLE=Fall 2000 (Vol. 6 No. 3)|YEAR=2000|VOLUME=6|ISSUE=3|LABEL=Fall 2000 (Vol. 6 No. 3)|IS_PRINT=0|PDF_FID=61599|PDF_NAME=2000-6.3.pdf|PDF_URI=public://sajournals/2000-6.3.pdf|PDF_SIZE=11228184|PDF_EXISTS=YES JOURNAL|NID=49246|STATUS=1|TITLE=Winter 2000 (Vol. 6 No. 4)|YEAR=2000|VOLUME=6|ISSUE=4|LABEL=Winter 2000 (Vol. 6 No. 4)|IS_PRINT=0|PDF_FID=61280|PDF_NAME=2000-6.4.pdf|PDF_URI=public://sajournals/2000-6.4.pdf|PDF_SIZE=17348795|PDF_EXISTS=YES JOURNAL|NID=49247|STATUS=1|TITLE=Spring 2001 (Vol. 7 No. 1)|YEAR=2001|VOLUME=7|ISSUE=1|LABEL=Spring 2001 (Vol. 7 No. 1)|IS_PRINT=0|PDF_FID=61562|PDF_NAME=2001-7.1.pdf|PDF_URI=public://sajournals/2001-7.1.pdf|PDF_SIZE=24596179|PDF_EXISTS=YES JOURNAL|NID=49248|STATUS=1|TITLE=Summer 2001 (Vol. 7 No. 2)|YEAR=2001|VOLUME=7|ISSUE=2|LABEL=Summer 2001 (Vol. 7 No. 2)|IS_PRINT=0|PDF_FID=61284|PDF_NAME=2001-7.2.pdf|PDF_URI=public://sajournals/2001-7.2.pdf|PDF_SIZE=23301947|PDF_EXISTS=YES JOURNAL|NID=49249|STATUS=1|TITLE=Fall 2001 (Vol. 7 No. 3)|YEAR=2001|VOLUME=7|ISSUE=3|LABEL=Fall 2001 (Vol. 7 No. 3)|IS_PRINT=0|PDF_FID=61286|PDF_NAME=2001-7.3.pdf|PDF_URI=public://sajournals/2001-7.3.pdf|PDF_SIZE=4783900|PDF_EXISTS=YES JOURNAL|NID=49250|STATUS=1|TITLE=Winter 2001 (Vol. 7 No. 4)|YEAR=2001|VOLUME=7|ISSUE=4|LABEL=Winter 2001 (Vol. 7 No. 4)|IS_PRINT=0|PDF_FID=61288|PDF_NAME=2001-7.4.pdf|PDF_URI=public://sajournals/2001-7.4.pdf|PDF_SIZE=7249575|PDF_EXISTS=YES JOURNAL|NID=49251|STATUS=1|TITLE=Spring 2002 (Vol. 8 No. 1)|YEAR=2002|VOLUME=8|ISSUE=1|LABEL=Spring 2002 (Vol. 8 No. 1)|IS_PRINT=0|PDF_FID=61563|PDF_NAME=2002-8.1.pdf|PDF_URI=public://sajournals/2002-8.1.pdf|PDF_SIZE=5311668|PDF_EXISTS=YES JOURNAL|NID=49252|STATUS=1|TITLE=Summer 2002 (Vol. 8 No. 2)|YEAR=2002|VOLUME=8|ISSUE=2|LABEL=Summer 2002 (Vol. 8 No. 2)|IS_PRINT=0|PDF_FID=61292|PDF_NAME=2002-8.2.pdf|PDF_URI=public://sajournals/2002-8.2.pdf|PDF_SIZE=12935158|PDF_EXISTS=YES JOURNAL|NID=49253|STATUS=1|TITLE=Spring 2003 (Vol. 9 No. 1)|YEAR=2003|VOLUME=9|ISSUE=1|LABEL=Spring 2003 (Vol. 9 No. 1)|IS_PRINT=0|PDF_FID=61564|PDF_NAME=2003-9.1.pdf|PDF_URI=public://sajournals/2003-9.1.pdf|PDF_SIZE=13398523|PDF_EXISTS=YES JOURNAL|NID=49337|STATUS=1|TITLE=Summer 2004 (Vol. 10 No. 2)|YEAR=2004|VOLUME=10|ISSUE=2|LABEL=Summer 2004 (Vol. 10 No. 2)|IS_PRINT=0|PDF_FID=61543|PDF_NAME=2004-10.2.pdf|PDF_URI=public://sajournals/2004-10.2.pdf|PDF_SIZE=9560374|PDF_EXISTS=YES JOURNAL|NID=49254|STATUS=1|TITLE=Fall 2004 (Vol. 10 No. 3)|YEAR=2004|VOLUME=10|ISSUE=3|LABEL=Fall 2004 (Vol. 10 No. 3)|IS_PRINT=0|PDF_FID=60244|PDF_NAME=2004-10.3.pdf|PDF_URI=public://sajournals/2004-10.3.pdf|PDF_SIZE=10952263|PDF_EXISTS=YES JOURNAL|NID=49255|STATUS=1|TITLE=Winter 2004 (Vol. 10 No. 4)|YEAR=2004|VOLUME=10|ISSUE=4|LABEL=Winter 2004 (Vol. 10 No. 4)|IS_PRINT=0|PDF_FID=61298|PDF_NAME=2004-10.4.pdf|PDF_URI=public://sajournals/2004-10.4.pdf|PDF_SIZE=16240862|PDF_EXISTS=YES JOURNAL|NID=49256|STATUS=1|TITLE=Spring 2005 (Vol. 11 No. 1)|YEAR=2005|VOLUME=11|ISSUE=1|LABEL=Spring 2005 (Vol. 11 No. 1)|IS_PRINT=0|PDF_FID=61565|PDF_NAME=2005-11.1.pdf|PDF_URI=public://sajournals/2005-11.1.pdf|PDF_SIZE=11283957|PDF_EXISTS=YES JOURNAL|NID=49257|STATUS=1|TITLE=Summer 2005 (Vol. 11 No. 2)|YEAR=2005|VOLUME=11|ISSUE=2|LABEL=Summer 2005 (Vol. 11 No. 2)|IS_PRINT=0|PDF_FID=61302|PDF_NAME=2005-11.2.pdf|PDF_URI=public://sajournals/2005-11.2.pdf|PDF_SIZE=12811140|PDF_EXISTS=YES JOURNAL|NID=49258|STATUS=1|TITLE=Fall 2005 (Vol. 11 No. 3)|YEAR=2005|VOLUME=11|ISSUE=3|LABEL=Fall 2005 (Vol. 11 No. 3)|IS_PRINT=0|PDF_FID=61304|PDF_NAME=2005-11.3.pdf|PDF_URI=public://sajournals/2005-11.3.pdf|PDF_SIZE=56820783|PDF_EXISTS=YES JOURNAL|NID=49339|STATUS=1|TITLE=Winter 2005 (Vol. 11 No. 4)|YEAR=2005|VOLUME=11|ISSUE=4|LABEL=Winter 2005 (Vol. 11 No. 4)|IS_PRINT=0|PDF_FID=61550|PDF_NAME=2005-11.4.pdf|PDF_URI=public://sajournals/2005-11.4.pdf|PDF_SIZE=11196725|PDF_EXISTS=YES JOURNAL|NID=49259|STATUS=1|TITLE=Spring 2006 (Vol. 12 No. 1)|YEAR=2006|VOLUME=12|ISSUE=1|LABEL=Spring 2006 (Vol. 12 No. 1)|IS_PRINT=0|PDF_FID=61566|PDF_NAME=2006-12.1.pdf|PDF_URI=public://sajournals/2006-12.1.pdf|PDF_SIZE=14776950|PDF_EXISTS=YES JOURNAL|NID=49260|STATUS=1|TITLE=Summer 2006 (Vol. 12 No. 2)|YEAR=2006|VOLUME=12|ISSUE=2|LABEL=Summer 2006 (Vol. 12 No. 2)|IS_PRINT=0|PDF_FID=61308|PDF_NAME=2006-12.2.pdf|PDF_URI=public://sajournals/2006-12.2.pdf|PDF_SIZE=18202547|PDF_EXISTS=YES JOURNAL|NID=49261|STATUS=1|TITLE=Fall 2006 (Vol. 12 No. 3)|YEAR=2006|VOLUME=12|ISSUE=3|LABEL=Fall 2006 (Vol. 12 No. 3)|IS_PRINT=0|PDF_FID=61310|PDF_NAME=2006-12.3.pdf|PDF_URI=public://sajournals/2006-12.3.pdf|PDF_SIZE=23297649|PDF_EXISTS=YES JOURNAL|NID=49262|STATUS=1|TITLE=Winter 2006 (Vol. 12 No. 4)|YEAR=2006|VOLUME=12|ISSUE=4|LABEL=Winter 2006 (Vol. 12 No. 4)|IS_PRINT=0|PDF_FID=61312|PDF_NAME=2006-12.4.pdf|PDF_URI=public://sajournals/2006-12.4.pdf|PDF_SIZE=24577576|PDF_EXISTS=YES JOURNAL|NID=49263|STATUS=1|TITLE=Spring 2007 (Vol. 13 No. 1)|YEAR=2007|VOLUME=13|ISSUE=1|LABEL=Spring 2007 (Vol. 13 No. 1)|IS_PRINT=0|PDF_FID=61567|PDF_NAME=2007-13.1.pdf|PDF_URI=public://sajournals/2007-13.1.pdf|PDF_SIZE=13317787|PDF_EXISTS=YES JOURNAL|NID=49264|STATUS=1|TITLE=Summer 2007 (Vol. 13 No. 2)|YEAR=2007|VOLUME=13|ISSUE=2|LABEL=Summer 2007 (Vol. 13 No. 2)|IS_PRINT=0|PDF_FID=61316|PDF_NAME=2007-13.2.pdf|PDF_URI=public://sajournals/2007-13.2.pdf|PDF_SIZE=15666029|PDF_EXISTS=YES JOURNAL|NID=49265|STATUS=1|TITLE=Fall 2007 (Vol. 13 No. 3)|YEAR=2007|VOLUME=13|ISSUE=3|LABEL=Fall 2007 (Vol. 13 No. 3)|IS_PRINT=0|PDF_FID=61318|PDF_NAME=2007-13.3.pdf|PDF_URI=public://sajournals/2007-13.3.pdf|PDF_SIZE=17406048|PDF_EXISTS=YES JOURNAL|NID=49338|STATUS=1|TITLE=Winter 2007 (Vol. 13 No. 4)|YEAR=2007|VOLUME=13|ISSUE=4|LABEL=Winter 2007 (Vol. 13 No. 4)|IS_PRINT=0|PDF_FID=61545|PDF_NAME=2007-13.4.pdf|PDF_URI=public://sajournals/2007-13.4.pdf|PDF_SIZE=6705762|PDF_EXISTS=YES JOURNAL|NID=49266|STATUS=1|TITLE=Spring 2008 (Vol. 14 No. 1)|YEAR=2008|VOLUME=14|ISSUE=1|LABEL=Spring 2008 (Vol. 14 No. 1)|IS_PRINT=0|PDF_FID=61568|PDF_NAME=2008-14.1.pdf|PDF_URI=public://sajournals/2008-14.1.pdf|PDF_SIZE=16883276|PDF_EXISTS=YES JOURNAL|NID=49267|STATUS=1|TITLE=Summer 2008 (Vol. 14 No. 2)|YEAR=2008|VOLUME=14|ISSUE=2|LABEL=Summer 2008 (Vol. 14 No. 2)|IS_PRINT=0|PDF_FID=61322|PDF_NAME=2008-14.2.pdf|PDF_URI=public://sajournals/2008-14.2.pdf|PDF_SIZE=11481735|PDF_EXISTS=YES JOURNAL|NID=49268|STATUS=1|TITLE=Fall 2008 (Vol. 14 No. 3)|YEAR=2008|VOLUME=14|ISSUE=3|LABEL=Fall 2008 (Vol. 14 No. 3)|IS_PRINT=0|PDF_FID=61324|PDF_NAME=2008-14.3.pdf|PDF_URI=public://sajournals/2008-14.3.pdf|PDF_SIZE=15300029|PDF_EXISTS=YES JOURNAL|NID=49269|STATUS=1|TITLE=Spring 2009 (Vol. 15 No. 1)|YEAR=2009|VOLUME=15|ISSUE=1|LABEL=Spring 2009 (Vol. 15 No. 1)|IS_PRINT=0|PDF_FID=61569|PDF_NAME=2009-15.1.pdf|PDF_URI=public://sajournals/2009-15.1.pdf|PDF_SIZE=9524247|PDF_EXISTS=YES JOURNAL|NID=49270|STATUS=1|TITLE=Summer 2009 (Vol. 15 No. 2)|YEAR=2009|VOLUME=15|ISSUE=2|LABEL=Summer 2009 (Vol. 15 No. 2)|IS_PRINT=0|PDF_FID=61328|PDF_NAME=2009-15.2.pdf|PDF_URI=public://sajournals/2009-15.2.pdf|PDF_SIZE=11828321|PDF_EXISTS=YES JOURNAL|NID=49271|STATUS=1|TITLE=Fall 2009 (Vol. 15 No. 3)|YEAR=2009|VOLUME=15|ISSUE=3|LABEL=Fall 2009 (Vol. 15 No. 3)|IS_PRINT=0|PDF_FID=61330|PDF_NAME=2009-15.3.pdf|PDF_URI=public://sajournals/2009-15.3.pdf|PDF_SIZE=12405863|PDF_EXISTS=YES JOURNAL|NID=49272|STATUS=1|TITLE=Spring 2010 (Vol. 16 No. 1)|YEAR=2010|VOLUME=16|ISSUE=1|LABEL=Spring 2010 (Vol. 16 No. 1)|IS_PRINT=0|PDF_FID=61570|PDF_NAME=2010-16.1.pdf|PDF_URI=public://sajournals/2010-16.1.pdf|PDF_SIZE=11231218|PDF_EXISTS=YES JOURNAL|NID=49273|STATUS=1|TITLE=Summer 2010 (Vol. 16 No. 2)|YEAR=2010|VOLUME=16|ISSUE=2|LABEL=Summer 2010 (Vol. 16 No. 2)|IS_PRINT=0|PDF_FID=61334|PDF_NAME=2010-16.2.pdf|PDF_URI=public://sajournals/2010-16.2.pdf|PDF_SIZE=18265766|PDF_EXISTS=YES JOURNAL|NID=49274|STATUS=1|TITLE=Fall 2010 (Vol. 16 No. 3)|YEAR=2010|VOLUME=16|ISSUE=3|LABEL=Fall 2010 (Vol. 16 No. 3)|IS_PRINT=0|PDF_FID=61336|PDF_NAME=2010-16.3.pdf|PDF_URI=public://sajournals/2010-16.3.pdf|PDF_SIZE=16704112|PDF_EXISTS=YES JOURNAL|NID=49275|STATUS=1|TITLE=Spring 2011 (Vol. 17 No. 1)|YEAR=2011|VOLUME=17|ISSUE=1|LABEL=Spring 2011 (Vol. 17 No. 1)|IS_PRINT=0|PDF_FID=61571|PDF_NAME=2011-17.1.pdf|PDF_URI=public://sajournals/2011-17.1.pdf|PDF_SIZE=17362666|PDF_EXISTS=YES JOURNAL|NID=49276|STATUS=1|TITLE=Summer 2011 (Vol. 17 No. 2)|YEAR=2011|VOLUME=17|ISSUE=2|LABEL=Summer 2011 (Vol. 17 No. 2)|IS_PRINT=0|PDF_FID=61340|PDF_NAME=2011-17.2.pdf|PDF_URI=public://sajournals/2011-17.2.pdf|PDF_SIZE=56454094|PDF_EXISTS=YES JOURNAL|NID=49277|STATUS=1|TITLE=Fall 2011 (Vol. 17 No. 3)|YEAR=2011|VOLUME=17|ISSUE=3|LABEL=Fall 2011 (Vol. 17 No. 3)|IS_PRINT=0|PDF_FID=61342|PDF_NAME=2011-17.3.pdf|PDF_URI=public://sajournals/2011-17.3.pdf|PDF_SIZE=16653507|PDF_EXISTS=YES JOURNAL|NID=49278|STATUS=1|TITLE=Spring 2012 (Vol. 18 No. 1)|YEAR=2012|VOLUME=18|ISSUE=1|LABEL=Spring 2012 (Vol. 18 No. 1)|IS_PRINT=0|PDF_FID=61572|PDF_NAME=2012-18.1.pdf|PDF_URI=public://sajournals/2012-18.1.pdf|PDF_SIZE=57175216|PDF_EXISTS=YES JOURNAL|NID=49279|STATUS=1|TITLE=Summer 2012 (Vol. 18 No. 2)|YEAR=2012|VOLUME=18|ISSUE=2|LABEL=Summer 2012 (Vol. 18 No. 2)|IS_PRINT=0|PDF_FID=61348|PDF_NAME=2012-18-2.pdf|PDF_URI=public://sajournals/2012-18.2.pdf|PDF_SIZE=5864992|PDF_EXISTS=YES JOURNAL|NID=49280|STATUS=1|TITLE=Fall 2012 (Vol. 18 No. 3)|YEAR=2012|VOLUME=18|ISSUE=3|LABEL=Fall 2012 (Vol. 18 No. 3)|IS_PRINT=0|PDF_FID=61350|PDF_NAME=2012-18-3.pdf|PDF_URI=public://sajournals/2012-18.3.pdf|PDF_SIZE=48811592|PDF_EXISTS=YES|SPREADS_FID=61554|SPREADS_NAME=2012-18.3-spreads_1.pdf|SPREADS_URI=public://sajournals/2012-18.3-spreads_1.pdf|SPREADS_SIZE=32914503|SPREADS_EXISTS=YES JOURNAL|NID=49281|STATUS=1|TITLE=Winter 2012 (Vol. 18 No. 4)|YEAR=2012|VOLUME=18|ISSUE=4|LABEL=Winter 2012 (Vol. 18 No. 4)|IS_PRINT=0|PDF_FID=61352|PDF_NAME=2012-18-4.pdf|PDF_URI=public://sajournals/2012-18.4.pdf|PDF_SIZE=14964149|PDF_EXISTS=YES JOURNAL|NID=49282|STATUS=1|TITLE=Spring 2013 (Vol. 19 No. 1)|YEAR=2013|VOLUME=19|ISSUE=1|LABEL=Spring 2013 (Vol. 19 No. 1)|IS_PRINT=0|PDF_FID=61573|PDF_NAME=2013-19.1.pdf|PDF_URI=public://sajournals/2013-19.1.pdf|PDF_SIZE=19303553|PDF_EXISTS=YES JOURNAL|NID=49283|STATUS=1|TITLE=Winter 2013 (Vol. 19 No. 4)|YEAR=2013|VOLUME=19|ISSUE=4|LABEL=Winter 2013 (Vol. 19 No. 4)|IS_PRINT=0|PDF_FID=61364|PDF_NAME=2013-19-4.pdf|PDF_URI=public://sajournals/2013-19.4.pdf|PDF_SIZE=61812922|PDF_EXISTS=YES|SPREADS_FID=61586|SPREADS_NAME=2013-19.4-spreads.pdf|SPREADS_URI=public://sajournals/2013-19.4-spreads.pdf|SPREADS_SIZE=24144837|SPREADS_EXISTS=YES JOURNAL|NID=49284|STATUS=1|TITLE=Spring 2014 (Vol. 20 No. 1)|YEAR=2014|VOLUME=20|ISSUE=1|LABEL=Spring 2014 (Vol. 20 No. 1)|IS_PRINT=0|PDF_FID=61574|PDF_NAME=2014-20.1.pdf|PDF_URI=public://sajournals/2014-20.1.pdf|PDF_SIZE=5093757|PDF_EXISTS=YES JOURNAL|NID=49285|STATUS=1|TITLE=Summer 2014 (Vol. 20 No. 2)|YEAR=2014|VOLUME=20|ISSUE=2|LABEL=Summer 2014 (Vol. 20 No. 2)|IS_PRINT=0|PDF_FID=61378|PDF_NAME=2014-20.2.pdf|PDF_URI=public://sajournals/2014-20.2.pdf|PDF_SIZE=6018901|PDF_EXISTS=YES JOURNAL|NID=49286|STATUS=1|TITLE=Fall 2014 (Vol. 20 No. 3)|YEAR=2014|VOLUME=20|ISSUE=3|LABEL=Fall 2014 (Vol. 20 No. 3)|IS_PRINT=0|PDF_FID=61372|PDF_NAME=2014-20-3.pdf|PDF_URI=public://sajournals/2014-20.3.pdf|PDF_SIZE=20957502|PDF_EXISTS=YES JOURNAL|NID=49287|STATUS=1|TITLE=Winter 2014 (Vol. 20 No. 4)|YEAR=2014|VOLUME=20|ISSUE=4|LABEL=Winter 2014 (Vol. 20 No. 4)|IS_PRINT=0|PDF_FID=61374|PDF_NAME=2014-20-4.pdf|PDF_URI=public://sajournals/2014-20.4.pdf|PDF_SIZE=8631547|PDF_EXISTS=YES JOURNAL|NID=49288|STATUS=1|TITLE=Spring 2015 (Vol. 21 No. 1)|YEAR=2015|VOLUME=21|ISSUE=1|LABEL=Spring 2015 (Vol. 21 No. 1)|IS_PRINT=0|PDF_FID=61575|PDF_NAME=2015-21.1.pdf|PDF_URI=public://sajournals/2015-21.1.pdf|PDF_SIZE=5078507|PDF_EXISTS=YES JOURNAL|NID=49289|STATUS=1|TITLE=Fall 2015 (Vol. 21 No. 3)|YEAR=2015|VOLUME=21|ISSUE=3|LABEL=Fall 2015 (Vol. 21 No. 3)|IS_PRINT=0|PDF_FID=61386|PDF_NAME=2015-21-3.pdf|PDF_URI=public://sajournals/2015-21.3.pdf|PDF_SIZE=3320899|PDF_EXISTS=YES JOURNAL|NID=49290|STATUS=1|TITLE=Winter 2015 (Vol. 21 No. 4)|YEAR=2015|VOLUME=21|ISSUE=4|LABEL=Winter 2015 (Vol. 21 No. 4)|IS_PRINT=0|PDF_FID=61388|PDF_NAME=2015-21-4.pdf|PDF_URI=public://sajournals/2015-21.4.pdf|PDF_SIZE=6517379|PDF_EXISTS=YES JOURNAL|NID=49291|STATUS=1|TITLE=Spring 2016 (Vol. 22 No. 1)|YEAR=2016|VOLUME=22|ISSUE=1|LABEL=Spring 2016 (Vol. 22 No. 1)|IS_PRINT=0|PDF_FID=61576|PDF_NAME=2016-22.1.pdf|PDF_URI=public://sajournals/2016-22.1.pdf|PDF_SIZE=3313218|PDF_EXISTS=YES JOURNAL|NID=49292|STATUS=1|TITLE=Summer 2016 (Vol. 22 No. 2)|YEAR=2016|VOLUME=22|ISSUE=2|LABEL=Summer 2016 (Vol. 22 No. 2)|IS_PRINT=0|PDF_FID=61396|PDF_NAME=2016-22-2.pdf|PDF_URI=public://sajournals/2016-22.2.pdf|PDF_SIZE=3785913|PDF_EXISTS=YES JOURNAL|NID=49293|STATUS=1|TITLE=Fall 2016 (Vol. 22 No. 3)|YEAR=2016|VOLUME=22|ISSUE=3|LABEL=Fall 2016 (Vol. 22 No. 3)|IS_PRINT=0|PDF_FID=61398|PDF_NAME=2016-22-3.pdf|PDF_URI=public://sajournals/2016-22.3.pdf|PDF_SIZE=2910626|PDF_EXISTS=YES JOURNAL|NID=49294|STATUS=1|TITLE=Winter 2016 (Vol. 22 No. 4)|YEAR=2016|VOLUME=22|ISSUE=4|LABEL=Winter 2016 (Vol. 22 No. 4)|IS_PRINT=0|PDF_FID=61400|PDF_NAME=2016-22-4.pdf|PDF_URI=public://sajournals/2016-22.4.pdf|PDF_SIZE=9656118|PDF_EXISTS=YES JOURNAL|NID=49295|STATUS=1|TITLE=Spring 2017 (Vol. 23 No. 1)|YEAR=2017|VOLUME=23|ISSUE=1|LABEL=Spring 2017 (Vol. 23 No. 1)|IS_PRINT=0|PDF_FID=61577|PDF_NAME=2017-23.1.pdf|PDF_URI=public://sajournals/2017-23.1.pdf|PDF_SIZE=3201177|PDF_EXISTS=YES JOURNAL|NID=49296|STATUS=1|TITLE=Summer 2017 (Vol. 23 No. 2)|YEAR=2017|VOLUME=23|ISSUE=2|LABEL=Summer 2017 (Vol. 23 No. 2)|IS_PRINT=0|PDF_FID=61412|PDF_NAME=2017-23-2.pdf|PDF_URI=public://sajournals/2017-23.2.pdf|PDF_SIZE=3229248|PDF_EXISTS=YES JOURNAL|NID=49297|STATUS=1|TITLE=Winter 2017 (Vol. 23 No. 4)|YEAR=2017|VOLUME=23|ISSUE=4|LABEL=Winter 2017 (Vol. 23 No. 4)|IS_PRINT=0|PDF_FID=61414|PDF_NAME=2017-23-4.pdf|PDF_URI=public://sajournals/2017-23.4.pdf|PDF_SIZE=39007501|PDF_EXISTS=YES JOURNAL|NID=49298|STATUS=1|TITLE=Spring 2018 (Vol. 24 No. 1)|YEAR=2018|VOLUME=24|ISSUE=1|LABEL=Spring 2018 (Vol. 24 No. 1)|IS_PRINT=0|PDF_FID=61578|PDF_NAME=2018-24.1.pdf|PDF_URI=public://sajournals/2018-24.1.pdf|PDF_SIZE=9932843|PDF_EXISTS=YES JOURNAL|NID=49299|STATUS=1|TITLE=Summer 2018 (Vol. 24 No. 2)|YEAR=2018|VOLUME=24|ISSUE=2|LABEL=Summer 2018 (Vol. 24 No. 2)|IS_PRINT=0|PDF_FID=61418|PDF_NAME=2018-24-2.pdf|PDF_URI=public://sajournals/2018-24.2.pdf|PDF_SIZE=6380513|PDF_EXISTS=YES JOURNAL|NID=49300|STATUS=1|TITLE=Fall 2018 (Vol. 24 No. 3)|YEAR=2018|VOLUME=24|ISSUE=3|LABEL=Fall 2018 (Vol. 24 No. 3)|IS_PRINT=0|PDF_FID=61420|PDF_NAME=2018-24-3.pdf|PDF_URI=public://sajournals/2018-24.3.pdf|PDF_SIZE=7449584|PDF_EXISTS=YES JOURNAL|NID=49301|STATUS=1|TITLE=Winter 2018 (Vol. 24 No. 4)|YEAR=2018|VOLUME=24|ISSUE=4|LABEL=Winter 2018 (Vol. 24 No. 4)|IS_PRINT=0|PDF_FID=61422|PDF_NAME=2018-24-4.pdf|PDF_URI=public://sajournals/2018-24.4.pdf|PDF_SIZE=10092606|PDF_EXISTS=YES JOURNAL|NID=49302|STATUS=1|TITLE=Spring 2019 (Vol. 25 No. 1)|YEAR=2019|VOLUME=25|ISSUE=1|LABEL=Spring 2019 (Vol. 25 No. 1)|IS_PRINT=0|PDF_FID=61579|PDF_NAME=2019-25.1.pdf|PDF_URI=public://sajournals/2019-25.1.pdf|PDF_SIZE=8190938|PDF_EXISTS=YES JOURNAL|NID=49303|STATUS=1|TITLE=Summer 2019 (Vol. 25 No. 2)|YEAR=2019|VOLUME=25|ISSUE=2|LABEL=Summer 2019 (Vol. 25 No. 2)|IS_PRINT=0|PDF_FID=61426|PDF_NAME=2019-25-2.pdf|PDF_URI=public://sajournals/2019-25.2.pdf|PDF_SIZE=8028879|PDF_EXISTS=YES JOURNAL|NID=49304|STATUS=1|TITLE=Fall 2019 (Vol. 25 No. 3)|YEAR=2019|VOLUME=25|ISSUE=3|LABEL=Fall 2019 (Vol. 25 No. 3)|IS_PRINT=0|PDF_FID=61428|PDF_NAME=2019-25-3.pdf|PDF_URI=public://sajournals/2019-25.3.pdf|PDF_SIZE=11649340|PDF_EXISTS=YES JOURNAL|NID=49305|STATUS=1|TITLE=Winter 2019 (Vol. 25 No. 4)|YEAR=2019|VOLUME=25|ISSUE=4|LABEL=Winter 2019 (Vol. 25 No. 4)|IS_PRINT=0|PDF_FID=61430|PDF_NAME=2019-25-4 edit.pdf|PDF_URI=public://sajournals/2019-25.4.pdf|PDF_SIZE=11139693|PDF_EXISTS=YES JOURNAL|NID=49306|STATUS=1|TITLE=Spring 2020 (Vol. 26 No. 1)|YEAR=2020|VOLUME=26|ISSUE=1|LABEL=Spring 2020 (Vol. 26 No. 1)|IS_PRINT=0|PDF_FID=61580|PDF_NAME=2020-26.1.pdf|PDF_URI=public://sajournals/2020-26.1.pdf|PDF_SIZE=9707359|PDF_EXISTS=YES JOURNAL|NID=49307|STATUS=1|TITLE=Summer 2020 (Vol. 26 No. 2)|YEAR=2020|VOLUME=26|ISSUE=2|LABEL=Summer 2020 (Vol. 26 No. 2)|IS_PRINT=0|PDF_FID=61434|PDF_NAME=2020-26-2.pdf|PDF_URI=public://sajournals/2020-26.2.pdf|PDF_SIZE=9468834|PDF_EXISTS=YES JOURNAL|NID=49308|STATUS=1|TITLE=Fall 2020 (Vol. 26 No. 3)|YEAR=2020|VOLUME=26|ISSUE=3|LABEL=Fall 2020 (Vol. 26 No. 3)|IS_PRINT=0|PDF_FID=61436|PDF_NAME=2020-26-3.pdf|PDF_URI=public://sajournals/2020-26.3.pdf|PDF_SIZE=17125900|PDF_EXISTS=YES JOURNAL|NID=49309|STATUS=1|TITLE=Winter 2020 (Vol. 26 No. 4)|YEAR=2020|VOLUME=26|ISSUE=4|LABEL=Winter 2020 (Vol. 26 No. 4)|IS_PRINT=0|PDF_FID=61438|PDF_NAME=2020-26-4.pdf|PDF_URI=public://sajournals/2020-26.4.pdf|PDF_SIZE=14781097|PDF_EXISTS=YES JOURNAL|NID=49310|STATUS=1|TITLE=Spring 2021 (Vol. 27 No. 1)|YEAR=2021|VOLUME=27|ISSUE=1|LABEL=Spring 2021 (Vol. 27 No. 1)|IS_PRINT=0|PDF_FID=61581|PDF_NAME=2021-27.1.pdf|PDF_URI=public://sajournals/2021-27.1.pdf|PDF_SIZE=13172179|PDF_EXISTS=YES JOURNAL|NID=49311|STATUS=1|TITLE=Summer 2021 (Vol. 27 No. 2)|YEAR=2021|VOLUME=27|ISSUE=2|LABEL=Summer 2021 (Vol. 27 No. 2)|IS_PRINT=0|PDF_FID=61442|PDF_NAME=2021-27-2.pdf|PDF_URI=public://sajournals/2021-27.2.pdf|PDF_SIZE=12801658|PDF_EXISTS=YES JOURNAL|NID=49312|STATUS=1|TITLE=Fall 2021 (Vol. 27 No. 3)|YEAR=2021|VOLUME=27|ISSUE=3|LABEL=Fall 2021 (Vol. 27 No. 3)|IS_PRINT=0|PDF_FID=61444|PDF_NAME=2021-27-3.pdf|PDF_URI=public://sajournals/2021-27.3.pdf|PDF_SIZE=12448592|PDF_EXISTS=YES JOURNAL|NID=49313|STATUS=1|TITLE=Winter 2021 (Vol. 27 No. 4)|YEAR=2021|VOLUME=27|ISSUE=4|LABEL=Winter 2021 (Vol. 27 No. 4)|IS_PRINT=0|PDF_FID=61446|PDF_NAME=2021-27-4.pdf|PDF_URI=public://sajournals/2021-27.4.pdf|PDF_SIZE=13916430|PDF_EXISTS=YES JOURNAL|NID=49314|STATUS=1|TITLE=Spring 2022 (Vol. 28 No. 1)|YEAR=2022|VOLUME=28|ISSUE=1|LABEL=Spring 2022 (Vol. 28 No. 1)|IS_PRINT=0|PDF_FID=61582|PDF_NAME=2022-28.1.pdf|PDF_URI=public://sajournals/2022-28.1.pdf|PDF_SIZE=16517217|PDF_EXISTS=YES JOURNAL|NID=49315|STATUS=1|TITLE=Summer 2022 (Vol. 28 No. 2)|YEAR=2022|VOLUME=28|ISSUE=2|LABEL=Summer 2022 (Vol. 28 No. 2)|IS_PRINT=0|PDF_FID=61450|PDF_NAME=2022 28-2.pdf|PDF_URI=public://sajournals/2022-28.2.pdf|PDF_SIZE=16086267|PDF_EXISTS=YES JOURNAL|NID=49316|STATUS=1|TITLE=Fall 2022 (Vol. 28 No. 3)|YEAR=2022|VOLUME=28|ISSUE=3|LABEL=Fall 2022 (Vol. 28 No. 3)|IS_PRINT=0|PDF_FID=61452|PDF_NAME=2022 28-3.pdf|PDF_URI=public://sajournals/2022-28.3.pdf|PDF_SIZE=21534552|PDF_EXISTS=YES JOURNAL|NID=49317|STATUS=1|TITLE=Winter 2022 (Vol. 28 No. 4)|YEAR=2022|VOLUME=28|ISSUE=4|LABEL=Winter 2022 (Vol. 28 No. 4)|IS_PRINT=0|PDF_FID=61454|PDF_NAME=2022 28-4 Spreads.pdf|PDF_URI=public://sajournals/2022-28.4.pdf|PDF_SIZE=24616701|PDF_EXISTS=YES|SPREADS_FID=61587|SPREADS_NAME=2022-28.4-spreads.pdf|SPREADS_URI=public://sajournals/2022-28.4-spreads.pdf|SPREADS_SIZE=24616701|SPREADS_EXISTS=YES JOURNAL|NID=49318|STATUS=1|TITLE=Spring 2023 (Vol. 29 No. 1)|YEAR=2023|VOLUME=29|ISSUE=1|LABEL=Spring 2023 (Vol. 29 No. 1)|IS_PRINT=0|PDF_FID=61583|PDF_NAME=2023-29.1.pdf|PDF_URI=public://sajournals/2023-29.1.pdf|PDF_SIZE=22664721|PDF_EXISTS=YES|SPREADS_FID=61588|SPREADS_NAME=2023-29.1-spreads.pdf|SPREADS_URI=public://sajournals/2023-29.1-spreads.pdf|SPREADS_SIZE=22650140|SPREADS_EXISTS=YES JOURNAL|NID=49319|STATUS=1|TITLE=Summer 2023 (Vol. 29 No. 2)|YEAR=2023|VOLUME=29|ISSUE=2|LABEL=Summer 2023 (Vol. 29 No. 2)|IS_PRINT=0|PDF_FID=61460|PDF_NAME=2023 29-2 Spreads.pdf|PDF_URI=public://sajournals/2023-29.2.pdf|PDF_SIZE=20834962|PDF_EXISTS=YES|SPREADS_FID=61589|SPREADS_NAME=2023-29.2-spreads.pdf|SPREADS_URI=public://sajournals/2023-29.2-spreads.pdf|SPREADS_SIZE=20834962|SPREADS_EXISTS=YES JOURNAL|NID=49320|STATUS=1|TITLE=Fall 2023 (Vol. 29 No. 3)|YEAR=2023|VOLUME=29|ISSUE=3|LABEL=Fall 2023 (Vol. 29 No. 3)|IS_PRINT=0|PDF_FID=61463|PDF_NAME=2023 29-3 spreads.pdf|PDF_URI=public://sajournals/2023-29.3.pdf|PDF_SIZE=19183771|PDF_EXISTS=YES|SPREADS_FID=61590|SPREADS_NAME=2023-29.3-spreads.pdf|SPREADS_URI=public://sajournals/2023-29.3-spreads.pdf|SPREADS_SIZE=19183771|SPREADS_EXISTS=YES JOURNAL|NID=49321|STATUS=1|TITLE=Winter 2023 (Vol. 29 No. 4)|YEAR=2023|VOLUME=29|ISSUE=4|LABEL=Winter 2023 (Vol. 29 No. 4)|IS_PRINT=0|PDF_FID=61466|PDF_NAME=2023 29-4 spreads.pdf|PDF_URI=public://sajournals/2023-29.4.pdf|PDF_SIZE=28018356|PDF_EXISTS=YES|SPREADS_FID=61591|SPREADS_NAME=2023-29.4-spreads.pdf|SPREADS_URI=public://sajournals/2023-29.4-spreads.pdf|SPREADS_SIZE=28018356|SPREADS_EXISTS=YES JOURNAL|NID=49322|STATUS=1|TITLE=Spring 2024 (Vol. 30 No. 1)|YEAR=2024|VOLUME=30|ISSUE=1|LABEL=Spring 2024 (Vol. 30 No. 1)|IS_PRINT=0|PDF_FID=61584|PDF_NAME=2024-30.1.pdf|PDF_URI=public://sajournals/2024-30.1.pdf|PDF_SIZE=21907422|PDF_EXISTS=YES|SPREADS_FID=61592|SPREADS_NAME=2024-30.1-spreads.pdf|SPREADS_URI=public://sajournals/2024-30.1-spreads.pdf|SPREADS_SIZE=21891496|SPREADS_EXISTS=YES JOURNAL|NID=49323|STATUS=1|TITLE=Summer 2024 (Vol. 30 No. 2)|YEAR=2024|VOLUME=30|ISSUE=2|LABEL=Summer 2024 (Vol. 30 No. 2)|IS_PRINT=0|PDF_FID=61472|PDF_NAME=2024 30-2 Spreads.pdf|PDF_URI=public://sajournals/2024-30.2.pdf|PDF_SIZE=22821034|PDF_EXISTS=YES|SPREADS_FID=61593|SPREADS_NAME=2024-30.2-spreads.pdf|SPREADS_URI=public://sajournals/2024-30.2-spreads.pdf|SPREADS_SIZE=22821034|SPREADS_EXISTS=YES JOURNAL|NID=49324|STATUS=1|TITLE=Fall 2024 (Vol. 30 No. 3)|YEAR=2024|VOLUME=30|ISSUE=3|LABEL=Fall 2024 (Vol. 30 No. 3)|IS_PRINT=0|PDF_FID=61475|PDF_NAME=2024 30-3 Spreads.pdf|PDF_URI=public://sajournals/2024-30.3.pdf|PDF_SIZE=22658963|PDF_EXISTS=YES|SPREADS_FID=61594|SPREADS_NAME=2024-30.3-spreads.pdf|SPREADS_URI=public://sajournals/2024-30.3-spreads.pdf|SPREADS_SIZE=22658963|SPREADS_EXISTS=YES JOURNAL|NID=49325|STATUS=1|TITLE=Winter 2024 (Vol. 30 No. 4)|YEAR=2024|VOLUME=30|ISSUE=4|LABEL=Winter 2024 (Vol. 30 No. 4)|IS_PRINT=0|PDF_FID=61478|PDF_NAME=2024 30-4 Spreads.pdf|PDF_URI=public://sajournals/2024-30.4.pdf|PDF_SIZE=20338903|PDF_EXISTS=YES|SPREADS_FID=61595|SPREADS_NAME=2024-30.4-spreads.pdf|SPREADS_URI=public://sajournals/2024-30.4-spreads.pdf|SPREADS_SIZE=20338903|SPREADS_EXISTS=YES JOURNAL|NID=49326|STATUS=1|TITLE=Spring 2025 (Vol. 31 No. 1)|YEAR=2025|VOLUME=31|ISSUE=1|LABEL=Spring 2025 (Vol. 31 No. 1)|IS_PRINT=0|PDF_FID=61585|PDF_NAME=2025-31.1.pdf|PDF_URI=public://sajournals/2025-31.1.pdf|PDF_SIZE=16861439|PDF_EXISTS=YES|SPREADS_FID=61596|SPREADS_NAME=2025-31.1-spreads.pdf|SPREADS_URI=public://sajournals/2025-31.1-spreads.pdf|SPREADS_SIZE=16826849|SPREADS_EXISTS=YES JOURNAL|NID=49327|STATUS=1|TITLE=Winter 2025 (Vol. 31 No. 4)|YEAR=2025|VOLUME=31|ISSUE=4|LABEL=Winter 2025 (Vol. 31 No. 4)|IS_PRINT=0|PDF_FID=61484|PDF_NAME=2025 31-4 Spreads.pdf|PDF_URI=public://sajournals/2025-31.4.pdf|PDF_SIZE=11337728|PDF_EXISTS=YES|SPREADS_FID=61597|SPREADS_NAME=2025-31.4-spreads.pdf|SPREADS_URI=public://sajournals/2025-31.4-spreads.pdf|SPREADS_SIZE=25287675|SPREADS_EXISTS=YES JOURNAL|NID=49341|STATUS=1|TITLE=Spring 2026 (Vol. 32 No. 1)|YEAR=2026|VOLUME=32|ISSUE=1|LABEL=Spring 2026 (Vol. 32 No. 1)|IS_PRINT=0|SPREADS_FID=61601|SPREADS_NAME=Skyhawk-Vol32-1-spreads.pdf|SPREADS_URI=private://sajournals/Skyhawk-Vol32-1-spreads.pdf|SPREADS_SIZE=22645922|SPREADS_EXISTS=YES ===== CURRENT IDENTITY COLLISIONS ===== IDENTITY_COLLISION_GROUPS=0 ===== FILE REFERENCE REUSE ===== FILE_REUSE_GROUPS=0 ===== STORAGE SCHEME COUNTS ===== SCHEME=private|COUNT=1 SCHEME=public|COUNT=117 ===== EXACT DUPLICATE FILE CANDIDATES ===== EXACT_DUPLICATE_SHA256=cfd469ec173a133f6ef641a21e1124b0d56835f24577bbdb4d1b8d44b58f36dd FID=61454|SIZE=24616701|NAME=2022 28-4 Spreads.pdf|URI=public://sajournals/2022-28.4.pdf FID=61587|SIZE=24616701|NAME=2022-28.4-spreads.pdf|URI=public://sajournals/2022-28.4-spreads.pdf EXACT_DUPLICATE_SHA256=53733fdb8e835ec36ff14704ed03581eda9c05ba1f632cd99015bc6be6fd2ca5 FID=61460|SIZE=20834962|NAME=2023 29-2 Spreads.pdf|URI=public://sajournals/2023-29.2.pdf FID=61589|SIZE=20834962|NAME=2023-29.2-spreads.pdf|URI=public://sajournals/2023-29.2-spreads.pdf EXACT_DUPLICATE_SHA256=16339baae6b81e8eff2f940aad99df0069aacbe9228bb83cbb53ac1ec0e9a1fc FID=61463|SIZE=19183771|NAME=2023 29-3 spreads.pdf|URI=public://sajournals/2023-29.3.pdf FID=61590|SIZE=19183771|NAME=2023-29.3-spreads.pdf|URI=public://sajournals/2023-29.3-spreads.pdf EXACT_DUPLICATE_SHA256=a419d3b9c08db1ef9be017dfb59a43b1e57ce704f9dba81944dd7f04fa1ddccd FID=61466|SIZE=28018356|NAME=2023 29-4 spreads.pdf|URI=public://sajournals/2023-29.4.pdf FID=61591|SIZE=28018356|NAME=2023-29.4-spreads.pdf|URI=public://sajournals/2023-29.4-spreads.pdf EXACT_DUPLICATE_SHA256=7225cefae55a827d73e16bfd5a6721dc2168527837502820096c5d5df992bd48 FID=61472|SIZE=22821034|NAME=2024 30-2 Spreads.pdf|URI=public://sajournals/2024-30.2.pdf FID=61593|SIZE=22821034|NAME=2024-30.2-spreads.pdf|URI=public://sajournals/2024-30.2-spreads.pdf EXACT_DUPLICATE_SHA256=238629678ca527a88b59e5a167cb56ee6d6a84adaeec96cad14fd635b3e2e9f0 FID=61475|SIZE=22658963|NAME=2024 30-3 Spreads.pdf|URI=public://sajournals/2024-30.3.pdf FID=61594|SIZE=22658963|NAME=2024-30.3-spreads.pdf|URI=public://sajournals/2024-30.3-spreads.pdf EXACT_DUPLICATE_SHA256=beaddf35a87b68d86630eedf88d905fa374d76885b7b9b24a1eda8834b063c29 FID=61478|SIZE=20338903|NAME=2024 30-4 Spreads.pdf|URI=public://sajournals/2024-30.4.pdf FID=61595|SIZE=20338903|NAME=2024-30.4-spreads.pdf|URI=public://sajournals/2024-30.4-spreads.pdf EXACT_DUPLICATE_HASH_GROUPS=7 ===== ARTICLE INDEX COVERAGE ===== INDEX_TOTAL=534 INDEX_YEAR_COUNTS={"2004":24,"2005":52,"2006":40,"2007":27,"2008":23,"2009":25,"2010":24,"2011":30,"2012":42,"2013":39,"2014":28,"2015":32,"2016":27,"2017":47,"2018":34,"2019":39,"2105":1} INDEX_ISSUE_COUNTS={"Fall":147,"Spring":133,"Summer":140,"Winter":114} INDEX_JOURNAL_NUMBER_COUNTS={"10.3":12,"10.4":12,"11.1":16,"11.2":10,"11.3":13,"11.4":13,"12.1":14,"12.2":8,"12.3":10,"12.4":8,"13.1":8,"13.2":8,"13.3":11,"14.1":7,"14.2":9,"14.3":7,"15.1":8,"15.2":8,"15.3":9,"16.1":9,"16.2":8,"16.3":7,"17.1":10,"17.2":9,"17.3":11,"18.1":13,"18.2":11,"18.3":9,"18.4":9,"19.1":9,"19.2":10,"19.3":10,"19.4":10,"20.1":4,"20.2":7,"20.3":7,"20.4":10,"21.1":10,"21.2":8,"21.3":8,"21.4":7,"22.1":8,"22.2":9,"22.3":10,"22.4":10,"23.1":8,"23.2":9,"23.3":9,"23.4":11,"24.1":8,"24.2":9,"24.3":8,"24.4":9,"25.1":21,"25.3":8,"25.4":10} INDEX_MISSING_PAGE=0 INDEX_MISSING_PDF_ACCESS=0 INDEX_MISSING_ARTICLE=0 INDEX_URL_WITH_PAGE_FRAGMENT=497 INDEX_URL_WITHOUT_PAGE_FRAGMENT=37 ===== ARTICLE INDEX FIRST/LAST RECORDS ===== RECORD=1|{"nid":1943,"article":"ATSI Flight Line at Williams Gateway Airport","year":"2004","issue":"Summer","journal_number":"10.3","page":"1","pdf":"https://skyhawk.org/sites/default/files/sajournals/2004-10.3.pdf#page=1"} RECORD=2|{"nid":1944,"article":"The Hot Rod Squad","year":"2004","issue":"Summer","journal_number":"10.3","page":"6","pdf":"https://skyhawk.org/sites/default/files/sajournals/2004-10.3.pdf#page=6"} RECORD=3|{"nid":1945,"article":"The Fabulous Four-Seater","year":"2004","issue":"Summer","journal_number":"10.3","page":"5","pdf":"https://skyhawk.org/sites/default/files/sajournals/2004-10.3.pdf#page=5"} RECORD=4|{"nid":1946,"article":"Collings Foundation: Restoration of TA-4 Progresses","year":"2004","issue":"Summer","journal_number":"10.3","page":"18","pdf":"https://skyhawk.org/sites/default/files/sajournals/2004-10.3.pdf#page=18"} RECORD=5|{"nid":1947,"article":"Viking Tries to Remember: VMA-311 at Bien Hoa","year":"2004","issue":"Summer","journal_number":"10.3","page":"16","pdf":"https://skyhawk.org/sites/default/files/sajournals/2004-10.3.pdf#page=16"} RECORD=6|{"nid":1948,"article":"The Decommissioning of VC-8","year":"2004","issue":"Summer","journal_number":"10.3","page":"15","pdf":"https://skyhawk.org/sites/default/files/sajournals/2004-10.3.pdf#page=15"} RECORD=7|{"nid":1949,"article":"Bleep the Fish (submitted by John Lammers)","year":"2004","issue":"Summer","journal_number":"10.3","page":"10","pdf":"https://skyhawk.org/sites/default/files/sajournals/2004-10.3.pdf#page=10"} RECORD=8|{"nid":1950,"article":"Size Does Matter","year":"2004","issue":"Summer","journal_number":"10.3","page":"9","pdf":"https://skyhawk.org/sites/default/files/sajournals/2004-10.3.pdf#page=9"} RECORD=527|{"nid":2469,"article":"The Yom Kippur War and My First Skyhawk Flight","year":"2019","issue":"Winter","journal_number":"25.4","page":"12","pdf":"https://skyhawk.org/sites/default/files/sajournals/2019-25.4.pdf#page=12"} RECORD=528|{"nid":2470,"article":"An Engine Fire in BUNO 154984","year":"2019","issue":"Winter","journal_number":"25.4","page":"14","pdf":"https://skyhawk.org/sites/default/files/sajournals/2019-25.4.pdf#page=14"} RECORD=529|{"nid":2471,"article":"NAS Kingsville Names Hangar for First Navy Vietnam POW","year":"2019","issue":"Winter","journal_number":"25.4","page":"20","pdf":"https://skyhawk.org/sites/default/files/sajournals/2019-25.4.pdf#page=20"} RECORD=530|{"nid":2472,"article":"Bat 21 and the Garfish","year":"2019","issue":"Winter","journal_number":"25.4","page":"24","pdf":"https://skyhawk.org/sites/default/files/sajournals/2019-25.4.pdf#page=24"} RECORD=531|{"nid":2473,"article":"Oriskany's Day #267 of Rolling Thunder","year":"2019","issue":"Winter","journal_number":"25.4","page":"30","pdf":"https://skyhawk.org/sites/default/files/sajournals/2019-25.4.pdf#page=30"} RECORD=532|{"nid":2474,"article":"A-4 Skyhawks Still Flying","year":"2019","issue":"Winter","journal_number":"25.4","page":"32","pdf":"https://skyhawk.org/sites/default/files/sajournals/2019-25.4.pdf#page=32"} RECORD=533|{"nid":2475,"article":"Santa Ana/Orange County Redication of Skyhawk Memorial","year":"2019","issue":"Winter","journal_number":"25.4","page":"33","pdf":"https://skyhawk.org/sites/default/files/sajournals/2019-25.4.pdf#page=33"} RECORD=534|{"nid":2476,"article":"Puresome Unplugged - Last Night Ashore Olongapo","year":"2019","issue":"Winter","journal_number":"25.4","page":"34","pdf":"https://skyhawk.org/sites/default/files/sajournals/2019-25.4.pdf#page=34"} ===== ARTICLE INDEX PDF URL PATTERNS ===== URL_PATTERN_COUNT=21|https://skyhawk.org/sites/default/files/sajournals/2019-25.1.pdf#page=N URL_PATTERN_COUNT=16|https://skyhawk.org/sites/default/files/sajournals/2005-11.1.pdf#page=N URL_PATTERN_COUNT=14|https://skyhawk.org/sites/default/files/sajournals/2006-12.1.pdf#page=N URL_PATTERN_COUNT=13|https://skyhawk.org/sites/default/files/sajournals/2005-11.3.pdf#page=N URL_PATTERN_COUNT=13|https://skyhawk.org/sites/default/files/sajournals/2005-11.4.pdf#page=N URL_PATTERN_COUNT=13|https://skyhawk.org/sites/default/files/sajournals/2012-18.1.pdf#page=N URL_PATTERN_COUNT=12|https://skyhawk.org/sites/default/files/sajournals/2004-10.3.pdf#page=N URL_PATTERN_COUNT=12|https://skyhawk.org/sites/default/files/sajournals/2004-10.4.pdf#page=N URL_PATTERN_COUNT=11|https://skyhawk.org/sites/default/files/sajournals/2007-13.3.pdf#page=N URL_PATTERN_COUNT=11|https://skyhawk.org/sites/default/files/sajournals/2011-17.3.pdf#page=N URL_PATTERN_COUNT=11|https://skyhawk.org/sites/default/files/sajournals/2012-18.2.pdf#page=N URL_PATTERN_COUNT=11|https://skyhawk.org/sites/default/files/sajournals/2017-23.4.pdf#page=N URL_PATTERN_COUNT=10|https://skyhawk.org/sites/default/files/sajournals/2005-11.2.pdf#page=N URL_PATTERN_COUNT=10|https://skyhawk.org/sites/default/files/sajournals/2006-12.3.pdf#page=N URL_PATTERN_COUNT=10|https://skyhawk.org/sites/default/files/sajournals/2011-17.1.pdf#page=N URL_PATTERN_COUNT=10|internal:/system/files/JournalPDF/2013-19.2.pdf URL_PATTERN_COUNT=10|internal:/system/files/JournalPDF/2013-19.3.pdf URL_PATTERN_COUNT=10|https://skyhawk.org/sites/default/files/sajournals/2013-19.4.pdf#page=N URL_PATTERN_COUNT=10|https://skyhawk.org/sites/default/files/sajournals/2014-20.4.pdf#page=N URL_PATTERN_COUNT=10|https://skyhawk.org/sites/default/files/sajournals/2015-21.1.pdf#page=N URL_PATTERN_COUNT=10|https://skyhawk.org/sites/default/files/sajournals/2016-22.3.pdf#page=N URL_PATTERN_COUNT=10|https://skyhawk.org/sites/default/files/sajournals/2016-22.4.pdf#page=N URL_PATTERN_COUNT=10|https://skyhawk.org/sites/default/files/sajournals/2019-25.4.pdf#page=N URL_PATTERN_COUNT=9|https://skyhawk.org/sites/default/files/sajournals/2008-14.2.pdf#page=N URL_PATTERN_COUNT=9|https://skyhawk.org/sites/default/files/sajournals/2009-15.3.pdf#page=N URL_PATTERN_COUNT=9|https://skyhawk.org/sites/default/files/sajournals/2010-16.1.pdf#page=N URL_PATTERN_COUNT=9|https://skyhawk.org/sites/default/files/sajournals/2011-17.2.pdf#page=N URL_PATTERN_COUNT=9|https://skyhawk.org/sites/default/files/sajournals/2012-18.3.pdf#page=N URL_PATTERN_COUNT=9|https://skyhawk.org/sites/default/files/sajournals/2012-18.4.pdf#page=N URL_PATTERN_COUNT=9|https://skyhawk.org/sites/default/files/sajournals/2013-19.1.pdf#page=N ===== JOURNAL / INDEX VIEWS ===== VIEW=journal_grid|LABEL=Journal Grid|BASE_TABLE=media_field_data DISPLAY=default|PLUGIN=default|TITLE=Default|PATH=|FIELDS=name,nothing|FILTERS=status,bundle|SORTS=name DISPLAY=page_1|PLUGIN=page|TITLE=Page|PATH=journals|FIELDS=|FILTERS=|SORTS= VIEW=sa_journal_grid|LABEL=SA Journal Grid|BASE_TABLE=node_field_data DISPLAY=default|PLUGIN=default|TITLE=Default|PATH=|FIELDS=field_journal_thumbnail,field_journal_label|FILTERS=status,type|SORTS=field_journal_year_value,field_journal_issue_value DISPLAY=page_1|PLUGIN=page|TITLE=Page|PATH=sa-journal|FIELDS=|FILTERS=|SORTS= VIEW=public_skyhawk_journal_index|LABEL=Public Skyhawk Journal Index|BASE_TABLE=node_field_data DISPLAY=default|PLUGIN=default|TITLE=Master|PATH=|FIELDS=field_record,field_author_last_name,field_first_name,field_article,field_issue,field_year,field_journal_number,field_page,field_category|FILTERS=status,type,field_author_last_name_value,field_category_value,field_issue_value,field_year_value|SORTS=created DISPLAY=block_1|PLUGIN=block|TITLE=Block|PATH=|FIELDS=title|FILTERS=|SORTS= DISPLAY=data_export_1|PLUGIN=data_export|TITLE=Data export|PATH=download/views|FIELDS=|FILTERS=|SORTS=field_author_last_name_value DISPLAY=page_1|PLUGIN=page|TITLE=Page|PATH=skyhawk-public-journal-index|FIELDS=|FILTERS=|SORTS= DISPLAY=page_2|PLUGIN=page|TITLE=Page 2|PATH=skyhawk-public-journal-index-page2|FIELDS=|FILTERS=|SORTS= VIEW=skyhawk_journal_index|LABEL=Skyhawk Journal Index|BASE_TABLE=node_field_data DISPLAY=default|PLUGIN=default|TITLE=Master|PATH=|FIELDS=field_record,field_author_last_name,field_first_name,field_article,field_issue,field_year,field_journal_number,field_page,field_category,field_pdf_access|FILTERS=status,type,field_author_last_name_value,field_category_value,field_issue_value,field_year_value|SORTS=field_year_value DISPLAY=block_1|PLUGIN=block|TITLE=Block|PATH=|FIELDS=title|FILTERS=|SORTS= DISPLAY=page_1|PLUGIN=page|TITLE=Page|PATH=skyhawk-journal-index|FIELDS=|FILTERS=|SORTS= ===== IMAGE TOOLKIT ===== IMAGE_TOOLKIT=gd ===== END PHP INSPECTION ===== DRUPAL_INSPECTION_RC=0 ===== JOURNAL UPLOADER SOURCE MAP ===== 15-class JournalUploadForm extends FormBase { 16- 17- use PageMessageTrait; 18- 19- 20: public function getFormId() { 21- return 'skyhawk_journal_upload_form'; 22- } 23- 24: protected function extractPdfMeta($pdf_path) { 25- $script = <<<'PYEOF' 26-import sys, re 27:sys.path.insert(0, '/home/darwus/.local/lib/python3.6/site-packages') 28:import pypdf 29- 30:season_map = {'spring': 1, 'summer': 2, 'fall': 3, 'winter': 4} 31- 32-try: 33: reader = pypdf.PdfReader(sys.argv[1], strict=False) 34- text = '' 35- for i in range(min(4, len(reader.pages))): 36: text += (reader.pages[i].extract_text() or '') 37- 38- m = re.search(r'(Spring|Summer|Fall|Winter)\s+(\d{4})', text, re.IGNORECASE) 39- if not m: 40: print('ERROR:no_season') 41- sys.exit(1) 42: season = m.group(1).capitalize() 43: year = int(m.group(2)) 44- 45- v = re.search(r'[Vv]ol(?:ume)?\.?\s*(\d+)[\s\-\.#]+(?:[Nn]o\.?\s*)?(\d+)', text) 46- if not v: 47: print('ERROR:no_volume') 48- sys.exit(1) 49- vol = int(v.group(1)) 50: iss = season_map.get(season.lower(), 0) 51- if iss == 0: 52: print('ERROR:bad_season') 53- sys.exit(1) 54- 55: print(f'OK:{season}:{year}:{vol}:{iss}') 56-except Exception as e: 57- print(f'ERROR:{e}') 58-PYEOF; 59- 60: $script_path = '/tmp/extract_pdf_meta.py'; 61- file_put_contents($script_path, $script); 62: $result = shell_exec("python3 " . escapeshellarg($script_path) . " " . escapeshellarg($pdf_path) . " 2>&1"); 63- return trim($result); 64- } 65- 66: protected function parseMeta($file) { 67: $filename = $file->getFilename(); 68: $filename = preg_replace('/-?(spreads|print|single|highrez|lowrez|medrez|midrez)/i', '', $filename); 69: if (preg_match('/^(\d{4})-(\d+)\.(\d+)(?:_\d+)?\.pdf/i', $filename, $m)) { 70: $season_map = [1 => 'Spring', 2 => 'Summer', 3 => 'Fall', 4 => 'Winter']; 71- return [ 72: 'year' => (int)$m[1], 73: 'volume' => (int)$m[2], 74: 'issue' => (int)$m[3], 75: 'season' => $season_map[(int)$m[3]] ?? 'Issue ' . $m[3], 76: 'source' => 'filename', 77- ]; 78- } 79- 80- $pdf_path = \Drupal::service('file_system')->realpath($file->getFileUri()); 81: $result = $this->extractPdfMeta($pdf_path); 82- if (strpos($result, 'OK:') === 0) { 83- $parts = explode(':', $result); 84- return [ 85: 'year' => (int)$parts[2], 86: 'volume' => (int)$parts[3], 87: 'issue' => (int)$parts[4], 88: 'season' => $parts[1], 89- 'source' => 'content', 90- ]; 91- } 92- 93- return NULL; 94- } 95- 96: protected function findExistingNode($year, $volume, $issue) { 97- $nids = \Drupal::entityQuery('node') 98- ->accessCheck(FALSE) 99- ->condition('type', 'journal') 100: ->condition('field_journal_year', $year) 101: ->condition('field_journal_volume', $volume) 102: ->condition('field_journal_issue', $issue) 103- ->execute(); 104- return !empty($nids) ? Node::load(reset($nids)) : NULL; 105- } 106- 107: public function buildForm(array $form, FormStateInterface $form_state) { 108- 109- $nids = \Drupal::entityQuery('node') 110- ->accessCheck(FALSE) 111- ->condition('type', 'journal') 112: ->sort('field_journal_year', 'DESC') 113: ->sort('field_journal_issue', 'DESC') 114- ->range(0, 1) 115- ->execute(); 116- 117- $latest = 'None found'; 118- if (!empty($nids)) { -- 124- '#markup' => '
Most recent journal in system: ' . $latest . '
', 125- ]; 126- 127- $form['intro'] = [ 128- '#markup' => '

Upload a Single Page PDF, a Spreads PDF, or both. 129: The system will identify the issue automatically.
130- If identification fails, rename the file to YYYY-VV.I.pdf 131- (e.g. 2025-31.4.pdf) and try again.

', 132- ]; 133- 134: $replace_nid = $form_state->get('replace_nid'); 135: $replace_label = $form_state->get('replace_label'); 136: $replace_info = $form_state->get('replace_info'); 137- 138: if ($replace_nid && $replace_label) { 139: $form['replace_warning'] = [ 140- '#markup' => '
141: Duplicate detected: ' . $replace_label . ' already exists in the system.
' 142: . ($replace_info ?? '') . 143: 'Do you want to replace the existing PDF(s), or cancel? 144-
', 145- ]; 146- 147: $form['replace_nid'] = [ 148- '#type' => 'hidden', 149: '#value' => $replace_nid, 150- ]; 151- 152- $form['actions'] = ['#type' => 'actions']; 153: $form['actions']['replace'] = [ 154- '#type' => 'submit', 155: '#value' => $this->t('Replace Existing'), 156: '#submit' => ['::replaceSubmit'], 157- ]; 158- $form['actions']['cancel'] = [ 159- '#type' => 'submit', 160- '#value' => $this->t('Cancel'), 161- '#submit' => ['::cancelSubmit'], -- 163- ]; 164- return $form; 165- } 166- 167- $form['canonical_pdf'] = [ 168: '#type' => 'managed_file', 169- '#title' => $this->t('Single Page PDF'), 170- '#description' => $this->t('Single page layout PDF.'), 171: '#upload_location' => 'private://sajournals/', 172- '#upload_validators' => [ 173- 'file_validate_extensions' => ['pdf'], 174- 'file_validate_size' => [50 * 1024 * 1024], 175- ], 176- '#required' => FALSE, 177- ]; 178- 179- $form['print_pdf'] = [ 180: '#type' => 'managed_file', 181- '#title' => $this->t('Spreads PDF'), 182- '#description' => $this->t('Two-page spreads layout for printing.'), 183: '#upload_location' => 'private://sajournals/', 184- '#upload_validators' => [ 185- 'file_validate_extensions' => ['pdf'], 186- 'file_validate_size' => [50 * 1024 * 1024], 187- ], 188- '#required' => FALSE, -- 195- ]; 196- 197- return $form; 198- } 199- 200: public function validateForm(array &$form, FormStateInterface $form_state) { 201- $canonical_fids = $form_state->getValue('canonical_pdf'); 202- $print_fids = $form_state->getValue('print_pdf'); 203- 204- $triggering_element = $form_state->getTriggeringElement(); 205- if ($triggering_element && isset($triggering_element['#ajax'])) { -- 222- if (!$source_file) { 223- $form_state->setError($form, 'Could not load uploaded file.'); 224- return; 225- } 226- 227: $meta = $this->parseMeta($source_file); 228- 229- if (!$meta) { 230- $form_state->setError($form, 231: 'Could not identify this issue from the PDF content or filename. 232- Please rename the file to YYYY-VV.I.pdf (e.g. 2025-31.4.pdf) and try again.'); 233- return; 234- } 235- 236- $form_state->set('meta', $meta); 237- 238: $existing = $this->findExistingNode($meta['year'], $meta['volume'], $meta['issue']); 239- if (!$existing) { 240- return; 241- } 242- 243- $uploading_canonical = !empty($canonical_fids); 244- $uploading_print = !empty($print_fids); 245: $has_canonical = !$existing->get('field_pdf')->isEmpty(); 246: $has_print = !$existing->get('field_pdf_print')->isEmpty(); 247- 248- $would_overwrite = ($uploading_canonical && $has_canonical) || 249- ($uploading_print && $has_print); 250- 251- $adding_new = ($uploading_canonical && !$has_canonical) || 252- ($uploading_print && !$has_print); 253- 254- if ($would_overwrite) { 255- $info = ''; 256- if ($uploading_canonical && $has_canonical) { 257: $existing_pdf = $existing->get('field_pdf')->entity; 258- if ($existing_pdf) { 259- $existing_size = @filesize(\Drupal::service('file_system')->realpath($existing_pdf->getFileUri())); 260- $new_size = @filesize(\Drupal::service('file_system')->realpath($source_file->getFileUri())); 261- $info .= 'Existing Single Page: ' . round($existing_size / 1024 / 1024, 1) . 'MB → ' 262- . 'New: ' . round($new_size / 1024 / 1024, 1) . 'MB
'; 263- } 264- } 265- if ($uploading_print && $has_print) { 266: $info .= 'Existing Spreads PDF will be replaced.
'; 267- } 268- 269: $form_state->set('replace_nid', $existing->id()); 270: $form_state->set('replace_label', $existing->getTitle()); 271: $form_state->set('replace_info', $info); 272- $form_state->set('pending_canonical_fids', $canonical_fids); 273- $form_state->set('pending_print_fids', $print_fids); 274- $form_state->setRebuild(TRUE); 275- } 276- elseif ($adding_new) { 277- $form_state->set('existing_nid', $existing->id()); 278- } 279- } 280- 281: public function submitForm(array &$form, FormStateInterface $form_state) { 282- $meta = $form_state->get('meta'); 283- if (!$meta) { 284- $canonical_fids = $form_state->getValue('canonical_pdf'); 285- $print_fids = $form_state->getValue('print_pdf'); 286- $source_file = NULL; -- 289- } 290- elseif (!empty($print_fids)) { 291- $source_file = File::load(reset($print_fids)); 292- } 293- if ($source_file) { 294: $meta = $this->parseMeta($source_file); 295- } 296- } 297- 298- $existing_nid = $form_state->get('existing_nid'); 299- if ($existing_nid) { -- 305- if (!empty($canonical_fids)) { 306- $pdf_file = File::load(reset($canonical_fids)); 307- if ($pdf_file) { 308- $pdf_file->setPermanent(); 309- $pdf_file->save(); 310: $node->set('field_pdf', ['target_id' => $pdf_file->id()]); 311- } 312- } 313- if (!empty($print_fids)) { 314- $print_file = File::load(reset($print_fids)); 315- if ($print_file) { 316- $print_file->setPermanent(); 317- $print_file->save(); 318: $node->set('field_pdf_print', ['target_id' => $print_file->id()]); 319- } 320- } 321- $node->save(); 322- $this->setPageMessage('Added to existing journal: ' . $node->getTitle()); 323- $form_state->setRedirect('entity.node.canonical', ['node' => $node->id()]); -- 331- $meta, 332- $form_state 333- ); 334- } 335- 336: public function replaceSubmit(array &$form, FormStateInterface $form_state) { 337: $nid = $form_state->getValue('replace_nid'); 338- $node = Node::load($nid); 339- 340- if (!$node) { 341- $this->setPageMessage('Could not load existing node.', 'error'); 342- return; -- 348- if (!empty($canonical_fids)) { 349- $pdf_file = File::load(reset($canonical_fids)); 350- if ($pdf_file) { 351- $pdf_file->setPermanent(); 352- $pdf_file->save(); 353: $node->set('field_pdf', ['target_id' => $pdf_file->id()]); 354- } 355- } 356- if (!empty($print_fids)) { 357- $print_file = File::load(reset($print_fids)); 358- if ($print_file) { 359- $print_file->setPermanent(); 360- $print_file->save(); 361: $node->set('field_pdf_print', ['target_id' => $print_file->id()]); 362- } 363- } 364- 365- $node->save(); 366- $this->setPageMessage('Updated existing journal: ' . $node->getTitle()); 367- $form_state->setRedirect('entity.node.canonical', ['node' => $node->id()]); 368- } 369- 370: public function cancelSubmit(array &$form, FormStateInterface $form_state) { 371- $this->setPageMessage('Upload cancelled.'); 372- $form_state->setRedirect('skyhawk_site_fixes.journal_upload'); 373- } 374- 375: protected function createJournalNode($canonical_fids, $print_fids, $meta, $form_state) { 376: $season_map = [1 => 'Spring', 2 => 'Summer', 3 => 'Fall', 4 => 'Winter']; 377: $year = $meta['year']; 378: $vol = $meta['volume']; 379: $iss = $meta['issue']; 380: $season = $season_map[$iss] ?? 'Issue ' . $iss; 381: $label = "$season $year (Vol. $vol No. $iss)"; 382- 383- $pdf_file = NULL; 384- if (!empty($canonical_fids)) { 385- $pdf_file = File::load(reset($canonical_fids)); 386- if ($pdf_file) { $pdf_file->setPermanent(); $pdf_file->save(); } -- 395- $thumb_source = $pdf_file ?: $print_file; 396- $thumb_file = NULL; 397- 398- if ($thumb_source) { 399- $pdf_realpath = \Drupal::service('file_system')->realpath($thumb_source->getFileUri()); 400: $thumb_dir = 'public://sajournals/thumbnails/'; 401: $thumb_filename = $year . '-' . $vol . '.' . $iss . '.jpg'; 402: $thumb_uri = $thumb_dir . $thumb_filename; 403: $thumb_realpath = \Drupal::service('file_system')->realpath($thumb_dir) . '/' . $thumb_filename; 404- 405- \Drupal::service('file_system')->prepareDirectory($thumb_dir, 406- \Drupal\Core\File\FileSystemInterface::CREATE_DIRECTORY); 407- 408- shell_exec("convert -density 150 " . escapeshellarg($pdf_realpath . '[0]') . -- 431- $values = [ 432- 'type' => 'journal', 433- 'title' => $label, 434- 'status' => 1, 435- 'uid' => \Drupal::currentUser()->id(), 436: 'field_journal_year' => $year, 437: 'field_journal_volume' => $vol, 438: 'field_journal_issue' => $iss, 439: 'field_journal_label' => $label, 440: 'field_journal_is_print' => 0, 441- ]; 442- 443- if ($pdf_file) { 444: $values['field_pdf'] = ['target_id' => $pdf_file->id()]; 445- } 446- if ($print_file) { 447: $values['field_pdf_print'] = ['target_id' => $print_file->id()]; 448- } 449- if ($thumb_file) { 450: $values['field_journal_thumbnail'] = [ 451- 'target_id' => $thumb_file->id(), 452- 'alt' => "$label cover", 453- ]; 454- } 455- 456- $node = Node::create($values); 457- $node->save(); 458- 459- $this->setPageMessage("Journal created: $label (nid:{$node->id()})"); 460- if (!$thumb_file) { 461: $this->setPageMessage("Thumbnail generation failed. Add one manually via the node edit page.", "warning"); 462- } 463- 464- $form_state->setRedirect('entity.node.canonical', ['node' => $node->id()]); 465- } 466- ===== ROUTING SOURCE ===== 1:skyhawk_site_fixes.journal_upload: 2: path: /journal-upload 3- defaults: 4: _form: \Drupal\skyhawk_site_fixes\Form\JournalUploadForm 5: _title: 'Upload SA Journal' 6- requirements: 7: _role: journal+admin 8- options: 9- _admin_route: false 10:skyhawk_site_fixes.reunion_upload: 11- path: '/community/event-submission/{token}' 12- defaults: 13: _form: \Drupal\skyhawk_site_fixes\Form\ReunionUploadForm 14- _title: 'Submit a Reunion Announcement' 15- requirements: 16- _access: 'TRUE' 17- options: -- 33-skyhawk_site_fixes.reunion_token_admin: 34- path: /admin/skyhawk/reunion-token 35- defaults: 36- _form: \Drupal\skyhawk_site_fixes\Form\ReunionTokenAdminForm 37: _title: 'Reunion Upload Token' 38- requirements: 39- _permission: 'administer site configuration' 40:skyhawk_site_fixes.upload_token_admin: 41: path: /admin/skyhawk/upload-tokens 42- defaults: 43: _form: \Drupal\skyhawk_site_fixes\Form\UploadTokenAdminForm 44: _title: 'Upload Tokens' 45- requirements: 46- _permission: 'administer site configuration' 47:skyhawk_site_fixes.upload_token_view: 48: path: '/upload/{token}' 49- defaults: 50: _form: \Drupal\skyhawk_site_fixes\Form\UploadTokenForm 51- requirements: 52- _access: 'TRUE' 53- token: '[a-f0-9]{32}' 54:skyhawk_site_fixes.upload_transition_observation: 55: path: /skyhawk/upload-transition-observation 56- defaults: 57: _controller: '\Drupal\skyhawk_site_fixes\Controller\UploadTransitionObservationController::record' 58- requirements: 59- _access: 'TRUE' 60- methods: 61- - GET ===== ALL CUSTOM JOURNAL / INDEX OWNERS ===== /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823213747:5: * Skyhawk site fixes: menu visibility, private file access, journal email blast, reunion system. /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823213747:45: if (strpos($uri, 'private://sajournals/') !== 0) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823213747:48: if (strpos($uri, 'private://sajournals/archive/') === 0) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823213747:70: _skyhawk_journal_send_blast($node); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823213747:73:function _skyhawk_journal_send_blast(\Drupal\node\NodeInterface $node) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823213747:74: $label = $node->get('field_journal_label')->value ?: $node->getTitle(); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823213747:89: \Drupal::logger('skyhawk_journal')->warning('Journal blast: no active users found.'); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823213747:112: $result = $mailer->mail('skyhawk_site_fixes', 'journal_blast', $email, $langcode, /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823213747:125: * Handles journal blast and reunion email notifications. /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823213747:132: case 'journal_blast': /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823213747:218: $variables['field']->field === 'field_journal_label' /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.routing.yml.bak.20260823193109:1:skyhawk_site_fixes.journal_upload: /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.routing.yml.bak.20260823193109:2: path: '/journal-upload' /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.routing.yml.bak.20260823193109:4: _form: '\Drupal\skyhawk_site_fixes\Form\JournalUploadForm' /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823192852:5: * Skyhawk site fixes: menu visibility, private file access, journal email blast, reunion system. /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823192852:45: if (strpos($uri, 'private://sajournals/') !== 0) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823192852:48: if (strpos($uri, 'private://sajournals/archive/') === 0) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823192852:70: _skyhawk_journal_send_blast($node); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823192852:73:function _skyhawk_journal_send_blast(\Drupal\node\NodeInterface $node) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823192852:74: $label = $node->get('field_journal_label')->value ?: $node->getTitle(); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823192852:89: \Drupal::logger('skyhawk_journal')->warning('Journal blast: no active users found.'); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823192852:112: $result = $mailer->mail('skyhawk_site_fixes', 'journal_blast', $email, $langcode, /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823192852:125: * Handles journal blast and reunion email notifications. /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823192852:132: case 'journal_blast': /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823192852:199: $variables['field']->field === 'field_journal_label' /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.routing.yml.backup-20260824T205358Z-1860331:1:skyhawk_site_fixes.journal_upload: /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.routing.yml.backup-20260824T205358Z-1860331:2: path: '/journal-upload' /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.routing.yml.backup-20260824T205358Z-1860331:4: _form: '\Drupal\skyhawk_site_fixes\Form\JournalUploadForm' /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module:5: * Skyhawk site fixes: menu visibility, private file access, journal email blast, reunion system. /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module:45: if (strpos($uri, 'private://sajournals/') !== 0) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module:48: if (strpos($uri, 'private://sajournals/archive/') === 0) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module:70: _skyhawk_journal_send_blast($node); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module:73:function _skyhawk_journal_send_blast(\Drupal\node\NodeInterface $node) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module:74: $label = $node->get('field_journal_label')->value ?: $node->getTitle(); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module:89: \Drupal::logger('skyhawk_journal')->warning('Journal blast: no active users found.'); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module:112: $result = $mailer->mail('skyhawk_site_fixes', 'journal_blast', $email, $langcode, /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module:125: * Handles journal blast and reunion email notifications. /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module:164: case 'journal_blast': /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module:272: $variables['field']->field === 'field_journal_label' /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadLanding.php:15: return 'skyhawk_journal_upload_landing'; /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadLanding.php:24: ->sort('field_journal_year', 'DESC') /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadLanding.php:25: ->sort('field_journal_issue', 'DESC') /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadLanding.php:43: $y = $n->get('field_journal_year')->value; /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadLanding.php:44: $i = $n->get('field_journal_issue')->value; /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadLanding.php:111: $session->set('journal_upload_mode', $mode); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadLanding.php:112: $session->set('journal_upload_missing', $missing); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadLanding.php:114: $form_state->setRedirect('skyhawk_site_fixes.journal_upload'); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php:15:class JournalUploadForm extends FormBase { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php:21: return 'skyhawk_journal_upload_form'; /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php:100: ->condition('field_journal_year', $year) /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php:101: ->condition('field_journal_volume', $volume) /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php:102: ->condition('field_journal_issue', $issue) /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php:112: ->sort('field_journal_year', 'DESC') /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php:113: ->sort('field_journal_issue', 'DESC') /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php:171: '#upload_location' => 'private://sajournals/', /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php:183: '#upload_location' => 'private://sajournals/', /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php:372: $form_state->setRedirect('skyhawk_site_fixes.journal_upload'); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php:400: $thumb_dir = 'public://sajournals/thumbnails/'; /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php:436: 'field_journal_year' => $year, /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php:437: 'field_journal_volume' => $vol, /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php:438: 'field_journal_issue' => $iss, /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php:439: 'field_journal_label' => $label, /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php:440: 'field_journal_is_print' => 0, /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php:450: $values['field_journal_thumbnail'] = [ /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php.bak.20260823215617:13:class JournalUploadForm extends FormBase { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php.bak.20260823215617:16: return 'skyhawk_journal_upload_form'; /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php.bak.20260823215617:95: ->condition('field_journal_year', $year) /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php.bak.20260823215617:96: ->condition('field_journal_volume', $volume) /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php.bak.20260823215617:97: ->condition('field_journal_issue', $issue) /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php.bak.20260823215617:107: ->sort('field_journal_year', 'DESC') /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php.bak.20260823215617:108: ->sort('field_journal_issue', 'DESC') /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php.bak.20260823215617:166: '#upload_location' => 'private://sajournals/', /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php.bak.20260823215617:178: '#upload_location' => 'private://sajournals/', /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php.bak.20260823215617:367: $form_state->setRedirect('skyhawk_site_fixes.journal_upload'); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php.bak.20260823215617:395: $thumb_dir = 'public://sajournals/thumbnails/'; /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php.bak.20260823215617:431: 'field_journal_year' => $year, /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php.bak.20260823215617:432: 'field_journal_volume' => $vol, /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php.bak.20260823215617:433: 'field_journal_issue' => $iss, /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php.bak.20260823215617:434: 'field_journal_label' => $label, /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php.bak.20260823215617:435: 'field_journal_is_print' => 0, /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php.bak.20260823215617:445: $values['field_journal_thumbnail'] = [ /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T015425Z-3327557:5: * Skyhawk site fixes: menu visibility, private file access, journal email blast, reunion system. /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T015425Z-3327557:45: if (strpos($uri, 'private://sajournals/') !== 0) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T015425Z-3327557:48: if (strpos($uri, 'private://sajournals/archive/') === 0) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T015425Z-3327557:70: _skyhawk_journal_send_blast($node); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T015425Z-3327557:73:function _skyhawk_journal_send_blast(\Drupal\node\NodeInterface $node) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T015425Z-3327557:74: $label = $node->get('field_journal_label')->value ?: $node->getTitle(); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T015425Z-3327557:89: \Drupal::logger('skyhawk_journal')->warning('Journal blast: no active users found.'); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T015425Z-3327557:112: $result = $mailer->mail('skyhawk_site_fixes', 'journal_blast', $email, $langcode, /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T015425Z-3327557:125: * Handles journal blast and reunion email notifications. /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T015425Z-3327557:132: case 'journal_blast': /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T015425Z-3327557:222: $variables['field']->field === 'field_journal_label' /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/backups/generic-intake-request-20260830T023426Z-3327557/skyhawk_site_fixes.module:5: * Skyhawk site fixes: menu visibility, private file access, journal email blast, reunion system. /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/backups/generic-intake-request-20260830T023426Z-3327557/skyhawk_site_fixes.module:45: if (strpos($uri, 'private://sajournals/') !== 0) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/backups/generic-intake-request-20260830T023426Z-3327557/skyhawk_site_fixes.module:48: if (strpos($uri, 'private://sajournals/archive/') === 0) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/backups/generic-intake-request-20260830T023426Z-3327557/skyhawk_site_fixes.module:70: _skyhawk_journal_send_blast($node); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/backups/generic-intake-request-20260830T023426Z-3327557/skyhawk_site_fixes.module:73:function _skyhawk_journal_send_blast(\Drupal\node\NodeInterface $node) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/backups/generic-intake-request-20260830T023426Z-3327557/skyhawk_site_fixes.module:74: $label = $node->get('field_journal_label')->value ?: $node->getTitle(); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/backups/generic-intake-request-20260830T023426Z-3327557/skyhawk_site_fixes.module:89: \Drupal::logger('skyhawk_journal')->warning('Journal blast: no active users found.'); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/backups/generic-intake-request-20260830T023426Z-3327557/skyhawk_site_fixes.module:112: $result = $mailer->mail('skyhawk_site_fixes', 'journal_blast', $email, $langcode, /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/backups/generic-intake-request-20260830T023426Z-3327557/skyhawk_site_fixes.module:125: * Handles journal blast and reunion email notifications. /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/backups/generic-intake-request-20260830T023426Z-3327557/skyhawk_site_fixes.module:132: case 'journal_blast': /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/backups/generic-intake-request-20260830T023426Z-3327557/skyhawk_site_fixes.module:240: $variables['field']->field === 'field_journal_label' /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/backups/intake-persistence-20260830T024355Z-3327557/skyhawk_site_fixes.module:5: * Skyhawk site fixes: menu visibility, private file access, journal email blast, reunion system. /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/backups/intake-persistence-20260830T024355Z-3327557/skyhawk_site_fixes.module:45: if (strpos($uri, 'private://sajournals/') !== 0) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/backups/intake-persistence-20260830T024355Z-3327557/skyhawk_site_fixes.module:48: if (strpos($uri, 'private://sajournals/archive/') === 0) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/backups/intake-persistence-20260830T024355Z-3327557/skyhawk_site_fixes.module:70: _skyhawk_journal_send_blast($node); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/backups/intake-persistence-20260830T024355Z-3327557/skyhawk_site_fixes.module:73:function _skyhawk_journal_send_blast(\Drupal\node\NodeInterface $node) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/backups/intake-persistence-20260830T024355Z-3327557/skyhawk_site_fixes.module:74: $label = $node->get('field_journal_label')->value ?: $node->getTitle(); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/backups/intake-persistence-20260830T024355Z-3327557/skyhawk_site_fixes.module:89: \Drupal::logger('skyhawk_journal')->warning('Journal blast: no active users found.'); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/backups/intake-persistence-20260830T024355Z-3327557/skyhawk_site_fixes.module:112: $result = $mailer->mail('skyhawk_site_fixes', 'journal_blast', $email, $langcode, /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/backups/intake-persistence-20260830T024355Z-3327557/skyhawk_site_fixes.module:125: * Handles journal blast and reunion email notifications. /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/backups/intake-persistence-20260830T024355Z-3327557/skyhawk_site_fixes.module:132: case 'journal_blast': /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/backups/intake-persistence-20260830T024355Z-3327557/skyhawk_site_fixes.module:240: $variables['field']->field === 'field_journal_label' /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823212744:5: * Skyhawk site fixes: menu visibility, private file access, journal email blast, reunion system. /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823212744:45: if (strpos($uri, 'private://sajournals/') !== 0) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823212744:48: if (strpos($uri, 'private://sajournals/archive/') === 0) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823212744:70: _skyhawk_journal_send_blast($node); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823212744:73:function _skyhawk_journal_send_blast(\Drupal\node\NodeInterface $node) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823212744:74: $label = $node->get('field_journal_label')->value ?: $node->getTitle(); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823212744:89: \Drupal::logger('skyhawk_journal')->warning('Journal blast: no active users found.'); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823212744:112: $result = $mailer->mail('skyhawk_site_fixes', 'journal_blast', $email, $langcode, /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823212744:125: * Handles journal blast and reunion email notifications. /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823212744:132: case 'journal_blast': /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak.20260823212744:209: $variables['field']->field === 'field_journal_label' /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260827T150853Z-2317167:5: * Skyhawk site fixes: menu visibility, private file access, journal email blast, reunion system. /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260827T150853Z-2317167:45: if (strpos($uri, 'private://sajournals/') !== 0) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260827T150853Z-2317167:48: if (strpos($uri, 'private://sajournals/archive/') === 0) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260827T150853Z-2317167:70: _skyhawk_journal_send_blast($node); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260827T150853Z-2317167:73:function _skyhawk_journal_send_blast(\Drupal\node\NodeInterface $node) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260827T150853Z-2317167:74: $label = $node->get('field_journal_label')->value ?: $node->getTitle(); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260827T150853Z-2317167:89: \Drupal::logger('skyhawk_journal')->warning('Journal blast: no active users found.'); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260827T150853Z-2317167:112: $result = $mailer->mail('skyhawk_site_fixes', 'journal_blast', $email, $langcode, /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260827T150853Z-2317167:125: * Handles journal blast and reunion email notifications. /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260827T150853Z-2317167:132: case 'journal_blast': /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260827T150853Z-2317167:222: $variables['field']->field === 'field_journal_label' /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T025507Z-3327557:5: * Skyhawk site fixes: menu visibility, private file access, journal email blast, reunion system. /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T025507Z-3327557:45: if (strpos($uri, 'private://sajournals/') !== 0) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T025507Z-3327557:48: if (strpos($uri, 'private://sajournals/archive/') === 0) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T025507Z-3327557:70: _skyhawk_journal_send_blast($node); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T025507Z-3327557:73:function _skyhawk_journal_send_blast(\Drupal\node\NodeInterface $node) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T025507Z-3327557:74: $label = $node->get('field_journal_label')->value ?: $node->getTitle(); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T025507Z-3327557:89: \Drupal::logger('skyhawk_journal')->warning('Journal blast: no active users found.'); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T025507Z-3327557:112: $result = $mailer->mail('skyhawk_site_fixes', 'journal_blast', $email, $langcode, /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T025507Z-3327557:125: * Handles journal blast and reunion email notifications. /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T025507Z-3327557:132: case 'journal_blast': /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T025507Z-3327557:240: $variables['field']->field === 'field_journal_label' /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T025735Z-3327557:5: * Skyhawk site fixes: menu visibility, private file access, journal email blast, reunion system. /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T025735Z-3327557:45: if (strpos($uri, 'private://sajournals/') !== 0) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T025735Z-3327557:48: if (strpos($uri, 'private://sajournals/archive/') === 0) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T025735Z-3327557:70: _skyhawk_journal_send_blast($node); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T025735Z-3327557:73:function _skyhawk_journal_send_blast(\Drupal\node\NodeInterface $node) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T025735Z-3327557:74: $label = $node->get('field_journal_label')->value ?: $node->getTitle(); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T025735Z-3327557:89: \Drupal::logger('skyhawk_journal')->warning('Journal blast: no active users found.'); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T025735Z-3327557:112: $result = $mailer->mail('skyhawk_site_fixes', 'journal_blast', $email, $langcode, /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T025735Z-3327557:125: * Handles journal blast and reunion email notifications. /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T025735Z-3327557:132: case 'journal_blast': /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T025735Z-3327557:240: $variables['field']->field === 'field_journal_label' /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.routing.yml:1:skyhawk_site_fixes.journal_upload: /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.routing.yml:2: path: /journal-upload /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.routing.yml:4: _form: \Drupal\skyhawk_site_fixes\Form\JournalUploadForm /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T023755Z-3327557:5: * Skyhawk site fixes: menu visibility, private file access, journal email blast, reunion system. /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T023755Z-3327557:45: if (strpos($uri, 'private://sajournals/') !== 0) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T023755Z-3327557:48: if (strpos($uri, 'private://sajournals/archive/') === 0) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T023755Z-3327557:70: _skyhawk_journal_send_blast($node); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T023755Z-3327557:73:function _skyhawk_journal_send_blast(\Drupal\node\NodeInterface $node) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T023755Z-3327557:74: $label = $node->get('field_journal_label')->value ?: $node->getTitle(); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T023755Z-3327557:89: \Drupal::logger('skyhawk_journal')->warning('Journal blast: no active users found.'); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T023755Z-3327557:112: $result = $mailer->mail('skyhawk_site_fixes', 'journal_blast', $email, $langcode, /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T023755Z-3327557:125: * Handles journal blast and reunion email notifications. /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T023755Z-3327557:132: case 'journal_blast': /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260830T023755Z-3327557:240: $variables['field']->field === 'field_journal_label' /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260827T151223Z-2317167:5: * Skyhawk site fixes: menu visibility, private file access, journal email blast, reunion system. /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260827T151223Z-2317167:45: if (strpos($uri, 'private://sajournals/') !== 0) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260827T151223Z-2317167:48: if (strpos($uri, 'private://sajournals/archive/') === 0) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260827T151223Z-2317167:70: _skyhawk_journal_send_blast($node); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260827T151223Z-2317167:73:function _skyhawk_journal_send_blast(\Drupal\node\NodeInterface $node) { /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260827T151223Z-2317167:74: $label = $node->get('field_journal_label')->value ?: $node->getTitle(); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260827T151223Z-2317167:89: \Drupal::logger('skyhawk_journal')->warning('Journal blast: no active users found.'); /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260827T151223Z-2317167:112: $result = $mailer->mail('skyhawk_site_fixes', 'journal_blast', $email, $langcode, /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260827T151223Z-2317167:125: * Handles journal blast and reunion email notifications. /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260827T151223Z-2317167:132: case 'journal_blast': /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.module.bak-20260827T151223Z-2317167:222: $variables['field']->field === 'field_journal_label' /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/templates/node--journal--full.html.twig:5: {% if content.field_journal_thumbnail %} /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/templates/node--journal--full.html.twig:7: {{ content.field_journal_thumbnail }} /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.routing.yml.bak.20260823224334:1:skyhawk_site_fixes.journal_upload: /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.routing.yml.bak.20260823224334:2: path: '/journal-upload' /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/skyhawk_site_fixes.routing.yml.bak.20260823224334:4: _form: '\Drupal\skyhawk_site_fixes\Form\JournalUploadForm' ===== CONFIGURATION OWNERS ===== ===== JOURNAL FILESYSTEM INVENTORY ===== DIRECTORY=/home/darwus/drupalbeta/web/sites/default/files/sajournals DIRECTORY_PRESENT=YES FILE_COUNT=170 PDF_COUNT=142 .ftpquota|14 bytes 1995-1.1.pdf-p1.jpg|823510 bytes 1995-1.1.pdf|19996274 bytes 1996-2.1.pdf|21885820 bytes 1996-2.2.pdf|20171217 bytes 1996-2.3.pdf|20258496 bytes 1997-3.1.pdf|20083841 bytes 1997-3.2.pdf|12905828 bytes 1997-3.3.pdf|15284397 bytes 1997-3.4.pdf|12327683 bytes 1998-4.1.pdf|12877927 bytes 1998-4.2.pdf|12961418 bytes 1998-4.3.pdf|14781383 bytes 1998-4.4.pdf|13191241 bytes 1998-4.4_0.pdf|9027297 bytes 1999-4.1.pdf|11772716 bytes 1999-5.1.pdf|10848974 bytes 1999-5.2.pdf|12647752 bytes 1999-5.3.pdf|14582843 bytes 1999-5.4.pdf|19269394 bytes 2000-6.1.pdf|16901933 bytes 2000-6.2&6.3.pdf|22429231 bytes 2000-6.2-6.3.pdf|22429231 bytes 2000-6.3.pdf|11228184 bytes 2000-6.4.pdf|17348795 bytes 2001-7.1.pdf|24596179 bytes 2001-7.2.pdf|23301947 bytes 2001-7.3.pdf|4783900 bytes 2001-7.4.pdf|7249575 bytes 2002-8.1.pdf|5311668 bytes 2002-8.2.pdf|12935158 bytes 2003-9.1.pdf|13398523 bytes 2004-10.2.pdf|9560374 bytes 2004-10.3.pdf|10952263 bytes 2004-10.4.pdf|16240862 bytes 2005-11.1.pdf|11283957 bytes 2005-11.2.pdf|12811140 bytes 2005-11.3.pdf|56820783 bytes 2005-11.4.pdf|11196725 bytes 2006-12.1.pdf|14776950 bytes 2006-12.2.pdf|18202547 bytes 2006-12.3.pdf|23297649 bytes 2006-12.4.pdf|24577576 bytes 2007-13.1.pdf|13317787 bytes 2007-13.2.pdf|15666029 bytes 2007-13.3.pdf|17406048 bytes 2007-13.4.pdf|6705762 bytes 2008-14.1.pdf|16883276 bytes 2008-14.2.pdf|11481735 bytes 2008-14.3.pdf|15300029 bytes 2009-15.1.pdf|9524247 bytes 2009-15.2.pdf|11828321 bytes 2009-15.3.pdf|12405863 bytes 2010-16.1.pdf|11231218 bytes 2010-16.2.pdf|18265766 bytes 2010-16.3.pdf|16704112 bytes 2011-17.1.pdf|17362666 bytes 2011-17.2.pdf|56454094 bytes 2011-17.3.pdf|16653507 bytes 2012-18.1.pdf|57175216 bytes 2012-18.2.pdf|5864992 bytes 2012-18.3-spreads.pdf|32914503 bytes 2012-18.3-spreads_0.pdf|32914503 bytes 2012-18.3-spreads_1.pdf|32914503 bytes 2012-18.3.pdf|48811592 bytes 2012-18.4.pdf|14964149 bytes 2013-19-1-spring-2013-medrez.jpg|570345 bytes 2013-19-1.jpg|570345 bytes 2013-19.1.pdf|19303553 bytes 2013-19.4-spreads.pdf|24144837 bytes 2013-19.4.pdf|61812922 bytes 2014-20.1.pdf|5093757 bytes 2014-20.2.pdf|6018901 bytes 2014-20.3.pdf|20957502 bytes 2014-20.4.pdf|8631547 bytes 2015-21.1.pdf|5078507 bytes 2015-21.3.pdf|3320899 bytes 2015-21.4.pdf|6517379 bytes 2016-22.1.pdf|3313218 bytes 2016-22.2.pdf|3785913 bytes 2016-22.3.pdf|2910626 bytes 2016-22.4.pdf|9656118 bytes 2017-23-4_18-19.jpg|1318764 bytes 2017-23-4_pg1.jpg|1246952 bytes 2017-23-4_pg10-11.jpg|1108518 bytes 2017-23-4_pg12-13.jpg|1111151 bytes 2017-23-4_pg14-15.jpg|1217932 bytes 2017-23-4_pg16-17.jpg|1099619 bytes 2017-23-4_pg2-3.jpg|1257740 bytes 2017-23-4_pg20-21.jpg|1505076 bytes 2017-23-4_pg22-23.jpg|943479 bytes 2017-23-4_pg24-25.jpg|1261174 bytes 2017-23-4_pg26-27.jpg|1352734 bytes 2017-23-4_pg28-29.jpg|1701375 bytes 2017-23-4_pg30-31.jpg|1818990 bytes 2017-23-4_pg32-33.jpg|1495796 bytes 2017-23-4_pg34-35.jpg|1236865 bytes 2017-23-4_pg36-37.jpg|1162014 bytes 2017-23-4_pg38-39.jpg|1083456 bytes 2017-23-4_pg4-5.jpg|1129999 bytes 2017-23-4_pg40-41.jpg|897032 bytes 2017-23-4_pg42-43.jpg|912833 bytes 2017-23-4_pg44-45.jpg|961057 bytes 2017-23-4_pg46.jpg|558041 bytes 2017-23-4_pg6-7.jpg|887475 bytes 2017-23-4_pg8-9.jpg|891767 bytes 2017-23.1.pdf|3201177 bytes 2017-23.2.pdf|3229248 bytes 2017-23.4.pdf|39007501 bytes 2018-24.1.pdf|9932843 bytes 2018-24.2.pdf|6380513 bytes 2018-24.3.pdf|7449584 bytes 2018-24.4.pdf|10092606 bytes 2019-25.1.pdf|8190938 bytes 2019-25.2.pdf|8028879 bytes 2019-25.3.pdf|11649340 bytes 2019-25.4.pdf|11139693 bytes 2020-26.1.pdf|9707359 bytes 2020-26.2.pdf|9468834 bytes 2020-26.3.pdf|17125900 bytes 2020-26.4.pdf|14781097 bytes 2021-27.1.pdf|13172179 bytes 2021-27.2.pdf|12801658 bytes 2021-27.3.pdf|12448592 bytes 2021-27.4.pdf|13916430 bytes 2022 28-4-Print Friendly.pdf|18932089 bytes 2022-28.1.pdf|16517217 bytes 2022-28.2.pdf|16086267 bytes 2022-28.3.pdf|21534552 bytes 2022-28.4-spreads.pdf|24616701 bytes 2022-28.4.pdf|24616701 bytes 2023 29-1 print friendly.pdf|22664721 bytes 2023 29-2-Print Friendly.pdf|18503827 bytes 2023 29-3 print friendly.pdf|19209433 bytes 2023 29-4 print friendly.pdf|28055882 bytes 2023-29.1-spreads.pdf|22650140 bytes 2023-29.1.pdf|22664721 bytes 2023-29.2-spreads.pdf|20834962 bytes 2023-29.2.pdf|20834962 bytes 2023-29.3-spreads.pdf|19183771 bytes 2023-29.3.pdf|19183771 bytes 2023-29.4-spreads.pdf|28018356 bytes 2023-29.4.pdf|28018356 bytes 2024 30-1 print friendly.pdf|21907422 bytes 2024 30-2 Print Friendly.pdf|22852673 bytes 2024 30-3 print friendly.pdf|22111929 bytes 2024 30-4 Print friendly.pdf|20369233 bytes 2024-30.1-spreads.pdf|21891496 bytes 2024-30.1.pdf|21907422 bytes 2024-30.2-spreads.pdf|22821034 bytes 2024-30.2.pdf|22821034 bytes 2024-30.3-spreads.pdf|22658963 bytes 2024-30.3.pdf|22658963 bytes 2024-30.4-spreads.pdf|20338903 bytes 2024-30.4.pdf|20338903 bytes 2025 31-1 Print friendly.pdf|16861439 bytes 2025 31-4 Print friendly.pdf|25354348 bytes 2025-31.1-spreads.pdf|16826849 bytes 2025-31.1.pdf|16861439 bytes 2025-31.4-spreads.pdf|25287675 bytes 2025-31.4.pdf|11337728 bytes Winter 2012-2013.pdf|14996025 bytes Winter 2012-2013_2.pdf|14996025 bytes Winter 2012-2013_3.pdf|14996025 bytes Winter 2012-2013_4.pdf|14996025 bytes Winter 2012-2013_5.pdf|14996025 bytes Winter 2012-2013_6.pdf|14996025 bytes Winter 2012-2013_7.pdf|14996025 bytes Winter 2012-2013_8.pdf|14996025 bytes Winter 2012-2013_9.pdf|14996025 bytes DIRECTORY=/home/darwus/drupalbeta/web/private/sajournals DIRECTORY_PRESENT=YES FILE_COUNT=111 PDF_COUNT=111 1996-2.2.pdf|20171217 bytes 1996-2.3.pdf|20258496 bytes 1997-3.2.pdf|12905828 bytes 1997-3.3.pdf|15284397 bytes 1997-3.4.pdf|12327683 bytes 1998-4.2.pdf|12961418 bytes 1998-4.3.pdf|14781383 bytes 1998-4.4.pdf|13191241 bytes 1998-4.4_0.pdf|9027297 bytes 1999-5.2.pdf|12647752 bytes 1999-5.3.pdf|14582843 bytes 1999-5.4.pdf|19269394 bytes 2000-6.2-6.3.pdf|22429231 bytes 2000-6.3.pdf|11228184 bytes 2000-6.4.pdf|17348795 bytes 2001-7.2.pdf|23301947 bytes 2001-7.3.pdf|4783900 bytes 2001-7.4.pdf|7249575 bytes 2002-8.2.pdf|12935158 bytes 2004-10.2.pdf|9560374 bytes 2004-10.3.pdf|10952263 bytes 2004-10.4.pdf|16240862 bytes 2005-11.2.pdf|12811140 bytes 2005-11.3.pdf|56820783 bytes 2005-11.4.pdf|11196725 bytes 2006-12.2.pdf|18202547 bytes 2006-12.3.pdf|23297649 bytes 2006-12.4.pdf|24577576 bytes 2007-13.2.pdf|15666029 bytes 2007-13.3.pdf|17406048 bytes 2007-13.4.pdf|6705762 bytes 2008-14.2.pdf|11481735 bytes 2008-14.3.pdf|15300029 bytes 2009-15.2.pdf|11828321 bytes 2009-15.3.pdf|12405863 bytes 2010-16.2.pdf|18265766 bytes 2010-16.3.pdf|16704112 bytes 2011-17.2.pdf|56454094 bytes 2011-17.3.pdf|16653507 bytes 2012-18.2.pdf|5864992 bytes 2012-18.3-spreads.pdf|32914503 bytes 2012-18.3-spreads_0.pdf|32914503 bytes 2012-18.3-spreads_1.pdf|32914503 bytes 2012-18.3.pdf|48811592 bytes 2012-18.4.pdf|14964149 bytes 2013-19.4-spreads.pdf|24144837 bytes 2013-19.4.pdf|61812922 bytes 2014-20.2.pdf|6018901 bytes 2014-20.3.pdf|20957502 bytes 2014-20.4.pdf|8631547 bytes 2015-21.3.pdf|3320899 bytes 2015-21.4.pdf|6517379 bytes 2016-22.2.pdf|3785913 bytes 2016-22.3.pdf|2910626 bytes 2016-22.4.pdf|9656118 bytes 2017-23.2.pdf|3229248 bytes 2017-23.4.pdf|39007501 bytes 2018-24.2.pdf|6380513 bytes 2018-24.3.pdf|7449584 bytes 2018-24.4.pdf|10092606 bytes 2019-25.2.pdf|8028879 bytes 2019-25.3.pdf|11649340 bytes 2019-25.4.pdf|11139693 bytes 2020-26.2.pdf|9468834 bytes 2020-26.3.pdf|17125900 bytes 2020-26.4.pdf|14781097 bytes 2021-27.2.pdf|12801658 bytes 2021-27.3.pdf|12448592 bytes 2021-27.4.pdf|13916430 bytes 2022 28-4-Print Friendly.pdf|18932089 bytes 2022-28.2.pdf|16086267 bytes 2022-28.3.pdf|21534552 bytes 2022-28.4-spreads.pdf|24616701 bytes 2022-28.4.pdf|24616701 bytes 2023 29-1 print friendly.pdf|22664721 bytes 2023 29-2-Print Friendly.pdf|18503827 bytes 2023 29-3 print friendly.pdf|19209433 bytes 2023 29-4 print friendly.pdf|28055882 bytes 2023-29.1-spreads.pdf|22650140 bytes 2023-29.2-spreads.pdf|20834962 bytes 2023-29.2.pdf|20834962 bytes 2023-29.3-spreads.pdf|19183771 bytes 2023-29.3.pdf|19183771 bytes 2023-29.4-spreads.pdf|28018356 bytes 2023-29.4.pdf|28018356 bytes 2024 30-1 print friendly.pdf|21907422 bytes 2024 30-2 Print Friendly.pdf|22852673 bytes 2024 30-3 print friendly.pdf|22111929 bytes 2024 30-4 Print friendly.pdf|20369233 bytes 2024-30.1-spreads.pdf|21891496 bytes 2024-30.2-spreads.pdf|22821034 bytes 2024-30.2.pdf|22821034 bytes 2024-30.3-spreads.pdf|22658963 bytes 2024-30.3.pdf|22658963 bytes 2024-30.4-spreads.pdf|20338903 bytes 2024-30.4.pdf|20338903 bytes 2025 31-1 Print friendly.pdf|16861439 bytes 2025 31-4 Print friendly.pdf|25354348 bytes 2025-31.1-spreads.pdf|16826849 bytes 2025-31.4-spreads.pdf|25287675 bytes 2025-31.4.pdf|11337728 bytes Skyhawk-Vol32-1-spreads.pdf|22645922 bytes Winter 2012-2013.pdf|14996025 bytes Winter 2012-2013_2.pdf|14996025 bytes Winter 2012-2013_3.pdf|14996025 bytes Winter 2012-2013_4.pdf|14996025 bytes Winter 2012-2013_5.pdf|14996025 bytes Winter 2012-2013_6.pdf|14996025 bytes Winter 2012-2013_7.pdf|14996025 bytes Winter 2012-2013_8.pdf|14996025 bytes Winter 2012-2013_9.pdf|14996025 bytes ===== HISTORICAL INDEX SOURCE ARTIFACT ===== RAVEN_CSV=FOUND RAVEN_CSV_BYTES=80821 RAVEN_CSV_SHA256=438bcb9a233b2b44dc54e0e28529b395333a5f31f41c37d06fe1104bb4187c15 RAVEN_CSV_LINES=535 RAVEN_CSV_HEADER: last_name,first_name,article,issue,year,journal_number,page,category,pdf_access ===== PDF RUNTIME REALITY ===== PYTHON_VERSION=3.10.20 (main, Apr 7 2026, 00:00:00) [GCC 11.5.0 20240719 (Red Hat 11.5.0-11)] PY_MODULE_pdfminer=YES|VERSION=20260107 PY_MODULE_pypdf=NO|ModuleNotFoundError PY_MODULE_PyPDF2=NO|ModuleNotFoundError PY_MODULE_fitz=NO|ModuleNotFoundError ===== PDF / IMAGE EXECUTABLES ===== EXECUTABLE_pdfinfo=ABSENT EXECUTABLE_pdftotext=ABSENT EXECUTABLE_pdfimages=ABSENT EXECUTABLE_gs=FOUND|/usr/bin/gs EXECUTABLE_convert=FOUND|/usr/bin/convert EXECUTABLE_magick=ABSENT ===== JOURNAL-RELATED PROJECT FILES ===== /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadForm.php.bak.20260823215617 /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/src/Form/JournalUploadLanding.php /home/darwus/drupalbeta/web/modules/custom/skyhawk_site_fixes/templates/node--journal--full.html.twig ===== VERIFICATION ===== DRUPAL_MUTATION=NONE APPLICATION_SOURCE_MUTATION=NONE DATABASE_MUTATION=NONE READ_ONLY_DISCOVERY=COMPLETE FINAL_RESULT=SUCCEEDED ===== END =====