From 86d7e64af568a36c3e63f59b119af061128d0f84 Mon Sep 17 00:00:00 2001 From: Eric van der Vlist Date: Fri, 3 Jun 2011 13:34:24 +0200 Subject: [PATCH] Initial import of the Wordpress plugin --- owark/owark.iml | 12 + wordpress/plugins/owark/owark.php | 341 +++++++++++++++++++++++++++++ wordpress/plugins/owark/readme.txt | 87 ++++++++ 3 files changed, 440 insertions(+) create mode 100644 owark/owark.iml create mode 100644 wordpress/plugins/owark/owark.php create mode 100644 wordpress/plugins/owark/readme.txt diff --git a/owark/owark.iml b/owark/owark.iml new file mode 100644 index 0000000..76b7163 --- /dev/null +++ b/owark/owark.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/wordpress/plugins/owark/owark.php b/wordpress/plugins/owark/owark.php new file mode 100644 index 0000000..fb0156f --- /dev/null +++ b/wordpress/plugins/owark/owark.php @@ -0,0 +1,341 @@ + Add query vars -> Recalculate rewrite rules + add_filter('rewrite_rules_array', array($this, 'create_rewrite_rules')); + add_filter('query_vars',array($this, 'add_query_vars')); + + // Recalculates rewrite rules during admin init to save resources. + // Could probably run it once as long as it isn't going to change or check the + // $wp_rewrite rules to see if it's active. + add_filter('admin_init', array($this, 'flush_rewrite_rules')); + add_action( 'template_redirect', array($this, 'template_redirect_intercept') ); + + add_filter ( 'the_content', array($this, 'content_filter')); + add_filter ( 'comment_text', array($this, 'comment_filter')); + add_filter ( 'get_comment_author_link', array($this, 'comment_filter')); + + } + + function owark_admin_menu() { + add_management_page(__('The Open Web Archive', 'owark'), __('Web Archive', 'owark'), 'edit_others_posts', 'owark', array($this, 'management_page')); + } + + /** + * URL of an archive page + * + * @package owark + * @since 0.1 + * + * + */ + function get_archive_url($archive_id) { + return home_url().'/owark/'.$archive_id; + } + + /** + * Display the admin/tools page. + * + * @package owark + * @since 0.1 + * + * + */ + function management_page() { + //must check that the user has the required capability + if (!current_user_can('edit_others_posts')) { + wp_die( __('You do not have sufficient permissions to access this page.') ); + } + + global $wpdb; + + echo '
'; + screen_icon(); + echo '

Owark - The Open Web Archive

'; + echo '

Tired of broken links? Archive yours with the Open Web Archive!

'; + echo "
"; + + echo '

List of broken links with successfully archived pages:

'; + + $query = "SELECT owark.id, owark.url, owark.status, owark.arc_date, owark.arc_location, blc_links.status_text + FROM {$wpdb->prefix}perwac AS owark, {$wpdb->prefix}blc_links as blc_links + WHERE owark.url = blc_links.final_url COLLATE latin1_swedish_ci and blc_links.broken = 1 + ORDER BY owark.url"; + $results = $wpdb->get_results($query); + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + foreach ($results as $link) { + $archive_url = $this->get_archive_url($link->id); + echo " + + + "; + } + + echo ''; + echo '
URLArchive
url}\" target='_blank'>{$link->url}{$link->arc_date}
'; + + + } + + /** + * Add a rewrite rule to display archive pages + * + * @package owark + * @since 0.1 + * + * + */ + function create_rewrite_rules($rules) { + global $wp_rewrite; + $newRule = array('owark/(.+)' => 'index.php?owark='.$wp_rewrite->preg_index(1)); + $newRules = $newRule + $rules; + return $newRules; + } + + /** + * Add a query variable used to display archive pages + * + * @package owark + * @since 0.1 + * + * + */ + function add_query_vars($qvars) { + $qvars[] = 'owark'; + return $qvars; + } + + /** + * Title says it all ;) ... + * + * @package owark + * @since 0.1 + * + * + */ + function flush_rewrite_rules() { + global $wp_rewrite; + $wp_rewrite->flush_rules(); + } + + /** + * Intercepts archive pages. + * + * @package owark + * @since 0.1 + * + * + */ + function template_redirect_intercept() { + global $wp_query; + if ($wp_query->get('owark')) { + $this->display_archive($wp_query->get('owark')); + exit; + } + } + + /** + * Filter to replace broken links in comments. + * + * @package owark + * @since 0.1 + * + * + */ + function content_filter($content) { + global $post; + return $this->link_filter($content, $post->ID, $post->post_type); + } + + /** + * Filter to replace broken links in comments. + * + * @package owark + * @since 0.1 + * + * + */ + function comment_filter($content) { + return $this->link_filter($content, get_comment_ID(), 'comment'); + } + + /** + * Generic filter to replace broken links in content. + * + * @package owark + * @since 0.1 + * + * + */ + function link_filter($content, $post_id, $post_type) { + + global $wpdb; + + // See if we haven't already loaded the broken links for this post... + if ($this->post_id != $post_id || $this->post_type != $post_type) { + + $this->post_id = $post_id; + $this->post_type = $post_type; + + //Retrieve info about all occurrences of broken links in the current post + //which happens for comments (they have links to check in 2 different filters) + $q = " + SELECT instances.raw_url, owark.id + FROM {$wpdb->prefix}blc_instances AS instances, + {$wpdb->prefix}blc_links AS links, + {$wpdb->prefix}perwac AS owark + WHERE + instances.link_id = links.link_id + AND owark.url = links.final_url COLLATE latin1_swedish_ci + AND instances.container_id = %s + AND instances.container_type = %s + AND links.broken = 1 + "; + $q = $wpdb->prepare($q, $this->post_id, $this->post_type); + $results = $wpdb->get_results($q); + + $this->broken_links = array(); + + foreach ($results as $link) { + $this->broken_links[$link->raw_url] = $link->id; + } + + } + + + if (empty($this->broken_links)) { + return $content; + } + + // Regexp : see http://stackoverflow.com/questions/2609095/hooking-into-comment-text-to-add-surrounding-tag + return preg_replace_callback('/(]+)(["\'][^>]*>.*?<\/a>)/si', array( $this, 'replace_a_link'), $content); + } + + /** + * Replace a link. + * + * @package owark + * @since 0.1 + * + * + */ + function replace_a_link($matches) { + if (array_key_exists($matches[2], $this->broken_links)) { + return $matches[1].$this->get_archive_url($this->broken_links[$matches[2]]).$matches[3]; + } else { + return $matches[0]; + } + } + + + /** + * Display an archive page + * + * @package owark + * @since 0.1 + * + * + */ + function display_archive($parameter) { + + global $wpdb; + + $id = intval($parameter); + + $query = "SELECT * + from {$wpdb->prefix}perwac AS owark + where id = {$id}"; + $link = $wpdb->get_row($query); + + $blog_title = get_bloginfo('name'); + $home_url = home_url(); + + $loc = ""; + if( ($pos = strpos($link->arc_location, '/wp-content/perwac/')) !== FALSE ) + $loc = substr($link->arc_location, $pos); + $arc_loc = home_url() . $loc; + + echo ' +'; + + echo ""; + echo '
'; + echo '
'; + echo "This is an Open Web Archive archive of url}\">{$link->url}."; + echo "
This snapshot has been taken on {$link->arc_date} for the website {$blog_title} which contains a link to this page and has saved a copy to be displayed in the page ever disappears."; + echo '
'; + $file_location = '.'.$loc.'/index.html'; + $f = fopen($file_location, "r"); + echo fread($f, filesize($file_location)); + fclose($f); + echo '
'; + } + + + } +} + + +if (class_exists("Owark")) { + $owark = new Owark(); +} + + + +?> diff --git a/wordpress/plugins/owark/readme.txt b/wordpress/plugins/owark/readme.txt new file mode 100644 index 0000000..95e6b49 --- /dev/null +++ b/wordpress/plugins/owark/readme.txt @@ -0,0 +1,87 @@ +=== owark === +Contributors: evlist +Donate link: http://eric.van-der-vlist.com/ +Tags: archives +Requires at least: 3.1.3 +Tested up to: 3.1.3 +Stable tag: trunk + +Tired of broken links? Archive yours with the Open Web Archive! + +== Description == + + +== Installation == + +This section describes how to install the plugin and get it working. + +e.g. + +1. Upload `plugin-name.php` to the `/wp-content/plugins/` directory +1. Activate the plugin through the 'Plugins' menu in WordPress +1. Place `` in your templates + +== Frequently Asked Questions == + += A question that someone might have = + +An answer to that question. + += What about foo bar? = + +Answer to foo bar dilemma. + +== Screenshots == + +1. This screen shot description corresponds to screenshot-1.(png|jpg|jpeg|gif). Note that the screenshot is taken from +the directory of the stable readme.txt, so in this case, `/tags/4.3/screenshot-1.png` (or jpg, jpeg, gif) +2. This is the second screen shot + +== Changelog == + += 1.0 = +* A change since the previous version. +* Another change. + += 0.5 = +* List versions from most recent at top to oldest at bottom. + +== Upgrade Notice == + += 1.0 = +Upgrade notices describe the reason a user should upgrade. No more than 300 characters. + += 0.5 = +This version fixes a security related bug. Upgrade immediately. + +== Arbitrary section == + +You may provide arbitrary sections, in the same format as the ones above. This may be of use for extremely complicated +plugins where more information needs to be conveyed that doesn't fit into the categories of "description" or +"installation." Arbitrary sections will be shown below the built-in sections outlined above. + +== A brief Markdown Example == + +Ordered list: + +1. Some feature +1. Another feature +1. Something else about the plugin + +Unordered list: + +* something +* something else +* third thing + +Here's a link to [WordPress](http://wordpress.org/ "Your favorite software") and one to [Markdown's Syntax Documentation][markdown syntax]. +Titles are optional, naturally. + +[markdown syntax]: http://daringfireball.net/projects/markdown/syntax + "Markdown is what the parser uses to process much of the readme file" + +Markdown uses email style notation for blockquotes and I've been told: +> Asterisks for *emphasis*. Double it up for **strong**. + +`` +