<?php the_author_posts_link(); ?> </p> <a href="<?php bloginfo('url'); ?> /status/<?php echo quality_ticket_status($post->ID, 'slug'); ?> /" class="ticket-status <?php echo quality_ticket_status($post->ID, 'slug'); ?> "><?php echo quality_ticket_status($post->ID, 'name'); ?> </a> <h2 class="ticket-title"> <a href="<?php the_permalink(); ?> " title="<?php printf(esc_attr__('Permalink to %s', 'quality'), the_title_attribute('echo=0')); ?> " rel="bookmark"><?php the_title(); ?> </a> </h2>
/** * Outputs a complete ticket form for use within a template. * Most strings and form fields may be controlled through the $args array passed * into the function, while you may also choose to use the ticket_form_basic_fields, * ticket_form_advanced_fields, or ticket_form_meta_fields * filter to modify the array of default fields if you'd just like to add a new * one or remove a single field. All fields are also individually passed through * a filter of the form ticket_form_field_$name where $name is the key used * in the array of fields. * * @since Quality Control 0.1.5 * @param array $args Options for strings, fields, etc in the form. * @param mixed $post_id Post ID to generate the form for, uses current post if null. * @return void */ function quality_ticket_form($args = array(), $post_id = null) { global $post, $quality_options; $category = get_the_category($post->ID); $taglist = quality_get_ticket_tags($post->ID); if ($args['location'] == 'page') { $taglist = quality_form_data('ticket_tags'); } $basic_fields = array('id' => 'ticket', 'label' => __('Basic Info', 'quality'), 'fields' => array('title' => '<p id="ticket-title"> <label for="ticket_title">' . __('Title:', 'quality') . '</label> <input type="text" name="ticket_title" value="' . quality_form_data('ticket_title') . '" /> </p>', 'tags' => '<p id="ticket-tags"> <label for="ticket_tags">' . __('Tags: <em>(Optional)</em>', 'quality') . '</label> <input type="text" name="ticket_tags" value="' . $taglist . '" /> </p>', 'comment' => '<p> <label for="comment">' . __('Description:', 'quality') . '</label> <textarea name="comment" id="comment"></textarea> </p>')); $advanced_fields = array('id' => 'ticket-properties', 'label' => __('Ticket Properties', 'quality'), 'fields' => array('ticket-status' => '<p id="ticket-status" class="inline-input"> <label for="ticket_status">' . __('Status:', 'quality') . '</label>' . wp_dropdown_categories(array('name' => 'ticket_status', 'hide_empty' => 0, 'taxonomy' => 'ticket_status', 'hierarchical' => 1, 'selected' => $args['location'] == 'page' ? quality_form_data('ticket_status') ? quality_form_data('ticket_status') : $quality_options['default_status'] : quality_ticket_status($post->ID), 'echo' => 0)) . ' </p>', 'ticket-milestone' => '<p id="ticket-milestone" class="inline-input"> <label for="ticket_milestone">' . __('Milestone:', 'quality') . '</label>' . wp_dropdown_categories(array('name' => 'ticket_milestone', 'hide_empty' => 0, 'taxonomy' => 'ticket_milestone', 'hierarchical' => 1, 'selected' => $args['location'] == 'page' ? quality_form_data('ticket_milestone') : quality_ticket_status($post->ID, 'term_id', 'ticket_milestone'), 'echo' => 0)) . ' </p>', 'ticket-category' => '<p id="ticket-category" class="inline-input"> <label for="ticket_category">' . __('Category:', 'quality') . '</label>' . wp_dropdown_categories(array('name' => 'ticket_category', 'hide_empty' => 0, 'hierarchical' => 1, 'selected' => $args['location'] == 'page' ? quality_form_data('ticket_category') ? quality_form_data('ticket_category') : get_option('default_category') : $category[0]->cat_ID, 'echo' => 0)) . ' </p>', 'ticket-assign' => '<p id="ticket-assign" class="inline-input"> <label for="ticket_assign">' . __('Assigned To: <em>(Optional) Separated multiple usernames by comma. You are automatically assigned.</em>', 'quality') . '</label> <input type="text" name="ticket_assign" value="' . ($args['location'] == 'ticket' ? quality_get_ticket_assigned_to() : quality_form_data('ticket_assign')) . '" /> </p>')); $meta_fields = array('id' => 'ticket-meta', 'label' => __('Other Options', 'quality'), 'fields' => array('ticket-attachment' => '<p id="ticket-attachment"> <label for="ticket_attachment">' . __('Attach File', 'quality') . '</label> <input type="file" name="ticket_attachment" id="ticket_attachment"/> </p>')); $defaults = array('location' => 'page', 'basic_fields' => apply_filters('ticket_form_basic_fields', $basic_fields), 'advanced_fields' => apply_filters('ticket_form_advanced_fields', $advanced_fields), 'meta_fields' => apply_filters('ticket_form_meta_fields', $meta_fields), 'ticket_form_before' => '', 'ticket_form_after' => '', 'id_form' => 'ticket_form', 'id_submit' => 'submit', 'label_submit' => $args['location'] == 'page' ? __('Create Ticket', 'quality') : __('Update Ticket', 'quality')); $args = wp_parse_args($args, apply_filters('ticket_form_defaults', $defaults)); if ($args['location'] == 'ticket') { unset($args['basic_fields']['fields']['title']); unset($args['advanced_fields']['fields']['ticket-cc']); } ?> <?php do_action('ticket_form_before'); ?> <form action="<?php echo $args['location'] == 'page' ? '#respond' : site_url('wp-comments-post.php'); ?> " method="post" name="add-ticket" enctype="multipart/form-data" id="<?php echo esc_attr($args['id_form']); ?> "> <?php do_action('ticket_form_top'); ?> <?php do_action('ticket_form_before_fields'); ?> <fieldset id="<?php echo esc_attr($args['basic_fields']['id']); ?> "> <legend><?php echo esc_attr($args['basic_fields']['label']); ?> </legend> <?php do_action('ticket_form_before_basic_fields'); foreach ($args['basic_fields']['fields'] as $name => $field) { echo apply_filters("ticket_form_field_{$name}", $field) . "\n"; } do_action('ticket_form_after_basic_fields'); ?> </fieldset> <fieldset id="<?php echo esc_attr($args['advanced_fields']['id']); ?> "> <legend><?php echo esc_attr($args['advanced_fields']['label']); ?> </legend> <?php do_action('ticket_form_before_advanced_fields'); foreach ($args['advanced_fields']['fields'] as $name => $field) { echo apply_filters("ticket_form_field_{$name}", $field) . "\n"; } do_action('ticket_form_after_advanced_fields'); ?> </fieldset> <fieldset id="<?php echo esc_attr($args['meta_fields']['id']); ?> "> <legend><?php echo esc_attr($args['meta_fields']['label']); ?> </legend> <?php do_action('ticket_form_before_meta_fields'); foreach ($args['meta_fields']['fields'] as $name => $field) { echo apply_filters("ticket_form_field_{$name}", $field) . "\n"; } do_action('ticket_form_after_meta_fields'); ?> </fieldset> <?php do_action('ticket_form_after_fields'); ?> <p id="ticket-create"> <?php if ($args['location'] == 'page') { ?> <input type="hidden" name="create_ticket" value="proccess" /> <?php } else { ?> <?php do_action('comment_form', $post->ID); ?> <?php comment_id_fields(); ?> <?php } ?> <input type="submit" name="submit" id="<?php echo esc_attr($args['id_submit']); ?> " value="<?php echo esc_attr($args['label_submit']); ?> " /> </p> <?php do_action('ticket_form_bottom'); ?> </form> <?php do_action('ticket_form_after'); ?> <?php }
/** * Create a shortcode so tickets can be easily * called when creating/updating tickets. * * [ticket id=""] where id is the ID of the post (ticket). * * @since Quality Control 0.1.4 */ function quality_link_ticket_shortcode($atts, $content = null) { global $quality_options; extract(shortcode_atts(array('id' => 0, 'before' => '', 'after' => ''), $atts)); $ticket = get_post(absint($id)); if ($ticket->post_status != 'publish') { return apply_filters('quality_invalid_ticket_shortcode', '#' . $id); } if (empty($content)) { $content = '#' . $ticket->ID; } if (quality_ticket_status($ticket->ID) == $quality_options['ticket_resolved_state']) { $class = quality_ticket_status($ticket->ID, 'slug'); } $link = $before; $link .= sprintf('<a href="%1$s" title="%4$s" class="link-to-ticket %3$s">%2$s</a>', get_permalink($ticket->ID), $content, $class, $ticket->post_title . ' [' . quality_ticket_status($ticket->ID, 'name') . ']'); $link .= $after; return apply_filters('quality_link_ticket_shortcode', $link); }
/** * When a comment has been created, check to see if they are updating the milestone. * If they are, actually update the milestone, but then also provide a string which * says what is updated. * * @since Quality Control 0.1.2 * @uses wp_set_object_terms * @uses get_term */ function quality_update_ticket_milestone($post, $comment_meta) { global $updates; $ticket_milestone = get_term(esc_attr($comment_meta['ticket_milestone']), 'ticket_milestone'); if ($ticket_milestone->term_id != quality_ticket_status($post->ID, 'term_id', 'ticket_milestone')) { $updates[] = apply_filters('quality_comment_milestone_updated', sprintf(__('<strong>milestone</strong> changed from <em>%s</em> to <em>%s</em>', 'quality'), quality_ticket_status($post->ID, 'name', 'ticket_milestone'), $ticket_milestone->name)); $milestone = wp_set_object_terms($post->ID, intval($ticket_milestone->term_id), 'ticket_milestone', false); return $updates; } }