Пример #1
0
/**
 * Manages download codes
 */
function dc_manage_codes()
{
    global $wpdb;
    // Set option to enable big SQL selects
    $wpdb->query('SET OPTION SQL_BIG_SELECTS = 1');
    // GET parameters
    $get_release = $_GET['release'];
    $get_group = $_GET['group'];
    $get_action = $_GET['action'];
    // POST parameters
    $post_release = $_POST['release'];
    // List of releases
    $releases = dc_get_releases();
    if ($get_release == '' && $post_release == '') {
        $release_id = $releases[0]->ID;
    } elseif ($post_release != '') {
        $release_id = $post_release;
    } elseif ($get_release != '') {
        $release_id = $get_release;
    }
    // Show page title
    echo '<div class="wrap">';
    echo '<h2>Download Codes &raquo; Manage Codes</h2>';
    switch ($get_action) {
        case 'make-final':
            // Finalize new codes
            $finalize_count = dc_finalize_codes($release_id, $get_group);
            echo dc_admin_message('' . $finalize_count . ' download code(s) were finalized');
            break;
        case 'delete':
            // Delete (not finalized) codes
            $deleted_count = dc_delete_codes($release_id, $get_group);
            echo dc_admin_message('' . $deleted_count . ' download code(s) were deleted');
            break;
        case 'generate':
            // Generate new codes
            $message = dc_generate_codes($release_id, strtoupper(trim($_POST['prefix'])), trim($_POST['codes']), trim($_POST['characters']));
            echo $message;
            break;
        case 'import':
            // Import existing codes
            $message = dc_import_codes($release_id, strtoupper(trim($_POST['import-prefix'])), trim($_POST['import-codes']));
            echo $message;
            break;
        case 'reset':
            // Reset codes
            $reset_count = dc_reset_downloads($_POST['download-ids']);
            echo dc_admin_message('' . $reset_count . ' downloads reset');
            break;
    }
    if (sizeof($releases) == 0) {
        // Display message if no release exists yet
        echo dc_admin_message('No releases have been created yet');
        echo '<p><a class="button-primary" href="admin.php?page=dc-manage-releases&amp;action=add">Add New Release</a></p>';
    } else {
        // There are some releases
        echo '<form action="admin.php?page=dc-manage-codes&action=select" method="post">';
        echo '<input type="hidden" name="action" value="select" />';
        // Display release picker
        echo '<h3>Select a Release: ';
        echo '<select name="release" id="release" onchange="submit();">';
        foreach ($releases as $release) {
            echo '<option value="' . $release->ID . '"' . ($release->ID == $release_id ? ' selected="selected"' : '') . '>' . ($release->artist ? $release->artist . ' - ' : '') . $release->title . ' (' . $release->filename . ')</option>';
        }
        echo '</select>';
        echo '</h3>';
        echo '</form>';
        // Get codes for current release
        $code_groups = dc_get_code_groups($release_id);
        $release = $code_groups[0];
        if (sizeof($code_groups) > 0) {
            // Subtitle
            echo '<h3>' . $release->artist . ' - ' . $release->title . ' (' . $release->filename . ') [ID: ' . $release->ID . ']</h3>';
            // Show shortcode example
            echo '<p><span class="description">Insert the following shortcode into a page or article:</span> <code>[download-code id="' . $release_id . '"]</code></p>';
            echo '<table class="widefat dc_codes">';
            echo '<thead>';
            echo '<tr><th>Prefix</th><th>Finalized</th><th>Codes</th><th>Sample Code</th><th>Downloaded</th><th>Actions</th></tr>';
            echo '</thead>';
            // List codes
            echo '<tbody>';
            // Check that codes are actual data
            if ($code_groups[0]->group != '') {
                foreach ($code_groups as $code_group) {
                    echo '<tr><td>' . $code_group->code_prefix . '</td><td>' . ($code_group->final == 1 ? "Yes" : "No") . '</td>';
                    echo '<td>' . $code_group->codes . '</td>';
                    echo '<td>' . $code_group->code_prefix . $code_group->code_example . '</td>';
                    echo '<td>' . $code_group->downloads . ' (' . $code_group->downloaded_codes . ' ' . ($code_group->downloaded_codes == 1 ? 'code' : 'codes') . ')</td>';
                    echo '<td>';
                    // Link to make codes final/delete codes or to export final codes
                    if ($code_group->final == 0) {
                        echo '<a href="admin.php?page=dc-manage-codes&amp;release=' . $release->ID . '&amp;group=' . $code_group->group . '&amp;action=make-final" class="action-finalize">Finalize</a> | ';
                        echo '<a href="admin.php?page=dc-manage-codes&amp;release=' . $release->ID . '&amp;group=' . $code_group->group . '&amp;action=delete" class="action-delete">Delete</a>';
                    } else {
                        echo '<a href="admin.php?page=dc-manage-codes&amp;release=' . $release->ID . '&amp;group=' . $code_group->group . '&amp;action=list" class="action-list" rel="dc_list-' . $code_group->group . '">List codes</a> | ';
                        echo '<a href="admin.php?page=dc-manage-codes&amp;release=' . $release->ID . '&amp;group=' . $code_group->group . '&amp;action=report" class="action-report" rel="dc_downloads-' . $code_group->group . '">View report</a>';
                    }
                    echo '</td></tr>';
                }
            }
            echo '</tbody>';
            echo '<tfoot>';
            echo '<tr><th>Prefix</th><th>Finalized</th><th>Codes</th><th>Sample Code</th><th>Downloaded</th><th>Actions</th></tr>';
            echo '</tfoot>';
            echo '</table>';
            // Output codes and downloads for lightbox option
            foreach ($code_groups as $code_group) {
                dc_list_codes($release_id, $code_group->group, FALSE);
                dc_list_downloads($release_id, $code_group->group, FALSE, 'admin.php?page=dc-manage-codes&amp;action=reset');
            }
            // Show form to add codes
            echo '<form id="form-manage-codes" action="admin.php?page=dc-manage-codes&amp;action=generate" method="post">';
            echo '<input type="hidden" name="release" value="' . $release->ID . '" />';
            echo '<h3>Generate New Batch of Codes</h3>';
            echo '<table class="form-table">';
            echo '<tr valign="top">';
            echo '<th scope="row"><label for="new-prefix">Code Prefix</label></th>';
            echo '<td><input type="text" name="prefix" id="new-prefix" class="small-text" value="' . $post_prefix . '" />';
            echo ' <span class="description">First characters of each code</span></td>';
            echo '</tr>';
            echo '<tr valign="top">';
            echo '<th scope="row"><label for="new-quantity">Quantity</label></th>';
            echo '<td><input type="text" name="codes" id="new-quantity" class="small-text" maxlength="5" value="' . $post_codes . '" />';
            echo ' <span class="description">Number of codes to generate</span></td>';
            echo '</tr>';
            echo '<tr valign="top">';
            echo '<th scope="row"><label for="new-length">Length</label></th>';
            echo '<td><input type="text" name="characters" id="new-length" class="small-text" maxlength="2" value="' . ($post_characters != '' ? $post_characters : '8') . '" />';
            echo ' <span class="description">Number of random characters each code contains</span></td>';
            echo '</tr>';
            echo '</table>';
            echo '<p class="submit">';
            echo '<input type="submit" name="submit" class="button-secondary" value="Generate Codes" />';
            echo '</p>';
            echo '</form>';
            // Show form to import existing codes
            echo '<form action="admin.php?page=dc-manage-codes&amp;action=import" method="post">';
            echo '<input type="hidden" name="release" value="' . $release->ID . '" />';
            echo '<h3>Import Existing Download Codes</h3>';
            echo '<table class="form-table">';
            echo '<tr valign="top">';
            echo '<th scope="row"><label for="import-prefix">Code Prefix</label></th>';
            echo '<td><input type="text" name="import-prefix" id="import-prefix" class="small-text" value="' . $_POST['import-prefix'] . '" />';
            echo ' <span class="description">First characters of each code. It is recommended that all of your codes to be imported have a common prefix. If this is not the case, this field can be left empty.</span></td>';
            echo '</tr>';
            echo '<tr valign="top">';
            echo '<th scope="row"><label for="import-codes">List of Codes</label></th>';
            echo '<td><textarea name="import-codes" id="import-codes" cols="20" rows="20" class="small-text">' . $_POST['import-codes'] . '</textarea>';
            echo ' <span class="description">Plain list of codes to be imported (separated by linebreaks)</span></td>';
            echo '</tr>';
            echo '</table>';
            echo '<p class="submit">';
            echo '<input type="submit" name="submit" class="button-secondary" value="Import Codes" />';
            echo '</p>';
            echo '</form>';
        }
        // Show list of download codes or download report in case lightbox option is not applicable
        switch ($get_action) {
            case 'list':
                echo '<h3>List of Download Codes</h3>';
                dc_list_codes($release_id, $get_group);
                break;
            case 'report':
                echo '<h3>Code Usage Report</h3>';
                dc_list_downloads($release_id, $get_group);
                break;
        }
    }
    echo '</div>';
}
Пример #2
0
/**
 * Manages releases
 */
function dc_manage_releases()
{
    global $wpdb;
    $wpdb->query('SET OPTION SQL_BIG_SELECTS = 1');
    // Get parameters
    $get_action = $_GET['action'];
    $get_release = $_GET['release'];
    // Post parameters
    $post_action = $_POST['action'];
    $post_release = $_POST['release'];
    // Show page title
    echo '<div class="wrap">';
    echo '<h2>Download Codes &raquo; Manage Releases</h2>';
    switch ($get_action) {
        case 'edit':
        case 'add':
            // Update or insert release
            if (isset($_POST['submit'])) {
                if ($post_action == 'add') {
                    $result = dc_add_release();
                    if (is_array($result)) {
                        echo dc_admin_message(implode('</p><p>', $result));
                    } else {
                        if ($result === FALSE) {
                            echo dc_admin_message('There was an error adding the release');
                        } else {
                            echo dc_admin_message('The release was added successfully');
                            $add_success = true;
                        }
                    }
                }
                if ($post_action == 'edit') {
                    $result = dc_edit_release();
                    if (is_array($result)) {
                        // display errors
                    } else {
                        if ($result === FALSE) {
                            echo dc_admin_message('There was an error updating the release');
                        } else {
                            echo dc_admin_message('The release was updated successfully');
                            $edit_success = true;
                        }
                    }
                }
            }
            break;
        case 'delete':
            $result = dc_delete_release($get_release);
            if ($result) {
                echo dc_admin_message('The release was deleted successfully');
            } else {
                echo dc_admin_message('There was an error deleting the release');
            }
            break;
    }
    if (($get_action == 'edit' || $get_action == 'add') && !$add_success) {
        //*********************************************
        // Add or edit a release
        //*********************************************
        // Get zip files in download folder
        $files = scandir(dc_file_location());
        $num_download_files = 0;
        foreach ($files as $filename) {
            if (in_array(strtolower(substr($filename, -3)), dc_file_types())) {
                $num_download_files++;
            }
        }
        if ($num_download_files == 0) {
            echo dc_admin_message('No files have been uploaded to the releases folder: <em>' . dc_file_location() . '</em></p><p><strong>You must do this first before adding a release!</strong>');
        }
        // Get current release
        if ('' != $get_release) {
            $release = dc_get_release($get_release);
        }
        if ('' != $post_release) {
            $release = dc_get_release($post_release);
        }
        // Write page subtitle
        echo '<h3>' . ('add' == $get_action ? 'Add New' : 'Edit') . ' Release</h3>';
        echo '<p><a href="admin.php?page=dc-manage-releases">&laquo; Back to releases</a></p>';
        // Display form
        echo '<form action="admin.php?page=dc-manage-releases&action=' . $get_action . '" method="post">';
        echo '<input type="hidden" name="release" value="' . $release->ID . '" />';
        echo '<input type="hidden" name="action" value="' . $get_action . '" />';
        echo '<table class="form-table">';
        // Title
        echo '<tr valign="top">';
        echo '<th scope="row"><label for="release-title">Title</label></th>';
        echo '<td><input type="text" name="title" id="release-title" class="regular-text" value="' . $release->title . '" />';
        echo ' <span class="description">For example, the album title</span></td>';
        echo '</tr>';
        // Artist
        echo '<tr valign="top">';
        echo '<th scope="row"><label for="release-artist">Artist (optional)</label></th>';
        echo '<td><input type="text" name="artist" id="release-artist" class="regular-text" value="' . $release->artist . '" />';
        echo ' <span class="description">The band or artist</span></td>';
        echo '</tr>';
        // File
        echo '<tr valign="top">';
        echo '<th scope="row"><label for="release-file">File</label></th>';
        echo '<td>' . dc_file_location() . ' <select name="filename" id="release-file">-->';
        // Get array of allowed file types/extensions
        $allowed_file_types = dc_file_types();
        // List all files matching the allowed extensions
        foreach ($files as $filename) {
            $file_extension_array = split("\\.", $filename);
            $file_extension = strtolower($file_extension_array[sizeof($file_extension_array) - 1]);
            if (in_array($file_extension, $allowed_file_types)) {
                echo '<option' . ($filename == $release->filename ? ' selected="selected"' : '') . '>' . $filename . '</option>';
            }
        }
        echo '</select></td>';
        echo '</tr>';
        // Allowed downloads
        echo '<tr valign="top">';
        echo '<th scope="row"><label for="release-downloads">Allowed downloads</label></th>';
        echo '<td><input type="text" name="downloads" id="release-downloads" class="small-text" value="' . ($release->allowed_downloads > 0 ? $release->allowed_downloads : DC_ALLOWED_DOWNLOADS) . '" />';
        echo ' <span class="description">Maximum number of times each code can be used</span></td>';
        echo '</tr>';
        echo '</table>';
        // Submit
        echo '<p class="submit">';
        echo '<input type="submit" name="submit" class="button-primary" value="' . ($get_action == 'edit' ? 'Save Changes' : 'Add Release') . '" />';
        echo '</p>';
        echo '</form>';
    } else {
        //*********************************************
        // List releases
        //*********************************************
        // Write page subtitle
        echo '<h3>Releases</h3>';
        // Get releases
        $releases = dc_get_releases();
        // Check if the releases are empty
        if (sizeof($releases) == 0) {
            echo dc_admin_message('No releases have been created yet');
            echo '<p>You might want to <a href="admin.php?page=dc-manage-releases&action=add">add a new release</a></p>';
        } else {
            echo '<table class="widefat">';
            echo '<thead>';
            echo '<tr><th>Title</th><th>Artist</th><th>ID</th><th>File</th><th>Codes</th><th>Downloaded</th><th>Actions</th></tr>';
            echo '</thead>';
            echo '<tbody>';
            foreach ($releases as $release) {
                echo '<tr>';
                echo '<td><strong>' . $release->title . '</strong></td><td>' . $release->artist . '</td>';
                echo '<td>' . $release->ID . '</td>';
                echo '<td>' . $release->filename . '</td>';
                echo '<td>' . $release->codes . '</td><td>' . $release->downloads . '</td>';
                echo '<td>';
                echo '<a href="admin.php?page=dc-manage-releases&amp;release=' . $release->ID . '&amp;action=edit" class="action-edit">Edit</a> | ';
                echo '<a href="admin.php?page=dc-manage-codes&amp;release=' . $release->ID . '" class="action-manage">Manage codes</a> | ';
                echo '<a href="admin.php?page=dc-manage-codes&amp;release=' . $release->ID . '&amp;action=report" class="action-report" rel="dc_downloads-' . $release->ID . '">View report</a> | ';
                echo '<a href="admin.php?page=dc-manage-releases&amp;release=' . $release->ID . '&amp;action=delete" class="action-delete">Delete</a>';
                echo '</td>';
                echo '</tr>';
            }
            echo '</tbody>';
            echo '<tfoot>';
            echo '<tr><th>Title</th><th>Artist</th><th>ID</th><th>File</th><th>Codes</th><th>Downloaded</th><th>Actions</th></tr>';
            echo '</tfoot>';
            echo '</table>';
            foreach ($releases as $release) {
                dc_list_downloads($release->ID, NULL, FALSE);
            }
        }
        // Show link to add a new release
        echo '<p><a class="button-primary" href="admin.php?page=dc-manage-releases&amp;action=add">Add New Release</a></p>';
    }
    echo '</div>';
}