/** * Display messages when CPM operations are completed. */ function display_operation_messages($info) { global $comicpress_manager; extract($info); if (count($invalid_filenames) > 0) { $comicpress_manager->messages[] = __("<strong>The following filenames were invalid:</strong> ", 'comicpress-manager') . implode(", ", $invalid_filenames); } if (count($invalid_image_types) > 0) { $comicpress_manager->warnings[] = __("<strong>According to GD, the following files were invalid image files:</strong> ", 'comicpress-manager') . implode(", ", $invalid_image_types); } if (count($files_uploaded) > 0) { $comicpress_manager->messages[] = __("<strong>The following files were uploaded:</strong> ", 'comicpress-manager') . implode(", ", $files_uploaded); } if (count($files_not_uploaded) > 0) { $comicpress_manager->messages[] = __("<strong>The following files were not uploaded, or the permissions on the uploaded file do not allow reading the file.</strong> Check the permissions of both the target directory and the upload directory and try again: ", 'comicpress-manager') . implode(", ", $files_not_uploaded); } if (count($thumbnails_written) > 0) { $comicpress_manager->messages[] = __("<strong>Thumbnails were written for the following files:</strong> ", 'comicpress-manager') . implode(", ", $thumbnails_written); } if (count($thumbnails_not_written) > 0) { $comicpress_manager->messages[] = __("<strong>Thumbnails were not written for the following files.</strong> Check the permissions on the rss & archive folders, and make sure the files you're processing are valid image files: ", 'comicpress-manager') . implode(", ", $thumbnails_not_written); } if (count($new_thumbnails_not_needed) > 0) { $comicpress_manager->messages[] = __("<strong>New thumbnails were not needed for the following files:</strong> ", 'comicpress-manager') . implode(", ", $new_thumbnails_not_needed); } if (count($gd_rename_file) > 0) { $comicpress_manager->messages[] = __("<strong>GD was able to recognize the filetypes of these files and change their extensions to match:</strong> ", 'comicpress-manager') . implode(", ", $gd_rename_file); } if (count($did_convert_cmyk_jpeg) > 0) { $comicpress_manager->messages[] = __("<strong>The following JPEG files have been converted from CMYK to RGB:</strong> ", 'comicpress-manager') . implode(", ", $did_convert_cmyk_jpeg); } if (count($posts_created) > 0) { $post_links = array(); foreach ($posts_created as $comic_post) { $post_links[] = "<li><strong>" . $comic_post['post_title'] . "</strong> (" . $comic_post['post_date'] . ") " . generate_view_edit_post_links($comic_post) . "</li>"; } $comicpress_manager->messages[] = __("<strong>New posts created.</strong> View them from the links below:", 'comicpress-manager') . " <ul>" . implode("", $post_links) . "</ul>"; } else { if (count($files_uploaded) > 0) { if (count($duplicate_posts) == 0) { $comicpress_manager->messages[] = __("<strong>No new posts created.</strong>", 'comicpress-manager'); } } } if (count($duplicate_posts) > 0) { $post_links = array(); foreach ($duplicate_posts as $info) { list($comic_post, $comic_file) = $info; $post_links[] = "<li><strong>" . $comic_file . " — " . $comic_post['post_title'] . "</strong> (" . $comic_post['post_date'] . ") " . generate_view_edit_post_links($comic_post) . "</li>"; } $comicpress_manager->messages[] = __("<strong>The following files would have created duplicate posts.</strong> View them from the links below: ", 'comicpress-manager') . "<ul>" . implode("", $post_links) . "</ul>"; } }
/** * Show the Latest Posts in the Sidebar. */ function cpm_show_latest_posts() { global $cpm_config; $is_current = false; $is_previous = false; $current_timestamp = time(); foreach (cpm_query_posts() as $comic_post) { $timestamp = strtotime($comic_post->post_date); if ($timestamp < $current_timestamp) { $is_current = true; } if ($is_current) { if ($is_previous) { $previous_post = $comic_post; break; } $current_post = $comic_post; $is_previous = true; } else { $upcoming_post = $comic_post; } } $found_posts = compact('previous_post', 'current_post', 'upcoming_post'); $post_titles = array('previous_post' => __("Last Post", 'comicpress-manager'), 'current_post' => __("Current Post", 'comicpress-manager'), 'upcoming_post' => __("Upcoming Post", 'comicpress-manager')); ?> <div id="comicpress-latest-posts"> <?php if (!empty($found_posts)) { ?> <?php foreach ($post_titles as $key => $title) { if (!empty($found_posts[$key])) { $timestamp = strtotime($found_posts[$key]->post_date); $post_date = date(CPM_DATE_FORMAT, $timestamp); $comic_file = null; foreach ($cpm_config->comic_files as $file) { if (($result = cpm_breakdown_comic_filename(pathinfo($file, PATHINFO_BASENAME))) !== false) { if ($result['date'] == $post_date) { $comic_file = $file; break; } } } ?> <div class="<?php echo !empty($comic_file) ? "comic-found" : "comic-not-found"; ?> "> <h3><?php echo $title; ?> — <?php echo $post_date; ?> </h3> <h4><?php echo $found_posts[$key]->post_title; ?> [<?php echo generate_view_edit_post_links((array) $found_posts[$key]); ?> ]</h4> <?php if (!empty($comic_file)) { ?> <img alt="<?php echo $found_posts[$key]->post_title; ?> " src="<?php echo cpm_build_comic_uri($file, CPM_DOCUMENT_ROOT); ?> " width="320" /> <?php } else { ?> <div class="alert">Comic file not found!</div> <?php } ?> </div> <?php } } } else { ?> <p>You don't have any comic posts!</p> <?php } ?> </div> <?php }
/** * The generate status dialog. */ function cpm_manager_status() { global $cpm_config; $cpm_config->need_calendars = true; if (cpm_get_subcomic_directory() !== false) { $cpm_config->messages[] = sprintf(__("<strong>Reminder:</strong> You are managing the <strong>%s</strong> comic subdirectory.", 'comicpress-manager'), get_cat_name(get_option('comicpress-manager-manage-subcomic'))); } if (cpm_option('cpm-skip-checks') != 1) { if (!function_exists('get_comic_path')) { $cpm_config->warnings[] = __('<strong>It looks like you\'re running an older version of ComicPress.</strong> Storyline, hovertext, and transcript are fully supported in <a href="http://comicpress.org/">ComicPress 2.7</a>. You can use hovertext and transcripts in earlier themes by using <tt>get_post_meta($post->ID, "hovertext", true)</tt> and <tt>get_post_meta($post->ID, "transcript", true)</tt>.', 'comicpress-manager'); } } ob_start(); ?> <h2 style="padding-right:0;"><?php _e("Bulk Edit", 'comicpress-manager'); ?> </h2> <p><strong>ComicPress-related information, such as transcripts and Storyline categories for posts, and thumbnail regeneration, can be bulk edited here.</strong> To edit post-specific information, such as title and publishing date, use <strong><a href="edit.php">Edit Posts</a></strong>. <?php $data_by_date = array(); $dates_per_page = 15; foreach ($cpm_config->comic_files as $comic_filepath) { $comic_file = pathinfo($comic_filepath, PATHINFO_BASENAME); if (($result = cpm_breakdown_comic_filename($comic_file)) !== false) { $timestamp = strtotime($result['date']); $comic_date = date("Y-m-d", $timestamp); if (!isset($data_by_date[$comic_date])) { $data_by_date[$comic_date] = array(); } $comic_info = array('type' => 'comic', 'timestamp' => $timestamp, 'comic_file' => $comic_file, 'file_title' => $result['converted_title'], 'comic_uri' => cpm_build_comic_uri($comic_filepath, CPM_DOCUMENT_ROOT)); if (count($thumbnails_found = cpm_find_thumbnails_by_filename($comic_filepath)) > 0) { foreach ($thumbnails_found as $thumb_type => $thumb_filename) { $comic_info["thumbnails_found_{$thumb_type}"] = cpm_build_comic_uri(CPM_DOCUMENT_ROOT . $thumb_filename, CPM_DOCUMENT_ROOT); } } $icon_file_to_use = $comic_filepath; foreach (array('rss', 'archive', 'mini') as $type) { if (isset($thumbnails_found[$type])) { $icon_file_to_use = CPM_DOCUMENT_ROOT . $thumbnails_found[$type]; } } $comic_info['icon_uri'] = cpm_build_comic_uri($icon_file_to_use, CPM_DOCUMENT_ROOT); $data_by_date[$comic_date][] = $comic_info; } } foreach (cpm_query_posts() as $comic_post) { $ok = true; if (cpm_get_subcomic_directory() !== false) { $ok = in_array(get_option('comicpress-manager-manage-subcomic'), wp_get_post_categories($comic_post->ID)); } if ($ok) { $timestamp = strtotime($comic_post->post_date); $post_date = date("Y-m-d", $timestamp); if (!isset($data_by_date[$post_date])) { $data_by_date[$post_date] = array(); } $post_info = array('type' => 'post', 'timestamp' => $timestamp, 'post_id' => $comic_post->ID, 'post_title' => $comic_post->post_title, 'post_object' => (array) $comic_post); $data_by_date[$post_date][] = $post_info; } } krsort($data_by_date); $all_months = array(); foreach (array_keys($data_by_date) as $date) { list($year, $month, $day) = explode("-", $date); $key = "{$year}-{$month}"; if (!isset($all_months[$key])) { $all_months[$key] = date("F Y", strtotime($date)); } } krsort($all_months); if (isset($_POST['dates'])) { if ($_POST['dates'] != -1) { $new_data_by_date = array(); foreach ($data_by_date as $date => $data) { if (strpos($date, $_POST['dates']) === 0) { $new_data_by_date[$date] = $data; } } $data_by_date = $new_data_by_date; } } if (!isset($_GET['paged'])) { $_GET['paged'] = 1; } $page_links = paginate_links(array('base' => add_query_arg('paged', '%#%'), 'format' => '', 'prev_text' => __('«'), 'next_text' => __('»'), 'total' => ceil(count($data_by_date) / $dates_per_page), 'current' => $_GET['paged'])); $total_data_by_date = count($data_by_date); $data_by_date = array_slice($data_by_date, ($_GET['paged'] - 1) * $dates_per_page, $dates_per_page); extract(cpm_normalize_storyline_structure()); $comic_categories = array(); foreach ($category_tree as $node) { $comic_categories[] = end(explode("/", $node)); } $thumbnail_writes = cpm_get_thumbnails_to_generate(); if ($total_data_by_date > 0) { $displaying_num_content = sprintf(__("Displaying %d-%d of %d", 'comicpress-manager'), ($_GET['paged'] - 1) * $dates_per_page + 1, min($total_data_by_date, ($_GET['paged'] - 1) * $dates_per_page + $dates_per_page), $total_data_by_date); } else { $displaying_num_content = __('No items to display', 'comicpress-manager'); } ?> <style type="text/css"> .storyline-checklist { overflow-y: scroll; border: solid #ddd 1px; height: 12em } #wpbody-content .bulk-edit-row-post .inline-edit-col-right { width: 42% } </style> <div id="table-holder"> <form id="bulk-form" action="" method="post"> <input type="hidden" name="action" value="batch-processing" /> <div class="tablenav"> <div class="alignleft actions"> <select id="bulk-action" name="bulk-action"> <option selected value="-1">Bulk Actions</option> <option value="individual">Submit Individual Changes</option> <option value="edit">Edit Selected</option> <option value="delete">Delete Selected</option> <option value="import">Create Posts for Selected Files</option> <option value="regen-thumbs">Regenerate Thumbs</option> </select> <input id="doaction" class="button-secondary action" type="submit" value="Apply" /> <select id="dates" name="dates"> <option selected value="-1">Show all dates</option> <?php foreach ($all_months as $key => $date) { ?> <option value="<?php echo $key; ?> "<?php echo $key == $_POST['dates'] ? " selected" : ""; ?> ><?php echo $date; ?> </option> <?php } ?> </select> <input id="dofilter" class="button-secondary action" type="submit" value="Filter" /> </div> <div class="tablenav-pages"> <span class="displaying-num"><?php echo $displaying_num_content; ?> </span> <?php echo $page_links; ?> </div> </div> <table class="widefat fixed" id="status-table"> <thead> <tr> <th class="check-column" width="3%"> <input type="checkbox" name="toggle-all" class="batch-all" value="yes" /> </th> <th width="12%"><?php _e("Date", 'comicpress-manager'); ?> </th> <th width="34%"><?php _e("Object Info", 'comicpress-manager'); ?> </th> <th width="61%"><?php _e("Operations", 'comicpress-manager'); ?> </th> </tr> </thead> <tfoot> <tr> <th class="check-column"> <input type="checkbox" name="toggle-all" class="batch-all" value="yes" /> </th> <th><?php _e("Date", 'comicpress-manager'); ?> </th> <th><?php _e("Object Info", 'comicpress-manager'); ?> </th> <th><?php _e("Operations", 'comicpress-manager'); ?> </th> </tr> </tfoot> <tbody> <tr style="display: none" id="bulk-edit" class="inline-edit-row inline-edit-row-post bulk-edit-row bulk-edit-row-post inline-editor"> <td colspan="4"> <fieldset class="inline-edit-col-left"> <div class="inline-edit-col"> <h4>Bulk Edit Comic Posts</h4> <div id="bulk-title-div"> <div id="bulk-titles" /> </div> </div> </fieldset> <fieldset class="inline-edit-col-center inline-edit-categories"> <div class="inline-edit-col"> <span class="title inline-edit-categories-label"> Storyline </span> <div class="storyline-checklist"> <?php cpm_display_storyline_checkboxes($category_tree, array(), "bulk-storyline"); ?> </div> </div> </fieldset> <fieldset class="inline-edit-col-right"> <label> <span class="title" style="width: auto; margin-right: 5px"><img title>/hovertext</span> <input type="text" name="bulk-hovertext" style="width: 100%" /> </label> <label> <span class="title" style="width: auto; margin-right: 5px">Transcript</span> <textarea name="bulk-transcript" style="height: 7em"></textarea> </label> </fieldset> <p class="submit inline-edit-save"> <a id="cancel" class="button-secondary cancel alignleft" title="Cancel" href="#">Cancel</a> <input class="button-primary alignright" id="bulk-edit-submit" type="submit" value="Update Comic Posts" name="bulk-comic-edit" /> <br class="clear" /> </p> </td> </tr> <?php $is_grey = false; $image_index = 0; foreach ($data_by_date as $date => $data) { $all_objects_by_type = array(); foreach ($data as $object) { if (!isset($all_objects_by_type[$object['type']])) { $all_objects_by_type[$object['type']] = array(); } $all_objects_by_type[$object['type']][] = $object; } $classes = array("data-row"); if ($is_grey) { $classes[] = "grey"; } $is_first_row = true; foreach ($data as $object) { ?> <tr class="<?php echo implode(" ", $classes); ?> "> <?php if ($is_first_row) { ?> <td align="center" rowspan="<?php echo count($data); ?> "> <input id="batch-<?php echo $date; ?> " type="checkbox" class="batch" name="batch-<?php echo $date; ?> " value="yes" /> </td> <td rowspan="<?php echo count($data); ?> "><?php echo $date; ?> </td> <?php $is_first_row = false; } ?> <td class="<?php echo $object['type']; ?> "> <?php switch ($object['type']) { case "comic": ?> <div style="overflow: hidden"> <div><strong> Comic: <?php echo empty($object['file_title']) ? $object['comic_file'] : $object['file_title']; ?> </strong></div> <a href="<?php echo $object['comic_uri']; ?> "><img style="float: right; display: inline; margin-right: 5px; max-height: 100px" id="comic-icon-<?php echo $image_index; ?> " src="<?php echo $object['icon_uri']; ?> " /></a> <?php $all_found = array(); foreach (array('rss', 'archive', 'mini') as $type) { if (isset($object["thumbnails_found_{$type}"])) { $all_found[$type] = $object["thumbnails_found_{$type}"]; } } if (count($all_found) > 0) { ?> [ <?php foreach ($all_found as $type => $uri) { ?> <a href="<?php echo $uri; ?> "><?php echo $type; ?> </a> <?php } ?> ] <?php } else { ?> [ No thumbnails found ] <?php } $image_index++; ?> </div> <?php break; case "post": if (isset($object['post_id'])) { ?> <strong>Post: <?php echo $object['post_title']; ?> </strong> <em>(<?php echo $object['post_id']; ?> )</em><br /> [ <?php echo generate_view_edit_post_links($object['post_object']); ?> ] <?php } break; } ?> </td> <td class="individual-operations <?php echo $object['type']; ?> "> <?php switch ($object['type']) { case "comic": ?> <input type="hidden" name="file,<?php echo $date; ?> ,<?php echo $object['comic_file']; ?> " value="yes" /> <?php if (count($all_objects_by_type['post']) == 0) { ?> <label><input type="checkbox" name="generate-post-<?php echo $object['comic_file']; ?> " value="yes" /> Generate a Post <em>(as a draft)</em></label><br /> <?php } ?> <?php if (count($thumbnail_writes) > 0) { ?> <label><input type="checkbox" name="regen-<?php echo $object['comic_file']; ?> " value="yes" /> Regenerate Thumbs</label><br /> <?php } ?> <label><input type="checkbox" class="delete-file" name="delete-file-<?php echo $object['comic_file']; ?> " value="yes" /> Delete Comic</label><br /> <!-- <input type="checkbox" id="do-redate-file-<?php echo $object['comic_file']; ?> " name="do-redate-file-<?php echo $object['comic_file']; ?> " /> Move to: <input class="needs-calendar" id="redate-file-<?php echo $object['comic_file']; ?> " type="text" name="redate-file-<?php echo $object['comic_file']; ?> " value="<?php echo $date; ?> " /> --> <?php break; case "post": $post_categories = array_intersect(wp_get_post_categories($object['post_id']), $comic_categories); $post_category_names = array(); foreach ($post_categories as $category_id) { $post_category_names[] = get_cat_name($category_id); } ?> <input type="hidden" name="post,<?php echo $date; ?> ,<?php echo $object['post_id']; ?> " value="yes" /> <label><input type="checkbox" class="delete-post" name="delete-post-<?php echo $object['post_id']; ?> " value="yes" /> Delete Post</label><br /> <!-- <input type="checkbox" id="do-redate-post-<?php echo $object['post_id']; ?> " name="do-redate-post-<?php echo $object['post_id']; ?> " /> Move to: <input type="text" class="needs-calendar" id="redate-post-<?php echo $object['post_id']; ?> " name="redate-post-<?php echo $object['post_if']; ?> " value="<?php echo $date; ?> " /><br /> --> <?php $hovertext = get_post_meta($object['post_id'], 'hovertext', true); if (!empty($hovertext)) { ?> <strong><img title>/hovertext:</strong> <?php echo $hovertext; ?> <br /> <?php } ?> <?php $transcript = get_post_meta($object['post_id'], 'transcript', true); if (!empty($transcript)) { ?> <strong>Transcript:</strong> <div class="transcript-holder"><?php echo $transcript; ?> </div> <?php } ?> <strong>Storyline:</strong> <span class="category-names"><?php echo implode(", ", $post_category_names); ?> </span> [ <a href="#" id="category-<?php echo $object['post_id']; ?> " class="category">Edit</a> ] <div id="category-holder-<?php echo $object['post_id']; ?> " style="display: none"> <?php cpm_display_storyline_checkboxes($category_tree, $post_categories, $object['post_id']); ?> </div> <?php break; } ?> </td> </tr> <?php } $is_grey = !$is_grey; } ?> </tbody> </table> <div class="tablenav"> <div class="alignleft actions"> <select id="linked-bulk-action" name="linked-bulk-action"> <option selected value="-1">Bulk Actions</option> <option value="individual">Submit Individual Changes</option> <option value="edit">Edit Selected</option> <option value="delete">Delete Selected</option> <option value="import">Create Posts for Selected Files</option> <option value="regen-thumbs">Regenerate Thumbs</option> </select> <input id="linked-doaction" class="button-secondary action" type="submit" value="Apply" /> </div> <div class="tablenav-pages"> <span class="displaying-num"><?php echo $displaying_num_content; ?> </span> <?php echo $page_links; ?> </div> </div> </form> <script type="text/javascript"> Event.observe(window, 'load', function() { Event.observe($('linked-bulk-action'), 'change', function() { $('bulk-action').selectedIndex = $('linked-bulk-action').selectedIndex; }); Event.observe($('bulk-action'), 'change', function() { $('linked-bulk-action').selectedIndex = $('bulk-action').selectedIndex; }); $$('.needs-calendar').each(function(element) { Calendar.setup({ inputField: element.id, ifFormat: "%Y-%m-%d", button: element.id }); Event.observe(element, 'click', function(e) { var element = Event.element(e); $("do-" + element.id).checked = true; }); }); $$('a.category').each(function(element) { Event.observe(element, 'click', function(e) { Event.stop(e); Element.toggle("category-holder-" + Event.element(e).id.replace(/^.*\-([0-9]+)$/, '$1')); }); }); }); $$('.batch-all').each(function(element) { Event.observe(element, 'change', function(e) { $$('.batch').each(function(b) { b.checked = element.checked; }); $$('.batch-all').each (function(b) { b.checked = element.checked; }); }); }); $$('.individual-operations input[type=checkbox]').each(function(element) { Event.observe(element, 'click', function(e) { $('bulk-action').selectedIndex = 1; $('linked-bulk-action').selectedIndex = 1; }); }); var ok_to_submit = false; Event.observe($('bulk-form'), 'submit', function(e) { return ok_to_submit; }); Event.observe($('bulk-edit-submit'), 'click', function(e) { ok_to_submit = true; $('bulk-form').submit(); }); Event.observe($('cancel'), 'click', function(e) { Event.stop(e); $('bulk-edit').hide(); $('bulk-action').selectedIndex = 0; }); Event.observe($('dofilter'), 'click', function(e) { Event.stop(e); $('bulk-action').selectedIndex = 0; ok_to_submit = true; $('bulk-form').submit(); }); ['doaction', 'linked-doaction'].each(function(which) { Event.observe($(which), 'click', function(e) { Event.stop(e); switch ($F('bulk-action')) { case -1: case "-1": break; case "edit": $('bulk-titles').innerHTML = ""; var any_checked = false; $$('.batch').each(function(element) { if (element.checked) { any_checked = true; /\-(.*)$/.test(element.id); var date = RegExp.$1; var node = Builder.node("div", [ Builder.node("a", { id: date, className: "ntdelbutton", title: "Remove From Bulk Edit" }, [ "X" ]), date ]); $('bulk-titles').insert(node); Event.observe(node, 'click', function(evt) { var node = Event.element(evt); $('batch-' + node.id).checked = false; Element.remove(node.parentNode); var any_checked = false; $$('.batch').each(function(n) { if (n.checked) { any_checked = true; } }); if (!any_checked) { $('bulk-edit').hide(); } }); } }); if (any_checked) { $('bulk-edit').show(); } break; case "delete": if (confirm("<?php _e('You are about to delete the selected posts and comic files. Are you sure?', 'comicpress-manager'); ?> ")) { ok_to_submit = true; $('bulk-form').submit(); } break; default: ok_to_submit = true; $('bulk-form').submit(); break; } }); }); </script> </div> <?php $activity_content = ob_get_clean(); cpm_wrap_content($help_content, $activity_content, false); }