#!/bin/bash # file: gsl__post_checkers # Folder: /var/lib/gsl/scripts # By echolib # License: GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007 #======================================================================= # From: gsl__loop_posts | Check Post from modules #======================================================================= gsl__post_all_checkers() { clear unset gsl_check_done echo -n ": Searching for needed Headers..." gsl__post_check_needed_headers echo -ne "\r\033[2K: Searching for #1..." gsl__post_check_h1 echo -ne "\r\033[2K: Searching for Paragraphs" gsl__post_check_paragraphs echo -ne "\r\033[2K: Searching for Content MARKERS..." gsl__post_check_markers echo -ne "\r\033[2K: Searching for BLOCKQUOTEs..." gsl__post_check_blockquote echo -ne "\r\033[2K: Searching for ABBRs..." gsl__post_check_abbr echo -ne "\r\033[2K: Searching for LINKs.." gsl__post_check_links echo -ne "\r\033[2K" # End of checkers : show logs for war and err [[ "$gsl_checker_war" ]] \ && gsl log -s -w [[ "$gsl_checker_err" ]] \ && gsl log -s -e } #======================================================================= # Check Post for MISSING & VALID Content HEADERS #======================================================================= gsl__post_check_needed_headers() { #----------------------------------------------------------------------- # Check if Missing NEEDED HEADERS #----------------------------------------------------------------------- # Title gsl_header_title=`gsl__get_header "$gsl_marker_title" "$gsl_post"` ! [[ "$gsl_header_title" ]] \ && gsl__logs_print \ "$gsl_log_e" \ "Title" \ "Post" \ "Missing" \ "${PWD}/$gsl_post" \ && gsl_checker_err=true # Slug gsl_header_slug=`gsl__get_header "$gsl_marker_slug" "$gsl_post"` ! [[ "$gsl_header_slug" ]] \ && gsl__logs_print \ "$gsl_log_e" \ "Slug" \ "Post" \ "Missing" \ "${PWD}/$gsl_post" \ && gsl_checker_err=true \ && gsl_slug_err=true # Author gsl_header_author=`gsl__get_header "$gsl_marker_author" "$gsl_post"` ! [[ "$gsl_header_author" ]] \ && gsl__logs_print \ "$gsl_log_e" \ "Author" \ "Post" \ "Missing" \ "${PWD}/$gsl_post" \ && gsl_checker_err=true \ && gsl_author_err=true # Date gsl_header_date=`gsl__get_header "$gsl_marker_date" "$gsl_post"` ! [[ "$gsl_header_date" ]] \ && gsl__logs_print \ "$gsl_log_e" \ "Date" \ "Post" \ "Missing" \ "${PWD}/$gsl_post" \ && gsl_checker_err=true \ && gsl_date_err=true # Description gsl_header_info=`gsl__get_header "$gsl_marker_info" "$gsl_post"` ! [[ "$gsl_header_info" ]] \ && gsl__logs_print \ "$gsl_log_e" \ "Infos" \ "Post" \ "Missing" \ "${PWD}/$gsl_post" \ && gsl_checker_err=true #----------------------------------------------------------------------- # Check for VALID Content HEADERS #----------------------------------------------------------------------- # Author registred if ! [[ "$gsl_author_err" ]] && \ ! [[ `grep "$gsl_header_author" "$gsl_file_auth_ndd"` ]];then gsl__logs_print \ "$gsl_log_e" \ "Author" \ "Post" \ "$gsl_header_author not registred for domain $gsl_find_domain" \ "${PWD}/$gsl_post" gsl_checker_err=true fi # Date Format YYYY-MM-DD if ! [[ "$gsl_date_err" ]] && \ ! [[ "$gsl_header_date" =~ $gsl_test_date ]];then gsl__logs_print \ "$gsl_log_e" \ "Date" \ "Post" \ "$gsl_header_date not YYYY-MM-DD" \ "${PWD}/$gsl_post" gsl_checker_err=true fi # Slug format title-post if ! [[ "$gsl_slug_err" ]];then gsl_header_slug_test=${gsl_header_slug// /-} if ! [[ "$gsl_header_slug" == "$gsl_header_slug_test" ]];then gsl_new_header_slug="$gsl_marker_slug$gsl_header_slug_test" sed -i \ "s|$gsl_marker_slug$gsl_header_slug|$gsl_new_header_slug" \ "$gsl_post" && \ gsl__logs_print \ "$gsl_log_w" \ "Slug" \ "Post" \ "Changed: $gsl_header_slug_test" \ "${PWD}/$gsl_post" gsl_header_slug=$gsl_header_slug_test gsl_checker_war=true fi fi } #======================================================================= # Check Post for begining content #======================================================================= gsl__post_check_h1() { gsl_post_begin=` grep -n "#1" $gsl_post \ | head -1 \ | awk -F: '{print $1}'` if ! [[ "$gsl_post_begin" ]];then gsl__logs_print \ "$gsl_log_e" \ "Begin" \ "Post" \ "Missing content: #1 TITLE" \ "${PWD}/$gsl_post" gsl_checker_err=true fi } #======================================================================= # Check for paragraphs ( and ) #======================================================================= gsl__post_check_paragraphs() { gsl_post_p_open_nbr=` awk -v line="$gsl_post_begin" \ -v op="$gsl_mo_p" \ 'NR > line && $1 == op' \ "$gsl_post" \ | wc -l` gsl_post_p_close_nbr=` awk -v line="$gsl_post_begin" \ -v cp="$gsl_mc_p" \ 'NR > line && $1 == cp' \ "$gsl_post" \ | wc -l` if (( "$gsl_post_p_open_nbr" == 0 ));then gsl__logs_print \ "$gsl_log_e" \ "Paragraph" \ "Post" \ "Missing content: ( and ) at begining lines" \ "${PWD}/$gsl_post" gsl_checker_err=true return fi if (( "$gsl_post_p_open_nbr" == "$gsl_post_p_close_nbr" ));then gsl_post_stat_p="$gsl_post_p_open_nbr" else gsl__logs_print \ "$gsl_log_e" \ "Paragraph" \ "Post" \ "Mismatch: (=$gsl_post_p_open_nbr ; )=$gsl_post_p_close_nbr" \ "${PWD}/$gsl_post" gsl_checker_err=true return fi } #======================================================================= # Check and count MARKERS content (Strong, links...) #======================================================================= gsl__post_check_markers() { gsl_markers_nbr=$(( ${#gsl_o_markers[@]} - 1 )) gsl_post_stat_m=(0 0 0 0 0 0) while read -r "gsl_post_line" do gsl_line_nbr=`awk -F":" '{print $1}' <<< $gsl_post_line` for gsl_i in `seq 0 $gsl_markers_nbr` do if [[ "$gsl_post_line" =~ ${gsl_o_markers[gsl_i]} ]];then # Open Marker by Type gsl_o=` grep -o "${gsl_o_markers[gsl_i]}" \ <<< $gsl_post_line \ | wc -l` # Close Marker by Type gsl_c=` grep -o "${gsl_c_markers[gsl_i]}" \ <<< $gsl_post_line \ | wc -l` # Strong Vs Bold | 2= **_ / 3= *_ in array if (( $gsl_i == 2 ));then gsl_oS=$gsl_o # Open Strong marker nbr gsl_cS=$gsl_c # Close Strong marker nbr elif (( $gsl_i == 3 ));then # Count difference from Strong if (( $gsl_oS ));then gsl_o=$(( $gsl_o - $gsl_oS )) unset gsl_oS fi if (( $gsl_cS ));then gsl_c=$(( $gsl_c - $gsl_cS )) unset gsl_cS fi fi # Compare if ! (( $gsl_o == $gsl_c ));then gsl__logs_print \ "$gsl_log_e" \ "Post" \ "${gsl_i_markers[gsl_i]}" \ "Line $gsl_line_nbr: Mismatch ${gsl_u_markers[gsl_i]}" \ "${PWD}/$gsl_post" gsl_checker_err=true else gsl_post_stat_m[gsl_i]=$(( gsl_post_stat_m[gsl_i] + gsl_o )) fi fi done done < <(awk -v line="$gsl_post_begin" \ 'NR >= line {print NR":",$0}' \ "$gsl_post") # Show Counts in logs for gsl_i in `seq 0 $gsl_markers_nbr` do if (( ${gsl_post_stat_m[gsl_i]} >= 1 ));then gsl__logs_print \ "$gsl_log_i" \ "Post" \ "${gsl_i_markers[gsl_i]}" \ "NBR=${gsl_post_stat_m[gsl_i]} > ${gsl_u_markers[gsl_i]}" \ "${PWD}/$gsl_post" fi done } #======================================================================= # Check for blockquotes: --- #======================================================================= gsl__post_check_blockquote() { gsl_post_blockquotes_nbr=` awk -v line="$gsl_post_begin" \ -v bq="$gsl_mark_blockquote" \ 'NR > line && $1 == bq' \ "$gsl_post" \ | wc -l` gsl_post_blockquotes_nbr_r=$(( $gsl_post_blockquotes_nbr % 2 )) if [[ "$gsl_post_blockquotes_nbr_r" -eq 0 ]];then gsl_post_stat_bq=$(( $gsl_post_blockquotes_nbr / 2 )) gsl__logs_print \ "$gsl_log_i" \ "Post" \ "Blockquotes" \ "NBR=$gsl_post_stat_bq > $gsl_mark_blockquote (2x)" \ "${PWD}/$gsl_post" fi } #======================================================================= # Check Post for ABBR HEADER + Content #======================================================================= gsl__post_check_abbr() { gsl_post_stat_abbr=0 while read -r "gsl_header_content_line" do # Get & Check HEADER CONTENT gsl__get_header_fields "$gsl_marker_abbr" gsl__check_header_fields "Post" "ABBR" "$gsl_log_act_abbr" || continue # Check POST CONTENT [[ `gsl__get_content_line \ "$gsl_post_header_field_1" \ "$gsl_post"` ]] \ && gsl_post_stat_abbr=$(( gsl_post_stat_abbr + 1 )) \ && continue # Missing CONTENT gsl__logs_print \ "$gsl_log_e" \ "Post" \ "ABBR" \ "Missing Content: $gsl_post_header_field_1" \ "${PWD}/$gsl_post" gsl_checker_err=true done < <(gsl__get_header "$gsl_marker_abbr" "$gsl_post") gsl__logs_print \ "$gsl_log_i" \ "Post" \ "ABBR" \ "NBR=$gsl_post_stat_abbr" \ "${PWD}/$gsl_post" } #======================================================================= # Check Post for LINKs HEADER + Content #======================================================================= gsl__post_check_links() { gsl_post_stat_link=0 while read -r "gsl_header_content_line" do # Get & Check Header CONTENT gsl__get_header_fields "$gsl_marker_link" gsl__check_header_fields "Post" "Link" "$gsl_log_act_link" || continue # Not ALT TEXT ? if ! [[ "$gsl_post_header_field_3" ]];then gsl__logs_print \ "$gsl_log_w" \ "Post" \ "Link" \ "Line:$gsl_post_header_line_nbr > No ALT TEXT ?" \ "${PWD}/$gsl_post" gsl_checker_war=true fi # Find if ref is in CONTENT if [[ `gsl__get_content_finder \ -o "$gsl_mo_link" \ -b "$gsl_post_header_field_1" \ -c "$gsl_mc_link" \ -f "$gsl_post" \ | tail -1 ` ]];then (( gsl_post_stat_link ++ )) continue fi # Missing CONTENT gsl__logs_print \ "$gsl_log_e" \ "Post" \ "Link" \ "Missing Content: [_${gsl_post_header_field_1}_]" \ "${PWD}/$gsl_post" gsl_checker_err=true done < <(gsl__get_header "$gsl_marker_link" "$gsl_post") }