Skip to content
Snippets Groups Projects
class.queue.php 34.9 KiB
Newer Older
  • Learn to ignore specific revisions
  •             $base[$id] = __($class::$desc);
            }
            return $base;
        }
    
        static function getInstance($id) {
            if (isset(static::$registry[$id]))
                return new static::$registry[$id]();
        }
    
        function mangleQuery($query, $column) { return $query; }
    
        abstract function filter($value, $row);
    }
    
    class TicketLinkFilter
    extends QueueColumnFilter {
        static $id = 'link:ticket';
        static $desc = /* @trans */ "Ticket Link";
    
        function filter($text, $row) {
            $link = $this->getLink($row);
            return sprintf('<a href="%s">%s</a>', $link, $text);
        }
    
        function mangleQuery($query, $column) {
            static $fields = array(
                'link:ticket'   => 'ticket_id',
                'link:ticketP'  => 'ticket_id',
                'link:user'     => 'user_id',
                'link:org'      => 'user__org_id',
            );
    
            if (isset($fields[static::$id])) {
                $query = $query->values($fields[static::$id]);
            }
            return $query;
        }
    
        function getLink($row) {
            return Ticket::getLink($row['ticket_id']);
        }
    }
    
    class UserLinkFilter
    extends TicketLinkFilter {
        static $id = 'link:user';
        static $desc = /* @trans */ "User Link";
    
        function getLink($row) {
            return User::getLink($row['user_id']);
        }
    }
    
    class OrgLinkFilter
    extends TicketLinkFilter {
        static $id = 'link:org';
        static $desc = /* @trans */ "Organization Link";
    
        function getLink($row) {
            return Organization::getLink($row['org_id']);
        }
    }
    QueueColumnFilter::register('TicketLinkFilter');
    QueueColumnFilter::register('UserLinkFilter');
    QueueColumnFilter::register('OrgLinkFilter');
    
    class TicketLinkWithPreviewFilter
    extends TicketLinkFilter {
        static $id = 'link:ticketP';
        static $desc = /* @trans */ "Ticket Link with Preview";
    
        function filter($text, $row) {
            $link = $this->getLink($row);
            return sprintf('<a class="preview" data-preview="#tickets/%d/preview" href="%s">%s</a>',
                $row['ticket_id'], $link, $text);
        }
    }
    QueueColumnFilter::register('TicketLinkWithPreviewFilter');
    
    
    class QueueColDataConfigForm
    extends AbstractForm {
    
    function buildFields() {
        return array(
            'primary' => new DataSourceField(array(
                'label' => __('Primary Data Source'),
                'required' => true,
                'configuration' => array(
                    'root' => 'Ticket',
                ),
                'layout' => new GridFluidCell(6),
            )),
            'secondary' => new DataSourceField(array(
                'label' => __('Secondary Data Source'),
                'configuration' => array(
                    'root' => 'Ticket',
                ),
                'layout' => new GridFluidCell(6),
            )),
    
                'heading' => new TextboxField(array(
                    'label' => __('Heading'),
                    'required' => true,
                    'layout' => new GridFluidCell(3),
                )),
    
                'filter' => new ChoiceField(array(
                    'label' => __('Filter'),
    
                    'required' => false,
    
                    'choices' => QueueColumnFilter::getFilters(),
    
                    'layout' => new GridFluidCell(3),
                )),
                'width' => new TextboxField(array(
                    'label' => __('Width'),
                    'default' => 75,
                    'configuration' => array(
                        'validator' => 'number',
                    ),
                    'layout' => new GridFluidCell(3),
                )),
                'truncate' => new ChoiceField(array(
                    'label' => __('Text Overflow'),
                    'choices' => array(
                        'wrap' => __("Wrap Lines"),
                        'ellipsis' => __("Add Ellipsis"),
                        'clip' => __("Clip Text"),
                    ),
                    'default' => 'wrap',
                    'layout' => new GridFluidCell(3),
                )),
            );
        }
    }