2009-08-12 23:51:23 +00:00
< ? php
2009-08-19 23:58:24 +00:00
/**
* Administrative functions for What Did They Say ? ! ?
*/
2009-08-12 23:51:23 +00:00
class WhatDidTheySayAdmin {
2009-08-14 02:13:46 +00:00
var $default_options = array (
'languages' => array (
array ( 'code' => 'en' , 'default' => true ),
2009-10-07 02:26:31 +00:00
'fr' , 'es' , 'it' , 'de'
2009-08-14 02:13:46 +00:00
),
2009-08-15 19:38:12 +00:00
'capabilities' => array (
2009-08-15 20:21:52 +00:00
'submit_transcriptions' => 'administrator' ,
'approve_transcriptions' => 'administrator' ,
2009-08-15 19:38:12 +00:00
'change_languages' => 'administrator'
2009-09-13 18:46:02 +00:00
),
2009-09-22 02:10:17 +00:00
'load_default_styles' => true ,
2009-09-24 02:38:11 +00:00
'automatic_embedding' => true ,
2009-09-24 11:29:33 +00:00
'search_integration' => true ,
2009-10-01 01:50:16 +00:00
'excerpt_distance' => 30 ,
2009-10-02 02:43:31 +00:00
'use_nl2br' => false ,
2009-10-05 00:09:59 +00:00
'high_insertion_level' => false ,
'hide_transcript' => array (
'home' => true ,
'single' => false
2009-10-05 02:37:22 +00:00
),
2009-10-06 01:35:49 +00:00
'transcript_effects' => false ,
2009-10-07 02:26:31 +00:00
'allow_html' => false ,
'filters_to_use' => 'simple'
2009-08-13 16:37:33 +00:00
);
2009-08-15 19:38:12 +00:00
var $capabilities = array ();
2009-08-13 17:12:10 +00:00
var $language_file ;
var $all_languages = array ();
2009-08-14 17:45:50 +00:00
var $notices = array ();
2009-10-07 02:26:31 +00:00
var $override_filter_info = false ;
2009-08-19 23:58:24 +00:00
2009-09-13 16:35:20 +00:00
var $is_ajax = false ;
2009-08-19 23:58:24 +00:00
/**
* Initialize the admin interface .
* @ param WhatDidTheySay $what_did_they_say The WhatDidTheySay object to use for all transcript transactions .
*/
2009-09-06 22:15:37 +00:00
function WhatDidTheySayAdmin () {
2009-08-13 17:12:10 +00:00
$this -> language_file = dirname ( __FILE__ ) . '/../data/lsr-language.txt' ;
2009-08-12 23:51:23 +00:00
}
2009-10-07 02:26:31 +00:00
// just in case things need to be unit tested...
function get_filters_dir () { return WP_CONTENT_DIR . '/transcript-filters' ; }
function _get_abspath () { return ABSPATH ; }
2009-08-12 23:51:23 +00:00
2009-08-16 18:17:20 +00:00
/**
* Initialize the object .
*/
2009-08-15 20:45:08 +00:00
function init () {
2009-10-09 14:58:29 +00:00
global $wpdb ;
2009-10-06 10:53:19 +00:00
// set up capabilities
2009-08-15 19:38:12 +00:00
$this -> capabilities = array (
2009-08-15 20:21:52 +00:00
'submit_transcriptions' => __ ( 'Submit transcriptions to a post' , 'what-did-they-say' ),
'approve_transcriptions' => __ ( 'Approve transcriptions to a post' , 'what-did-they-say' ),
2009-08-15 19:38:12 +00:00
'change_languages' => __ ( 'Change the available languages' , 'what-did-they-say' )
);
2009-10-06 10:53:19 +00:00
// does this copy of wdts?!? reference new options?
2009-09-13 18:46:02 +00:00
$options = get_option ( 'what-did-they-say-options' );
if ( ! is_array ( $options )) {
2009-09-25 03:37:05 +00:00
$this -> install ();
2009-10-02 01:24:56 +00:00
} else {
$any_changes = false ;
foreach ( $this -> default_options as $key => $value ) {
if ( ! isset ( $options [ $key ])) {
$any_changes = true ; $options [ $key ] = $value ;
}
}
if ( $any_changes ) { update_option ( 'what-did-they-say-options' , $options ); }
2009-09-13 18:46:02 +00:00
}
2009-10-06 10:53:19 +00:00
// pages
2009-08-12 23:51:23 +00:00
add_action ( 'admin_menu' , array ( & $this , 'admin_menu' ));
2009-08-14 17:45:50 +00:00
add_action ( 'admin_notices' , array ( & $this , 'admin_notices' ));
2009-10-06 10:53:19 +00:00
add_action ( 'template_redirect' , array ( & $this , 'template_redirect' ));
2009-08-19 22:54:12 +00:00
2009-10-06 10:53:19 +00:00
// capabilities
2009-08-15 20:21:52 +00:00
add_filter ( 'user_has_cap' , array ( & $this , 'user_has_cap' ), 5 , 3 );
2009-10-06 10:53:19 +00:00
// display effects
2009-10-07 02:26:31 +00:00
$filters = new WDTSDisplayFilters ();
$reset_filter_value = true ;
if ( is_string ( $options [ 'filters_to_use' ])) {
$target = $this -> get_filters_dir () . '/' . preg_replace ( '#[^a-z0-9_-]#' , '' , strtolower ( $options [ 'filters_to_use' ]));
if ( is_dir ( $target )) {
$this -> override_filter_info = array ();
foreach ( glob ( $target . '/*' ) as $file ) {
if ( preg_match ( '#\.(php|inc)$#' , $file ) > 0 ) { $this -> override_filter_info [ 'php' ] = $file ; }
if ( preg_match ( '#\.(css)$#' , $file ) > 0 ) { $this -> override_filter_info [ 'css' ] = $file ; }
}
if ( isset ( $this -> override_filter_info [ 'php' ])) {
$class_name = preg_replace ( '#\..*$#' , '' , basename ( $this -> override_filter_info [ 'php' ]));
require_once ( $this -> override_filter_info [ 'php' ]);
if ( class_exists ( $class_name )) {
$filters = new $class_name ();
$reset_filter_value = false ;
}
}
}
}
foreach ( array (
array ( 'the_media_transcript' , 2 ),
array ( 'the_language_name' , 2 ),
array ( 'the_matching_transcript_excerpts' , 3 ),
array ( 'the_transcript_language_name' , 3 ),
array ( 'the_transcript_format_string' , 1 ),
array ( 'the_transcript_opener' , 1 ),
array ( 'the_transcript_transition_effect' , 2 ),
array ( 'filter_shortcode_dialog' , 4 ),
array ( 'filter_shortcode_scene_action' , 2 ),
array ( 'filter_shortcode_scene_heading' , 2 )
) as $filter_info ) {
list ( $method , $parameters ) = $filter_info ;
if ( method_exists ( $filters , $method )) {
add_filter ( $method , array ( & $filters , $method ), 10 , $parameters );
}
}
2009-10-06 01:13:35 +00:00
2009-10-06 10:53:19 +00:00
// short codes
foreach ( get_class_methods ( $this ) as $method ) {
if ( strpos ( $method , " shortcode_ " ) === 0 ) {
$shortcode_name = str_replace ( " _ " , " - " , str_replace ( " shortcode_ " , " " , $method ));
add_shortcode ( $shortcode_name , array ( & $this , $method ));
}
}
// search transcripts, too?
2009-09-24 11:29:33 +00:00
if ( $options [ 'search_integration' ]) {
add_filter ( 'posts_where' , array ( & $this , 'posts_where' ));
add_filter ( 'posts_join' , array ( & $this , 'posts_join' ));
}
2009-09-24 02:38:11 +00:00
2009-10-06 10:53:19 +00:00
// try to automatically embed editors?
2009-09-24 02:38:11 +00:00
if ( $options [ 'automatic_embedding' ]) {
2009-10-02 02:43:31 +00:00
add_filter ( 'the_content' , array ( & $this , 'the_content_automatic_embedding' ), $options [ 'high_insertion_level' ] ? 100 : 15 );
2009-09-24 02:38:11 +00:00
}
2009-09-29 01:54:02 +00:00
2009-10-06 10:53:19 +00:00
// add extra script bits if this user can edit
2009-10-05 00:09:59 +00:00
if ( current_user_can ( 'submit_transcriptions' )) {
add_action ( 'wp_footer' , array ( & $this , 'wp_footer' ));
}
2009-10-09 01:18:24 +00:00
// sidebar widget
wp_register_sidebar_widget ( 'what-did-they-say' , __ ( 'What Did They Say?!? Transcript' , 'what-did-they-say' ), array ( & $this , 'transcript_sidebar_widget' ), array ( 'description' => __ ( 'Show the transcript for the current post.' , 'what-did-they-say' )));
2009-10-06 10:53:19 +00:00
// handle form submission
2009-08-14 17:45:50 +00:00
if ( isset ( $_REQUEST [ 'wdts' ])) {
2009-10-05 00:09:59 +00:00
if ( isset ( $_REQUEST [ 'wdts' ][ 'script' ])) {
$language_options = new WDTSLanguageOptions ();
include ( 'partials/_editor-script.inc' );
exit ( 0 );
}
2009-08-14 17:45:50 +00:00
if ( isset ( $_REQUEST [ 'wdts' ][ '_nonce' ])) {
if ( wp_verify_nonce ( $_REQUEST [ 'wdts' ][ '_nonce' ], 'what-did-they-say' )) {
2009-10-09 14:58:29 +00:00
if (( $_REQUEST [ 'wdts' ][ 'post_id' ] <= 0 ) && ( $_POST [ 'post_ID' ] > 0 )) {
$_REQUEST [ 'wdts' ][ 'post_id' ] = $_POST [ 'post_ID' ];
}
2009-08-14 17:45:50 +00:00
$this -> handle_update ( $_REQUEST [ 'wdts' ]);
2009-09-13 16:35:20 +00:00
if ( $this -> is_ajax ) { exit ( 0 ); }
2009-08-12 23:51:23 +00:00
}
2009-09-13 18:46:02 +00:00
}
2009-08-12 23:51:23 +00:00
}
2009-10-09 14:58:29 +00:00
$this -> transcript_count = ( int ) $wpdb -> get_var ( $wpdb -> prepare ( " SELECT count( $wpdb->postmeta .meta_key) FROM $wpdb->postmeta WHERE $wpdb->postmeta .meta_key = 'approved_transcripts' " ));
}
2009-08-14 02:13:46 +00:00
2009-10-09 01:18:24 +00:00
/** Widget **/
function transcript_sidebar_widget () {
transcripts_display ();
}
2009-10-06 01:25:28 +00:00
/** Actions **/
2009-10-05 00:09:59 +00:00
function wp_footer () {
2009-09-30 02:39:37 +00:00
$nonce = wp_create_nonce ( 'what-did-they-say' );
2009-10-05 00:09:59 +00:00
echo '<script type="text/javascript">' ;
echo 'WhatDidTheySay.ajax_url = "' . addslashes ( $_SERVER [ 'REQUEST_URI' ]) . '";' ;
echo 'WhatDidTheySay.nonce = "' . $nonce . '";' ;
echo '</script>' ;
2009-09-30 02:39:37 +00:00
}
2009-09-24 01:58:02 +00:00
/**
* Action for when a non - admin page is displayed .
*/
2009-09-13 18:46:02 +00:00
function template_redirect () {
2009-10-05 00:09:59 +00:00
wp_enqueue_script ( 'wdts-script' , get_bloginfo ( 'url' ) . '?wdts[script]=true' , array ( 'prototype' ));
wp_enqueue_script ( 'toggle-transcript' , plugin_dir_url ( dirname ( __FILE__ )) . 'js/toggle-transcript.js' , array ( 'prototype' , 'wdts-script' ), false , true );
2009-10-05 02:37:22 +00:00
2009-09-25 12:22:24 +00:00
if ( current_user_can ( 'submit_transcriptions' )) {
wp_enqueue_script ( 'scriptaculous-effects' );
2009-10-05 00:09:59 +00:00
wp_enqueue_script ( 'edit-transcripts' , plugin_dir_url ( dirname ( __FILE__ )) . 'js/edit-transcripts.js' , array ( 'scriptaculous-effects' , 'wdts-script' ));
2009-09-29 01:54:02 +00:00
wp_enqueue_style ( 'wdts-admin' , plugin_dir_url ( dirname ( __FILE__ )) . 'css/wdts-admin.css' );
2009-09-25 12:22:24 +00:00
}
2009-10-06 01:25:28 +00:00
2009-09-13 18:46:02 +00:00
$options = get_option ( 'what-did-they-say-options' );
if ( ! empty ( $options [ 'load_default_styles' ])) {
2009-10-06 01:25:28 +00:00
wp_enqueue_style ( 'wdts-defaults' , plugin_dir_url ( dirname ( __FILE__ )) . 'css/wdts-defaults.css' );
2009-10-05 02:37:22 +00:00
}
2009-10-07 02:26:31 +00:00
if ( isset ( $this -> override_filter_info [ 'css' ])) {
wp_enqueue_style ( 'wdts-override' , str_replace ( realpath ( $this -> _get_abspath ()), '' , realpath ( $this -> override_filter_info [ 'css' ])));
}
2009-10-05 02:37:22 +00:00
if ( $options [ 'transcript_effects' ]) {
wp_enqueue_script ( 'scriptaculous-effects' );
2009-09-13 18:46:02 +00:00
}
}
2009-09-13 16:35:20 +00:00
2009-09-24 01:58:02 +00:00
/**
2009-10-06 01:25:28 +00:00
* Handle show_admin action .
2009-09-24 01:58:02 +00:00
*/
2009-10-06 01:25:28 +00:00
function admin_notices () {
if ( ! empty ( $this -> notices )) {
echo '<div class="updated fade">' ;
foreach ( $this -> notices as $notice ) { echo " <p> " . $notice . " </p> " ; }
echo '</div>' ;
}
2009-09-13 18:46:02 +00:00
}
2009-09-24 01:58:02 +00:00
/**
2009-10-06 01:25:28 +00:00
* Handle plugin installation .
2009-09-24 01:58:02 +00:00
*/
2009-10-06 01:25:28 +00:00
function install () {
$this -> read_language_file ();
$options = get_option ( 'what-did-they-say-options' );
if ( empty ( $options )) {
$this -> default_options [ 'languages' ] = $this -> build_default_languages ();
ksort ( $this -> default_options [ 'languages' ]);
update_option ( 'what-did-they-say-options' , $this -> default_options );
2009-09-13 16:35:20 +00:00
}
2009-09-13 18:46:02 +00:00
}
2009-09-24 01:58:02 +00:00
/**
2009-10-06 01:25:28 +00:00
* Handle admin_menu action .
2009-09-24 01:58:02 +00:00
*/
2009-10-06 01:25:28 +00:00
function admin_menu () {
global $pagenow , $plugin_page ;
2009-09-24 01:58:02 +00:00
2009-10-06 01:25:28 +00:00
wp_enqueue_script ( 'wdts-script' , get_bloginfo ( 'url' ) . '?wdts[script]=true' , array ( 'prototype' ));
if ( current_user_can ( 'submit_transcriptions' )) {
add_options_page (
__ ( 'What Did They Say?!?' , 'what-did-they-say' ),
__ ( 'What Did They Say?!?' , 'what-did-they-say' ),
'submit_transcriptions' ,
'manage-wdts' ,
array ( & $this , 'manage_admin' )
);
if ( $plugin_page == " manage-wdts " ) {
$this -> read_language_file ();
wp_enqueue_style ( 'wdts-admin' , plugin_dir_url ( dirname ( __FILE__ )) . 'css/wdts-admin.css' );
wp_enqueue_style ( 'wdts-defaults' , plugin_dir_url ( dirname ( __FILE__ )) . 'css/wdts-defaults.css' );
$this -> plugin_data = get_plugin_data ( $this -> _parent_file );
2009-10-09 14:58:29 +00:00
if ( $this -> transcript_count == 0 ) {
$this -> notices [] = __ ( 'Welcome to <strong>What Did They Say?!?</strong> To get started, read the <strong>Introduction</strong>, and then <strong>How It Works</strong>.' , 'what-did-they-say' );
} elseif ( $this -> transcript_count < 10 ) {
$this -> notices [] = __ ( 'Is <strong>What Did They Say?!?</strong> working out for you? Let John know via email (<a href="mailto:john@coswellproductions.com">john@coswellproductions.com</a>) or Twitter (<a href="http://twitter.com/JohnBintz">@JohnBintz</a>).' , 'what-did-they-say' );
}
2009-10-06 01:25:28 +00:00
}
wp_enqueue_script ( 'scriptaculous-effects' );
add_action ( 'wp_head' , array ( & $this , 'include_editor_javascript' ));
}
if ( current_user_can ( 'approve_transcriptions' )) {
if ( strpos ( $pagenow , " post " ) === 0 ) {
add_meta_box (
'manage-transcriptions' ,
__ ( 'Manage Transcripts' , 'what-did-they-say' ),
array ( & $this , 'manage_transcriptions_meta_box' ),
'post' ,
'normal' ,
'low'
);
wp_enqueue_style ( 'wdts-admin' , plugin_dir_url ( dirname ( __FILE__ )) . 'css/wdts-admin.css' );
wp_enqueue_style ( 'wdts-defaults' , plugin_dir_url ( dirname ( __FILE__ )) . 'css/wdts-defaults.css' );
2009-10-07 02:26:31 +00:00
if ( isset ( $this -> override_filter_info [ 'css' ])) {
wp_enqueue_style ( 'wdts-override' , str_replace ( realpath ( $this -> _get_abspath ()), '' , realpath ( $this -> override_filter_info [ 'css' ])));
}
2009-10-06 01:25:28 +00:00
wp_enqueue_script ( 'scriptaculous-effects' );
wp_enqueue_script ( 'edit-transcripts' , plugin_dir_url ( dirname ( __FILE__ )) . 'js/edit-transcripts.js' , array ( 'scriptaculous-effects' , 'wdts-script' ));
2009-10-09 14:58:29 +00:00
add_action ( 'wp_head' , array ( & $this , 'include_editor_javascript' ));
}
2009-10-06 01:25:28 +00:00
}
2009-08-12 23:51:23 +00:00
}
2009-08-13 16:37:33 +00:00
2009-10-06 01:25:28 +00:00
/** Display Filters **/
2009-09-24 01:58:02 +00:00
/**
2009-10-06 01:25:28 +00:00
* Attempt to automatically embed transcripts in posts .
2009-09-24 01:58:02 +00:00
*/
2009-10-06 01:25:28 +00:00
function the_content_automatic_embedding ( $content ) {
ob_start ();
transcripts_display ();
the_media_transcript_queue_editor ();
return $content . ob_get_clean ();
2009-09-13 18:46:02 +00:00
}
2009-10-06 01:25:28 +00:00
/** Transcript Search Filters **/
/**
* Filter for WP_Query #get_posts to add searching for transcripts.
*/
function posts_where ( $where ) {
global $wpdb ;
$search = get_query_var ( 's' );
if ( ! empty ( $search )) {
$query = $wpdb -> prepare ( " OR ( $wpdb->postmeta .meta_key = %s " , 'approved_transcripts_words' );
$search = addslashes_gpc ( $search );
$query .= " AND $wpdb->postmeta .meta_value LIKE '% $search %') " ;
$exact = get_query_var ( 'exact' );
$n = ! empty ( $exact ) ? '' : '%' ;
$where = preg_replace ( " #( \ ( $wpdb->posts .post_title LIKE ' { $n } { $search } { $n } ' \ ))# " , '\1' . $query , $where );
}
return $where ;
}
/**
* Filter for WP_Query #get_posts to add searching for transcripts.
*/
function posts_join ( $join ) {
global $wpdb ;
$search = get_query_var ( 's' );
if ( ! empty ( $search )) {
$join .= " JOIN $wpdb->postmeta ON ( $wpdb->posts .ID = $wpdb->postmeta .post_id) " ;
}
return $join ;
}
2009-10-07 02:26:31 +00:00
/** Short codes **/
2009-10-06 01:25:28 +00:00
/**
* Dialog short code .
*/
function shortcode_dialog ( $atts , $speech ) {
extract ( shortcode_atts ( array (
'name' => 'Nobody' ,
'direction' => ''
), $atts ));
return end ( apply_filters ( 'filter_shortcode_dialog' , $name , $direction , $speech , " " ));
}
/**
* Scene action short code .
*/
function shortcode_scene_action ( $atts , $description ) {
extract ( shortcode_atts ( array (), $atts ));
return end ( apply_filters ( 'filter_shortcode_scene_action' , $description , " " ));
}
/**
* Scene heading short code .
*/
function shortcode_scene_heading ( $atts , $description ) {
extract ( shortcode_atts ( array (), $atts ));
return end ( apply_filters ( 'filter_shortcode_scene_heading' , $description , " " ));
}
/** Capabilities **/
2009-08-16 18:17:20 +00:00
/**
2009-08-19 23:58:24 +00:00
* Handle the user_has_cap filter .
* @ param array $capabilities The capabilities the user already has .
* @ param array $requested_capabilities The capabilities requested by current_user_can .
* @ param object $capability_name
* @ return array The list of capabilities this user now has .
2009-08-16 18:17:20 +00:00
*/
2009-08-15 20:21:52 +00:00
function user_has_cap ( $capabilities , $requested_capabilities , $capability_name ) {
$options = get_option ( 'what-did-they-say-options' );
2009-08-20 01:40:28 +00:00
if ( is_array ( $options )) {
2009-09-25 12:22:24 +00:00
$role_cascade = array ( 'subscriber' , 'contributor' , 'author' , 'editor' , 'administrator' );
2009-08-20 01:40:28 +00:00
$allowed_roles = array ();
for ( $i = 0 ; $i < count ( $role_cascade ); ++ $i ) {
2009-09-25 12:22:24 +00:00
if ( isset ( $capabilities [ $role_cascade [ $i ]])) {
$allowed_roles = array_slice ( $role_cascade , 0 , $i + 1 ); break ;
}
2009-08-20 01:40:28 +00:00
}
2009-08-15 20:21:52 +00:00
2009-08-20 01:40:28 +00:00
foreach ( $requested_capabilities as $requested_capability ) {
if ( in_array ( $options [ 'capabilities' ][ $requested_capability ], $allowed_roles )) {
$capabilities [ $requested_capability ] = true ;
}
2009-08-15 20:21:52 +00:00
}
}
return $capabilities ;
}
2009-08-16 18:17:20 +00:00
/**
2009-10-06 01:25:28 +00:00
* Check if the current user can edit the specified transcript .
2009-08-16 18:17:20 +00:00
*/
2009-10-06 01:25:28 +00:00
function current_user_can_edit_this_transcript ( $post_id , $transcript_id ) {
if ( current_user_can ( 'approve_transcriptions' )) {
$ok = true ;
} else {
$ok = false ;
if ( current_user_can ( 'submit_transcriptions' )) {
$queued_transcript_manager = new WDTSQueuedTranscript ( $post_id );
$user = wp_get_current_user ();
$transcripts = $queued_transcript_manager -> get_transcripts_for_user ( $user -> ID );
foreach ( $transcripts as $transcript ) {
if ( $transcript [ 'key' ] == $transcript_id ) {
$ok = true ; break ;
}
}
}
2009-08-14 17:45:50 +00:00
}
2009-10-06 01:25:28 +00:00
return $ok ;
2009-08-14 17:45:50 +00:00
}
2009-10-06 01:25:28 +00:00
/** Handle data updates **/
2009-08-16 18:17:20 +00:00
/**
* Handle an update to options .
2009-08-19 23:58:24 +00:00
* @ param array $info The part of the $_POST array for What Did They Say ? ! ?
2009-08-16 18:17:20 +00:00
*/
2009-08-14 17:45:50 +00:00
function handle_update ( $info ) {
2009-09-11 01:00:10 +00:00
if ( isset ( $info [ 'module' ])) {
$method_name = " handle_update_ " . str_replace ( " - " , " _ " , $info [ 'module' ]);
if ( method_exists ( $this , $method_name )) {
2009-10-06 01:35:49 +00:00
$info = $this -> _clean_child ( $info );
2009-09-11 01:00:10 +00:00
$result = $this -> { $method_name }( $info );
2009-08-16 16:29:25 +00:00
if ( ! empty ( $result )) { $this -> notices [] = $result ; }
2009-09-11 01:00:10 +00:00
}
2009-08-14 17:45:50 +00:00
}
}
2009-08-19 23:58:24 +00:00
2009-10-06 01:35:49 +00:00
function _clean_child ( $node ) {
if ( is_array ( $node )) {
$new_nodes = array ();
foreach ( $node as $key => $n ) {
$new_nodes [ $key ] = $this -> _clean_child ( $n );
}
return $new_nodes ;
} else {
$options = get_option ( 'what-did-they-say-options' );
$node = ( string ) $node ;
foreach ( array ( 'script' , 'style' , 'link' ) as $tag ) { $node = preg_replace ( " #< ${ tag}.*/${tag } ># " , '' , $node ); }
if ( ! $options [ 'allow_html' ]) { $node = strip_tags ( $node ); }
return $node ;
}
}
2009-08-19 23:58:24 +00:00
/**
* Handle updates to queued transcripts .
* @ param array $info The part of the $_POST array for What Did They Say ? ! ?
* @ return string | false A string if a message is to be displayed , or false if no message .
*/
function handle_update_queue_transcript ( $info ) {
2009-08-16 20:54:11 +00:00
$updated = false ;
if ( current_user_can ( 'submit_transcriptions' )) {
2009-09-11 16:45:18 +00:00
$transcript_options = new WDTSTranscriptOptions ( $info [ 'post_id' ]);
2009-09-10 02:42:46 +00:00
2009-09-11 16:45:18 +00:00
if ( $transcript_options -> are_new_transcripts_allowed ()) {
$queued_transcript_manager = new WDTSQueuedTranscript ( $info [ 'post_id' ]);
if ( $queued_transcript_manager -> save_transcript ( $info )) {
$updated = __ ( 'Transcript added to queue.' , 'what-did-they-say' );
} else {
2009-10-06 01:25:28 +00:00
$updated = __ ( 'Transcript not added to queue.' , 'what-did-they-say' );
2009-08-19 02:33:59 +00:00
}
2009-08-16 20:54:11 +00:00
}
2009-08-19 02:33:59 +00:00
}
2009-10-02 01:24:56 +00:00
if ( ! is_admin ()) {
header ( 'Location: ' . $_SERVER [ 'HTTP_REFERER' ]);
exit ( 0 );
} else {
return $updated ;
}
2009-08-16 20:54:11 +00:00
}
2009-08-14 17:45:50 +00:00
2009-09-29 01:54:02 +00:00
function handle_update_update_queued_transcript ( $info ) {
$this -> is_ajax = true ;
if ( $this -> current_user_can_edit_this_transcript ( $info [ 'post_id' ], $info [ 'key' ])) {
$queued_transcript_manager = new WDTSQueuedTranscript ( $info [ 'post_id' ]);
$queued_transcript_manager -> update_transcript ( $info );
$post = get_post ( $info [ 'post_id' ]);
$language_options = new WDTSLanguageOptions ();
$transcript_options = new WDTSTranscriptOptions ( $post -> ID );
$transcript = $queued_transcript_manager -> get_transcript_by_key ( $info [ 'key' ]);
$user = wp_get_current_user ();
include ( dirname ( __FILE__ ) . '/partials/_queued-transcript-contents.inc' );
return ;
}
header ( 'HTTP/1.1 401 Unauthorized' );
}
2009-08-19 23:58:24 +00:00
/**
* Handle updates to post transcripts .
* @ param array $info The part of the $_POST array for What Did They Say ? ! ?
* @ return string | false A string if a message is to be displayed , or false if no message .
*/
2009-09-11 01:20:01 +00:00
function handle_update_manage_post_transcripts ( $info ) {
2009-10-01 00:45:05 +00:00
if ( ! is_admin ()) { $this -> is_ajax = true ; }
2009-08-16 16:40:54 +00:00
$updated = false ;
if ( current_user_can ( 'approve_transcriptions' )) {
2009-09-11 01:20:01 +00:00
$approved_transcript_manager = new WDTSApprovedTranscript ( $info [ 'post_id' ]);
2009-08-19 22:54:12 +00:00
2009-09-11 01:20:01 +00:00
foreach ( $info [ 'transcripts' ] as $language => $transcript ) {
$approved_transcript_manager -> save_transcript ( array (
'language' => $language ,
'transcript' => $transcript
));
}
2009-08-19 22:54:12 +00:00
2009-09-11 01:20:01 +00:00
$transcript_options = new WDTSTranscriptOptions ( $info [ 'post_id' ]);
$transcript_options -> set_allow_transcripts ( isset ( $info [ 'allow_on_post' ]));
2009-08-19 22:54:12 +00:00
2009-09-11 16:45:18 +00:00
$queued_transcript_manager = new WDTSQueuedTranscript ( $info [ 'post_id' ]);
$queued_transcripts = $queued_transcript_manager -> get_transcripts ();
2009-09-11 01:20:01 +00:00
if ( is_array ( $queued_transcriptions )) {
2009-09-11 16:45:18 +00:00
$transcripts_to_delete = array ();
2009-08-19 22:54:12 +00:00
2009-09-11 16:45:18 +00:00
foreach ( $queued_transcriptions as $transcription ) { $transcripts_to_delete [ $transcription -> id ] = true ; }
2009-09-13 16:35:20 +00:00
if ( isset ( $info [ 'queue' ])) {
foreach ( $info [ 'queue' ] as $id => $keep ) { unset ( $transcripts_to_delete [ $id ]); }
2009-09-11 01:20:01 +00:00
}
2009-08-19 22:54:12 +00:00
2009-09-11 16:45:18 +00:00
foreach ( array_keys ( $transcripts_to_delete ) as $id ) { $queued_transcripts -> delete_transcript ( $id ); }
2009-08-16 16:40:54 +00:00
}
2009-09-11 01:20:01 +00:00
2009-10-01 00:45:05 +00:00
if ( is_admin ()) {
$updated = __ ( 'Transcripts updated.' , 'what-did-they-say' );
} else {
return ;
}
}
if ( is_admin ()) {
return $updated ;
} else {
header ( 'HTTP/1.1 401 Unauthorized' );
2009-08-16 16:40:54 +00:00
}
}
2009-09-24 01:58:02 +00:00
/**
* Handle transcript approval .
*/
2009-09-13 16:35:20 +00:00
function handle_update_approve_transcript ( $info ) {
$this -> is_ajax = true ;
if ( current_user_can ( 'approve_transcriptions' )) {
$approved_transcript_manager = new WDTSApprovedTranscript ( $info [ 'post_id' ]);
$queued_transcript_manager = new WDTSQueuedTranscript ( $info [ 'post_id' ]);
if (( $transcript = $queued_transcript_manager -> delete_transcript_by_key ( $info [ 'key' ])) !== false ) {
$approved_transcript_manager -> save_transcript ( $transcript );
return ;
}
header ( 'HTTP/1.1 500 Internal Server Error' );
return ;
}
header ( 'HTTP/1.1 401 Unauthorized' );
}
2009-09-24 01:58:02 +00:00
/**
* Handle transcript deletion .
*/
2009-09-13 16:35:20 +00:00
function handle_update_delete_transcript ( $info ) {
$this -> is_ajax = true ;
2009-08-16 16:40:54 +00:00
2009-09-29 01:54:02 +00:00
if ( $this -> current_user_can_edit_this_transcript ( $info [ 'post_id' ], $info [ 'key' ])) {
2009-09-13 16:35:20 +00:00
$queued_transcript_manager = new WDTSQueuedTranscript ( $info [ 'post_id' ]);
if (( $transcript = $queued_transcript_manager -> delete_transcript_by_key ( $info [ 'key' ])) !== false ) {
return ;
}
header ( 'HTTP/1.1 500 Internal Server Error' );
return ;
}
2009-10-06 01:25:28 +00:00
header ( 'HTTP/1.1 401 Unauthorized' );
2009-09-13 16:35:20 +00:00
}
2009-09-24 01:58:02 +00:00
/**
* Handle updating default styles .
*/
2009-09-23 02:30:16 +00:00
function handle_update_styles ( $info ) {
2009-09-13 18:46:02 +00:00
$updated = false ;
if ( current_user_can ( 'edit_themes' )) {
$options = get_option ( 'what-did-they-say-options' );
2009-10-07 02:26:31 +00:00
foreach ( array ( 'load_default_styles' , 'use_nl2br' , 'transcript_effects' , 'allow_html' ) as $field ) { $options [ $field ] = isset ( $info [ $field ]); }
$options [ 'excerpt_distance' ] = ! empty ( $info [ 'excerpt_distance' ]) ? $info [ 'excerpt_distance' ] : 30 ;
foreach ( array_keys ( $options [ 'hide_transcript' ]) as $type ) {
$options [ 'hide_transcript' ][ $type ] = isset ( $info [ 'hide_transcript' ][ $type ]);
2009-10-05 02:37:22 +00:00
}
2009-10-07 02:26:31 +00:00
if ( isset ( $info [ 'filters_to_use' ])) {
$options [ 'filters_to_use' ] = preg_replace ( '#[^a-z0-9_-]#' , '' , strtolower ( $info [ 'filters_to_use' ]));
}
2009-09-13 18:46:02 +00:00
update_option ( 'what-did-they-say-options' , $options );
$updated = __ ( 'Default styles option updated.' , 'what-did-they-say' );
}
return $updated ;
}
2009-10-02 02:43:31 +00:00
/**
* Handle updating the insertion level .
*/
function handle_update_high_insertion_level ( $info ) {
$updated = false ;
if ( current_user_can ( 'manage_options' )) {
$options = get_option ( 'what-did-they-say-options' );
$options [ 'high_insertion_level' ] = isset ( $info [ 'high_insertion_level' ]);
update_option ( 'what-did-they-say-options' , $options );
$updated = __ ( 'Insertion level updated.' , 'what-did-they-say' );
}
return $updated ;
}
2009-08-19 23:58:24 +00:00
/**
* Handle updates to languages .
* @ param array $info The part of the $_POST array for What Did They Say ? ! ?
* @ return string | false A string if a message is to be displayed , or false if no message .
*/
function handle_update_languages ( $info ) {
2009-08-14 17:45:50 +00:00
$updated = false ;
2009-08-16 16:40:54 +00:00
if ( current_user_can ( 'change_languages' )) {
2009-09-09 12:20:07 +00:00
$language_options = new WDTSLanguageOptions ();
2009-08-19 23:58:24 +00:00
switch ( $info [ 'action' ]) {
2009-08-16 16:40:54 +00:00
case " delete " :
2009-09-09 12:20:07 +00:00
if ( $result = $language_options -> delete_language ( $info [ 'code' ])) {
$updated = sprintf ( __ ( '%s deleted.' , 'what-did-they-say' ), $result [ 'name' ]);
2009-09-11 01:00:10 +00:00
} else {
$updated = sprintf ( __ ( 'Language not deleted!' , 'what-did-they-say' ));
2009-09-09 12:20:07 +00:00
}
2009-08-16 16:40:54 +00:00
break ;
case " add " :
$this -> read_language_file ();
2009-08-19 23:58:24 +00:00
if ( isset ( $this -> all_languages [ $info [ 'code' ]])) {
2009-09-11 01:00:10 +00:00
if ( $language_options -> add_language ( $info [ 'code' ], array ( 'name' => $this -> all_languages [ $info [ 'code' ]]))) {
$updated = sprintf ( __ ( '%s added.' , 'what-did-they-say' ), $this -> all_languages [ $info [ 'code' ]]);
} else {
$updated = sprintf ( __ ( 'Language not added!' , 'what-did-they-say' ));
}
2009-08-16 16:40:54 +00:00
}
break ;
case " default " :
2009-09-11 01:00:10 +00:00
if ( $language_options -> set_default_language ( $info [ 'code' ])) {
$updated = sprintf ( __ ( '%s set as default.' , 'what-did-they-say' ), $language_options -> get_language_name ( $info [ 'code' ]));
} else {
$updated = sprintf ( __ ( 'Language not set as default!' , 'what-did-they-say' ));
2009-08-14 10:54:25 +00:00
}
2009-08-16 16:40:54 +00:00
break ;
case " rename " :
2009-09-11 01:00:10 +00:00
$original_language_name = $language_options -> get_language_name ( $info [ 'code' ]);
if ( $language_options -> rename_language ( $info [ 'code' ], $info [ 'name' ])) {
$updated = sprintf ( __ ( '%1$s renamed to %2$s.' , 'what-did-they-say' ), $original_language_name , $info [ 'name' ]);
} else {
$updated = sprintf ( __ ( 'Language not renamed!' , 'what-did-they-say' ));
2009-08-14 11:09:37 +00:00
}
2009-08-16 16:40:54 +00:00
break ;
}
2009-08-19 23:58:24 +00:00
}
2009-08-14 17:45:50 +00:00
return $updated ;
2009-08-13 23:32:42 +00:00
}
2009-08-19 23:58:24 +00:00
/**
* Handle updates to user capabilities .
* @ param array $info The part of the $_POST array for What Did They Say ? ! ?
* @ return string | false A string if a message is to be displayed , or false if no message .
*/
function handle_update_capabilities ( $info ) {
2009-08-15 19:38:12 +00:00
$updated = false ;
2009-08-16 16:40:54 +00:00
if ( current_user_can ( 'edit_users' )) {
$options = get_option ( 'what-did-they-say-options' );
2009-09-11 01:03:27 +00:00
if ( isset ( $info [ 'capabilities' ])) {
foreach ( array_keys ( $this -> default_options [ 'capabilities' ]) as $capability ) {
if ( isset ( $info [ 'capabilities' ][ $capability ])) {
$options [ 'capabilities' ][ $capability ] = $info [ 'capabilities' ][ $capability ];
2009-08-15 19:53:55 +00:00
}
2009-09-11 01:03:27 +00:00
}
$updated = __ ( 'User capabilities updated.' , 'what-did-they-say' );
2009-08-16 16:40:54 +00:00
}
if ( $updated !== false ) {
update_option ( 'what-did-they-say-options' , $options );
}
2009-08-15 19:53:55 +00:00
}
return $updated ;
2009-08-15 19:38:12 +00:00
}
2009-08-13 17:12:10 +00:00
2009-08-20 01:40:28 +00:00
/**
* Handle resettings what - did - they - say - options .
* @ param array $info The part of the $_POST array for What Did They Say ? ! ?
* @ return string | false A string if a message is to be displayed , or false if no message .
*/
function handle_update_reset_options ( $info ) {
$updated = false ;
if ( current_user_can ( 'manage_options' )) {
2009-09-11 01:03:27 +00:00
delete_option ( 'what-did-they-say-options' );
$this -> install ();
$updated = __ ( '<strong>What Did They Say?!?</strong> options reset.' , 'what-did-they-say' );
2009-08-20 01:40:28 +00:00
}
return $updated ;
}
2009-09-24 11:29:33 +00:00
/**
* Handle resettings what - did - they - say - options .
* @ param array $info The part of the $_POST array for What Did They Say ? ! ?
* @ return string | false A string if a message is to be displayed , or false if no message .
*/
function handle_update_core_features ( $info ) {
$updated = false ;
if ( current_user_can ( 'manage_options' )) {
$options = get_option ( 'what-did-they-say-options' );
foreach ( array ( 'automatic_embedding' , 'search_integration' ) as $field ) {
$options [ $field ] = isset ( $info [ $field ]);
}
update_option ( 'what-did-they-say-options' , $options );
$updated = __ ( '<strong>What Did They Say?!?</strong> core options changed.' , 'what-did-they-say' );
}
return $updated ;
}
2009-10-06 01:25:28 +00:00
/** Language management **/
2009-09-24 11:29:33 +00:00
2009-08-19 23:58:24 +00:00
/**
* Read a data file containing all the known languages on Earth .
* The data originally came from http :// www . langtag . net / , specifically http :// www . langtag . net / registries / lsr - language . txt .
* The data file format is tab - delimited , with the following fields :
* language_code date_added name_of_language additional_information
* @ return array The list of all known languages on Earth as code => language .
*/
2009-08-13 17:12:10 +00:00
function read_language_file () {
if ( file_exists ( $this -> language_file )) {
2009-09-04 00:04:08 +00:00
foreach ( file ( $this -> language_file ) as $language ) {
$language = trim ( $language );
2009-09-13 16:35:20 +00:00
list ( $code , $date_added , $name ) = explode ( " \t " , $language );
2009-08-13 17:12:10 +00:00
$this -> all_languages [ $code ] = $name ;
2009-10-06 01:25:28 +00:00
}
2009-08-13 17:12:10 +00:00
}
return $this -> all_languages ;
}
2009-08-19 23:58:24 +00:00
/**
* From $this -> default_options , fill in the language details from the language file .
* @ return array The language info will all details filled in .
*/
2009-08-14 11:03:58 +00:00
function build_default_languages () {
$full_default_language_info = array ();
foreach ( $this -> default_options [ 'languages' ] as $info ) {
$code = null ;
if ( is_string ( $info )) {
$code = $info ;
$default = false ;
}
if ( is_array ( $info )) {
extract ( $info );
}
if ( isset ( $this -> all_languages [ $code ])) {
$full_default_language_info [ $code ] = array ( 'name' => $this -> all_languages [ $code ]);
if ( ! empty ( $default )) {
$full_default_language_info [ $code ][ 'default' ] = true ;
}
}
}
return $full_default_language_info ;
}
2009-10-06 01:25:28 +00:00
/** What Did They Say?!? administration screens **/
2009-08-19 23:58:24 +00:00
2009-10-07 02:26:31 +00:00
function _get_available_override_filters () {
$available_filters = array ();
if ( is_dir ( $this -> get_filters_dir ())) {
foreach ( glob ( $this -> get_filters_dir () . '/*' ) as $dir ) {
if ( is_dir ( $dir )) {
if ( basename ( $dir ) == preg_replace ( '#[^a-z0-9_-]#' , '' , strtolower ( basename ( $dir )))) {
foreach ( glob ( $dir . '/*' ) as $file ) {
if ( preg_match ( '#^(.*)\.(inc|php)$#' , basename ( $file ), $matches ) > 0 ) {
$available_filters [] = basename ( $dir );
}
}
}
}
}
}
return $available_filters ;
}
2009-08-19 23:58:24 +00:00
/**
* Show the admin page .
*/
2009-08-15 19:58:01 +00:00
function manage_admin () {
2009-09-24 02:44:30 +00:00
global $wpdb ;
2009-08-13 23:32:42 +00:00
$options = get_option ( 'what-did-they-say-options' );
2009-08-20 01:40:28 +00:00
2009-08-14 02:13:46 +00:00
$nonce = wp_create_nonce ( 'what-did-they-say' );
2009-10-07 02:26:31 +00:00
$available_filters = $this -> _get_available_override_filters ();
2009-10-09 14:58:29 +00:00
$suggested_amount = 20 + ( $this -> transcript_count * 0.1 );
2009-10-07 02:26:31 +00:00
2009-09-24 01:34:06 +00:00
include ( 'partials/admin.inc' );
2009-08-12 23:51:23 +00:00
}
2009-08-19 23:58:24 +00:00
/**
* Show the Manage Transcriptions meta box .
*/
2009-08-12 23:51:23 +00:00
function manage_transcriptions_meta_box () {
2009-08-13 16:37:33 +00:00
global $post ;
2009-08-15 20:21:52 +00:00
2009-08-15 19:38:12 +00:00
$options = get_option ( 'what-did-they-say-options' );
2009-08-20 01:40:28 +00:00
2009-09-11 01:20:01 +00:00
foreach ( array ( 'Approved' , 'Queued' ) as $name ) {
$var_name = strtolower ( $name );
$class_name = " WDTS ${ name } Transcript " ;
$ { " ${ var_name}_transcript_manager" } = new $class_name ( $post->ID );
$ { " ${ var_name}_transcripts" } = ${ "${var_name}_transcript_manager" } ->get_transcripts();
}
2009-09-13 16:35:20 +00:00
$transcript_options = new WDTSTranscriptOptions ( $post -> ID );
2009-10-09 01:58:06 +00:00
$queued_transcripts = new WDTSQueuedTranscript ( $post -> ID );
2009-09-13 16:35:20 +00:00
2009-09-29 01:58:33 +00:00
$language_options = new WDTSLanguageOptions ();
2009-08-15 20:45:08 +00:00
$nonce = wp_create_nonce ( 'what-did-they-say' );
2009-10-01 01:43:07 +00:00
include ( 'partials/meta-box.inc' );
2009-08-15 19:38:12 +00:00
}
2009-08-12 23:51:23 +00:00
}
?>