From: Michael J. Rubinsky Date: Thu, 24 Dec 2009 01:14:38 +0000 (-0500) Subject: Add Whups from CVS HEAD X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=15ae708857f6cc57de6cf9990b84fca63dbe9b93;p=horde.git Add Whups from CVS HEAD --- diff --git a/whups/LICENSE b/whups/LICENSE new file mode 100644 index 000000000..07ac8a62a --- /dev/null +++ b/whups/LICENSE @@ -0,0 +1,25 @@ +Copyright 2001-2002, Robert E. Coyle +Copyright 2001-2009 The Horde Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HORDE PROJECT +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/whups/README b/whups/README new file mode 100644 index 000000000..a56bdeea8 --- /dev/null +++ b/whups/README @@ -0,0 +1,143 @@ +What is Whups? +============== + +:Last update: $Date: 2008/09/02 16:13:13 $ +:Revision: $Revision: 1.10 $ +:Contact: horde@lists.horde.org + +.. contents:: Contents +.. section-numbering:: + +Whups is a Horde ticket-tracking application. It is very flexible in design, +and can be used for help-desk requests, tracking sofware development, and +anything else that needs to track a set of requests and their status. + +This software is OSI Certified Open Source Software. OSI Certified is a +certification mark of the `Open Source Initiative`_. + +.. _`Open Source Initiative`: http://www.opensource.org/ + + +Features +-------- + +Currently Whups supports the following features: + +* Support for multiple "Queues" (aka Projects). +* Custom ticket types, states, priorities, attributes per Queue. +* Create, update, assign, close tickets. +* Search for tickets matching specific criteria. +* A complex query building for building and saving/storing custom searches. +* Guest access (in addition to login access). +* E-mail notification of changes to tickets. +* Ticket creation and updating through e-mail messages. +* Permissions support. + + +Terminology +----------- + +Queues + Project name (or other major category name). This is the top level + structure. + +Types + Project Type, each Type has the following components: + + States + State (Stage) of the current item. For example: new, open, closed, + resolved, etc. + + Priorities + Priority of the current item. For example: Critical, High, Low, Normal, + Urgent, etc. Could also be abstracted (Red, Yellow, Green; 1, 2, 3; etc) + + Attributes + From a large set of attribute types, an arbitrary number of attributes can + be added, including attribute names, descriptions, whether they are + required etc. + + Form Replies + Reply texts for updating tickets, used for automatically filling ticket + comments with stock phrases. + +Responsible Users + Users responsible for a queue. These can be anyone, but should be Horde + users. Notifications only work with Horde users who have identities with an + email address set. + +Versions + Allows you to track multiple versions of the same project. Can be used for + actual versions (CVS HEAD, 1.0, etc), development cycles (planning, + prototyping, production), etc. + +Tickets + This is an "Instance" of a Type. + + +Obtaining Whups +------------------ + +Further information on Whups and the latest version can be obtained at + + http://www.horde.org/whups/ + + +Documentation +------------- + +The following documentation is available in the Whups distribution: + +:README_: This file +:LICENSE_: Copyright and license information +:`docs/CHANGES`_: Changes by release +:`docs/CREDITS`_: Project developers +:`docs/INSTALL`_: Installation instructions and notes +:`docs/TODO`_: Development TODO list + + +Installation +------------ + +Instructions for installing Whups can be found in the file INSTALL_ in the +``docs/`` directory of the Whups distribution. + + +Assistance +---------- + +If you encounter problems with Whups, help is available! + +The Horde Frequently Asked Questions List (FAQ), available on the Web at + + http://www.horde.org/faq/ + +The Horde Project runs a number of mailing lists, for individual applications +and for issues relating to the project as a whole. Information, archives, and +subscription information can be found at + + http://www.horde.org/mail/ + +Lastly, Horde developers, contributors and users also make occasional +appearances on IRC, on the channel #horde on the freenode Network +(irc.freenode.net). + + +Licensing +--------- + +For licensing and copyright information, please see the file LICENSE_ in the +Whups distribution. + +Thanks, + +The Whups team + + +.. _README: ?f=README.html +.. _LICENSE: http://www.horde.org/licenses/bsdl.php +.. _docs/CHANGES: ?f=CHANGES.html +.. _docs/CREDITS: ?f=CREDITS.html +.. _INSTALL: +.. _docs/INSTALL: ?f=INSTALL.html +.. _docs/TODO: ?f=TODO.html diff --git a/whups/admin/index.php b/whups/admin/index.php new file mode 100644 index 000000000..ecd3b039e --- /dev/null +++ b/whups/admin/index.php @@ -0,0 +1,1259 @@ + + */ + +@define('WHUPS_BASE', dirname(dirname(__FILE__))); +require_once WHUPS_BASE . '/lib/base.php'; + +if (!Horde_Auth::isAdmin('whups:admin')) { + Horde::authenticationFailureRedirect(); +} + +// Set up the page config vars. +$showExtraForm = null; + +// Setup vars with all relevant info. +$vars = Horde_Variables::getDefaultVariables(); +if (!$vars->exists('action')) { + $vars->set('action', 'queue'); +} + +// Admin actions. +$adminurl = Horde::selfUrl(false, false); +$tabs = new Horde_Ui_Tabs('action', $vars); +$tabs->addTab(_("_Edit Queues"), $adminurl, 'queue'); +$tabs->addTab(_("Edit _Types"), $adminurl, 'type'); +$tabs->addTab(_("Queue/Type Matri_x"), $adminurl, 'mtmatrix'); +$tabs->addTab(_("Sen_d Reminders"), $adminurl, 'reminders'); + +$renderer = new Horde_Form_Renderer(); + +// start the page +function _open($isopened = false) +{ + global $vars; + static $opened; + + if ($isopened) { + return $opened; + } + + if (is_null($opened)) { + global $registry, $prefs, $browser, $conf, $notification, $title, $tabs; + + $opened = true; + $title = _("Administration"); + require WHUPS_TEMPLATES . '/common-header.inc'; + require WHUPS_TEMPLATES . '/menu.inc'; + echo $tabs->render($vars->get('action')); + } +} + +function _editStateForms() +{ + global $vars, $renderer, $adminurl; + _open(); + $form1 = new EditStateStep1Form($vars); + $form1->renderActive($renderer, $vars, $adminurl, 'post'); + echo '
'; + $form2 = new DefaultStateForm($vars); + $form2->renderActive($renderer, $vars, $adminurl, 'post'); + echo '
'; + $form3 = new AddStateForm($vars); + $form3->renderActive($renderer, $vars, $adminurl, 'post'); +} + +function _editPriorityForms() +{ + global $vars, $renderer, $adminurl; + _open(); + $form1 = new EditPriorityStep1Form($vars); + $form1->renderActive($renderer, $vars, $adminurl, 'post'); + echo '
'; + $form2 = new DefaultPriorityForm($vars); + $form2->renderActive($renderer, $vars, $adminurl, 'post'); + echo '
'; + $form3 = new AddPriorityForm($vars); + $form3->renderActive($renderer, $vars, $adminurl, 'post'); +} + +switch ($vars->get('formname')) { +case 'addtypestep1form': + require_once WHUPS_BASE . '/lib/Forms/Admin/Type.php'; + $form1 = new AddTypeStep1Form($vars); + if ($form1->validate($vars)) { + // First, add the type + $tid = $whups_driver->addType($vars->get('name'), + $vars->get('description')); + if (is_a($tid, 'PEAR_Error')) { + Horde::fatal($tid, __FILE__, __LINE__); + } + + _open(); + $vars->add('type', $tid); + $form2 = new EditTypeStep2Form($vars); + $form2->title = 'addtypestep2form'; + $form2->open($renderer, $vars, $adminurl, 'post'); + + // render the stage 1 form readonly + $form1->preserve($vars); + $renderer->beginInactive(sprintf(_("Add Type %s"), _("- Stage 1"))); + $renderer->renderFormInactive($form1, $vars); + $renderer->end(); + + // render the second stage form + $renderer->beginActive(sprintf(_("Add Type %s"), _("- Stage 2"))); + $renderer->renderFormActive($form2, $vars); + $renderer->submit(); + $renderer->end(); + + $form2->close($renderer); + } else { + _open(); + $form1->renderActive($renderer, $vars, $adminurl, 'post'); + } + break; + +case 'addtypestep2form': + require_once WHUPS_BASE . '/lib/Forms/Admin/Type.php'; + $form1 = new AddTypeStep1Form($vars); + $form2 = new EditTypeStep2Form($vars); + $form2->_name = 'addtypestep2form'; + break; + +case 'edittypestep1form': + require_once WHUPS_BASE . '/lib/Forms/Admin/Type.php'; + $form1 = new EditTypeStep1Form($vars); + $vars->set('action', 'type'); + if ($form1->validate($vars)) { + switch ($vars->get('submitbutton')) { + case _("Edit Type"): + _open(); + $form2 = new EditTypeStep2Form($vars); + $form2->renderActive($renderer, $vars, $adminurl, 'post'); + break; + + case _("Delete Type"): + _open(); + $form2 = new DeleteTypeForm($vars); + $form2->renderActive($renderer, $vars, $adminurl, 'post'); + break; + + case _("Clone Type"): + _open(); + $form2 = new CloneTypeForm($vars); + $form2->renderActive($renderer, $vars, $adminurl, 'post'); + break; + } + } else { + _open(); + $form1->renderActive($renderer, $vars, $adminurl, 'post'); + } + break; + +case 'clonetypeform': + require_once WHUPS_BASE . '/lib/Forms/Admin/Type.php'; + $form = new CloneTypeForm($vars); + if ($form->validate($vars)) { + // Create a new type and copy all attributes of the clone master to + // the new type. + $tid = $vars->get('type'); + $type = $whups_driver->getType($tid); + $states = $whups_driver->getAllStateInfo($tid); + $priorities = $whups_driver->getAllPriorityInfo($tid); + $attributes = $whups_driver->getAttributeInfoFortype($tid); + + // Create the new type. + $nid = $ntype = $whups_driver->addType($vars->get('name'), + $vars->get('description')); + + // Add the states. + foreach ($states as $s) { + $whups_driver->addState($nid, $s['state_name'], + $s['state_description'], + $s['state_category']); + } + + // Add the priorities. + foreach ($priorities as $p) { + $whups_driver->addPriority($nid, $p['priority_name'], + $p['priority_description']); + } + + // Add attributes. + foreach ($attributes as $a) { + $whups_driver->addAttributeDesc($nid, $a['attribute_name'], + $a['attribute_description']); + } + + $notification->push(sprintf(_("Successfully Cloned %s to %s."), + $type['name'], $vars->get('name')), + 'horde.success'); + header('Location: ' . Horde::applicationUrl('admin/?action=type', true)); + exit; + } else { + _open(); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + } + break; + +case 'edittypeform': +case 'edittypestep2form': + require_once WHUPS_BASE . '/lib/Forms/Admin/Type.php'; + $form = new EditTypeStep2Form($vars); + if ($vars->get('formname') == 'edittypestep2form' && + $form->validate($vars)) { + $result = $whups_driver->updateType($vars->get('type'), + $vars->get('name'), + $vars->get('description')); + if (is_a($result, 'PEAR_Error')) { + $notification->push(_("There was an error modifying the type:") + . ' ' . $result->getMessage(), + 'horde.error'); + } else { + $notification->push(sprintf(_("The type \"%s\" has been modified."), + $vars->get('name')), + 'horde.success'); + _open(); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + } + } else { + _open(); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + } + break; + +case 'createdefaultstates': + require_once WHUPS_BASE . '/lib/Forms/Admin/Type.php'; + $type = $vars->get('type'); + foreach ($conf['states'] as $state) { + if ($state['active'] == 'active') { + $whups_driver->addState($type, $state['name'], + $state['desc'], $state['category']); + } + } + + _open(); + $form = new EditTypeStep2Form($vars); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + break; + +case 'createdefaultpriorities': + require_once WHUPS_BASE . '/lib/Forms/Admin/Type.php'; + $type = $vars->get('type'); + foreach ($conf['priorities'] as $priority) { + if ($priority['active'] == 'active') { + $whups_driver->addPriority($type, $priority['name'], + $priority['desc']); + } + } + + _open(); + $form = new EditTypeStep2Form($vars); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + break; + +case 'deletetypeform': + require_once WHUPS_BASE . '/lib/Forms/Admin/Type.php'; + $form = new DeleteTypeForm($vars); + if ($form->validate($vars)) { + if ($vars->get('yesno') == 1) { + $result = $whups_driver->deleteType($vars->get('type')); + if (!is_a($result, 'PEAR_Error')) { + $notification->push(_("The type has been deleted."), + 'horde.success'); + } else { + $notification->push(_("There was an error deleting the type:") + . ' ' . $result->getMessage(), + 'horde.error'); + } + } else { + $notification->push(_("The type was not deleted."), + 'horde.message'); + } + $vars->set('action', 'type'); + } else { + _open(); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + } + break; + +case 'addqueueform': + require_once WHUPS_BASE . '/lib/Forms/Admin/Queue.php'; + $form = new AddQueueForm($vars); + if ($form->validate($vars)) { + $result = $whups_driver->addQueue($vars->get('name'), + $vars->get('description'), + $vars->get('slug'), + $vars->get('email')); + if (!is_a($result, 'PEAR_Error')) { + $notification->push( + sprintf(_("The queue \"%s\" has been created."), + $vars->get('name')), + 'horde.success'); + + _open(); + $vars->set('queue', $result); + $form2 = new EditQueueStep2Form($vars); + $form2->renderActive($renderer, $vars, $adminurl, 'post'); + } else { + $notification->push(_("There was an error creating the queue:") + . ' ' . $result->getMessage(), + 'horde.error'); + _open(); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + } + } else { + _open(); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + } + break; + +case 'editqueuestep1form': + require_once WHUPS_BASE . '/lib/Forms/Admin/Queue.php'; + $form1 = new EditQueueStep1Form($vars); + if ($form1->validate($vars)) { + switch ($vars->get('submitbutton')) { + case _("Edit Queue"): + _open(); + $form2 = new EditQueueStep2Form($vars); + $form2->renderActive($renderer, $vars, $adminurl, 'post'); + break; + + case _("Delete Queue"): + _open(); + $form2 = new DeleteQueueForm($vars); + $form2->renderActive($renderer, $vars, $adminurl, 'post'); + break; + } + } else { + _open(); + $form1->renderActive($renderer, $vars, $adminurl, 'post'); + } + break; + +case 'editqueueform': +case 'editqueuestep2form': + require_once WHUPS_BASE . '/lib/Forms/Admin/Queue.php'; + $form = new EditQueueStep2Form($vars); + + if ($vars->get('formname') == 'editqueuestep2form' && + $form->validate($vars)) { + $result = $whups_driver->updateQueue($vars->get('queue'), + $vars->get('name'), + $vars->get('description'), + $vars->get('types'), + $vars->get('versioned'), + $vars->get('slug'), + $vars->get('email'), + $vars->get('default')); + if (!is_a($result, 'PEAR_Error')) { + $notification->push(_("The queue has been modified."), + 'horde.success'); + if (!$perms->exists('whups:queues:' . $vars->get('queue') . ':update')) { + $p = &$perms->newPermission('whups:queues:' + . $vars->get('queue') . ':update'); + $perms->addPermission($p); + } + if (!$perms->exists('whups:queues:' . $vars->get('queue') . ':assign')) { + $p = &$perms->newPermission('whups:queues:' + . $vars->get('queue') . ':assign'); + $perms->addPermission($p); + } + + _open(); + $form->renderInactive($renderer, $vars); + } else { + $notification->push(_("There was an error editing the queue:") + . ' ' . $result->getMessage(), + 'horde.error'); + } + } else { + _open(); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + } + break; + +case 'deletequeueform': + require_once WHUPS_BASE . '/lib/Forms/Admin/Queue.php'; + $form = new DeleteQueueForm($vars); + if ($form->validate($vars)) { + if ($vars->get('yesno') == 1) { + $result = $whups_driver->deleteQueue($vars->get('queue')); + if (!is_a($result, 'PEAR_Error')) { + $notification->push( _("The queue has been deleted."), + 'horde.success'); + } else { + $notification->push(_("There was an error deleting the queue:") + . ' ' . $result->getMessage(), + 'horde.error'); + } + } else { + $notification->push(_("The queue was not deleted."), + 'horde.message'); + } + } else { + _open(); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + } + break; + +case 'addstateform': + require_once WHUPS_BASE . '/lib/Forms/Admin/State.php'; + $vars->set('action', 'type'); + $form = new AddStateForm($vars); + if ($form->validate($vars)) { + $result = $whups_driver->addState($vars->get('type'), + $vars->get('name'), + $vars->get('description'), + $vars->get('category')); + if (!is_a($result, 'PEAR_Error')) { + $typename = $whups_driver->getType($vars->get('type')); + $typename = $typename['name']; + $notification->push( + sprintf(_("The state \"%s\" has been added to %s."), + $vars->get('name'), $typename), + 'horde.success'); + } else { + $notification->push(_("There was an error creating the state:") + . ' ' . $result->getMessage(), + 'horde.error'); + } + + $vars = new Horde_Variables(array('type' => $vars->get('type'))); + _editStateForms(); + } else { + _open(); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + } + break; + +case 'editstatestep1form': + require_once WHUPS_BASE . '/lib/Forms/Admin/State.php'; + $vars->set('action', 'type'); + if (!$vars->get('submitbutton')) { + _editStateForms(); + } else { + _open(); + $form1 = new EditStateStep1Form($vars); + if ($form1->validate($vars)) { + switch ($vars->get('submitbutton')) { + case _("Edit State"): + $form2 = new EditStateStep2Form($vars); + $form2->renderActive($renderer, $vars, $adminurl, 'post'); + break; + + case _("Delete State"): + $form2 = new DeleteStateForm($vars); + $form2->renderActive($renderer, $vars, $adminurl, 'post'); + break; + } + } else { + $form1->renderActive($renderer, $vars, $adminurl, 'post'); + } + } + break; + +case 'editstatestep2form': + require_once WHUPS_BASE . '/lib/Forms/Admin/State.php'; + $vars->set('action', 'type'); + $form = new EditStateStep2Form($vars); + if ($form->validate($vars)) { + $result = $whups_driver->updateState($vars->get('state'), + $vars->get('name'), + $vars->get('description'), + $vars->get('category')); + if (!is_a($result, 'PEAR_Error')) { + $notification->push(_("The state has been modified."), + 'horde.success'); + _open(); + $form->renderInactive($renderer, $vars); + } else { + $notification->push(_("There was an error editing the state:") + . ' ' . $result->getMessage(), + 'horde.error'); + } + + $vars = new Horde_Variables(array('type' => $vars->get('type'))); + _editStateForms(); + } else { + _open(); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + } + break; + +case 'defaultstateform': + require_once WHUPS_BASE . '/lib/Forms/Admin/State.php'; + $vars->set('action', 'type'); + $form = new DefaultStateForm($vars); + if ($form->validate($vars)) { + $result = $whups_driver->setDefaultState($vars->get('type'), + $vars->get('state')); + if (is_a($result, 'PEAR_Error')) { + $notification->push( + _("There was an error setting the default state:") . ' ' + . $result->getMessage(), + 'horde.error'); + } else { + $notification->push(_("The default state has been set."), + 'horde.success'); + } + + _editStateForms(); + } else { + _open(); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + } + break; + +case 'deletestateform': + require_once WHUPS_BASE . '/lib/Forms/Admin/State.php'; + $vars->set('action', 'type'); + $form = new DeleteStateForm($vars); + if ($form->validate($vars)) { + if ($vars->get('yesno') == 1) { + $result = $whups_driver->deleteState($vars->get('state')); + if (!is_a($result, 'PEAR_Error')) { + $notification->push(_("The state has been deleted."), + 'horde.success'); + } else { + $notification->push(_("There was an error deleting the state:") + . ' ' . $result->getMessage(), + 'horde.error'); + } + } else { + $notification->push(_("The state was not deleted."), + 'horde.message'); + } + + _editStateForms(); + } else { + _open(); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + } + break; + +case 'addpriorityform': + require_once WHUPS_BASE . '/lib/Forms/Admin/Priority.php'; + $vars->set('action', 'type'); + $form = new AddPriorityForm($vars); + if ($form->validate($vars)) { + $result = $whups_driver->addPriority($vars->get('type'), + $vars->get('name'), + $vars->get('description')); + if (!is_a($result, 'PEAR_Error')) { + $typename = $whups_driver->getType($vars->get('type')); + $typename = $typename['name']; + $notification->push( + sprintf(_("The priority \"%s\" has been added to %s."), + $vars->get('name'), $typename), + 'horde.success'); + } else { + $notification->push( + _("There was an error creating the priority:") . ' ' + . $result->getMessage(), + 'horde.error'); + } + + $vars = new Horde_Variables(array('type' => $vars->get('type'))); + _editPriorityForms(); + } else { + _open(); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + } + break; + +case 'editprioritystep1form': + require_once WHUPS_BASE . '/lib/Forms/Admin/Priority.php'; + $vars->set('action', 'type'); + if (!$vars->get('submitbutton')) { + _editPriorityForms(); + } else { + _open(); + $form1 = new EditPriorityStep1Form($vars); + if ($form1->validate($vars)) { + switch ($vars->get('submitbutton')) { + case _("Edit Priority"): + $form2 = new EditPriorityStep2Form($vars); + $form2->renderActive($renderer, $vars, $adminurl, 'post'); + break; + + case _("Delete Priority"): + $form2 = new DeletePriorityForm($vars); + $form2->renderActive($renderer, $vars, $adminurl, 'post'); + break; + } + } else { + $form1->renderActive($renderer, $vars, $adminurl, 'post'); + } + } + break; + +case 'editprioritystep2form': + require_once WHUPS_BASE . '/lib/Forms/Admin/Priority.php'; + $vars->set('action', 'type'); + $form = new EditPriorityStep2Form($vars); + if ($form->validate($vars)) { + $result = $whups_driver->updatePriority($vars->get('priority'), + $vars->get('name'), + $vars->get('description')); + if (!is_a($result, 'PEAR_Error')) { + $notification->push(_("The priority has been modified."), + 'horde.success'); + + _open(); + $form->renderInactive($renderer, $vars); + } else { + $notification->push(_("There was an error editing the priority:") + . ' ' . $result->getMessage(), + 'horde.error'); + } + + $vars = new Horde_Variables(array('type' => $vars->get('type'))); + + _editPriorityForms(); + } else { + _open(); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + } + break; + +case 'defaultpriorityform': + require_once WHUPS_BASE . '/lib/Forms/Admin/Priority.php'; + $vars->set('action', 'type'); + $form = new DefaultPriorityForm($vars); + if ($form->validate($vars)) { + $result = $whups_driver->setDefaultPriority($vars->get('type'), + $vars->get('priority')); + if (is_a($result, 'PEAR_Error')) { + $notification->push( + _("There was an error setting the default priority:") . ' ' + . $result->getMessage(), + 'horde.error'); + } else { + $notification->push(_("The default priority has been set."), + 'horde.success'); + } + + _editPriorityForms(); + } else { + _open(); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + } + break; + +case 'deletepriorityform': + require_once WHUPS_BASE . '/lib/Forms/Admin/Priority.php'; + $vars->set('action', 'type'); + $form = new DeletePriorityForm($vars); + if ($form->validate($vars)) { + if ($vars->get('yesno') == 1) { + $result = $whups_driver->deletePriority($vars->get('priority')); + if (!is_a($result, 'PEAR_Error')) { + $notification->push(_("The priority has been deleted."), + 'horde.success'); + } else { + $notification->push( + _("There was an error deleting the priority:") . ' ' + . $result->getMessage(), + 'horde.error'); + } + } else { + $notification->push(_("The priority was not deleted."), + 'horde.message'); + } + + _editPriorityForms(); + } else { + _open(); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + } + break; + +case 'adduserform': + require_once WHUPS_BASE . '/lib/Forms/Admin/User.php'; + $form = new AddUserForm($vars); + if ($form->validate($vars)) { + $info = $whups_driver->getQueue($vars->get('queue')); + $result = $whups_driver->addQueueUser($vars->get('queue'), + $vars->get('user')); + if (!is_a($result, 'PEAR_Error')) { + $user = $vars->get('user'); + if (is_array($user)) { + $userinfo = array(); + foreach ($user as $userID) { + $userinfo[] = Whups::formatUser($userID); + } + $userinfo = implode(', ', $userinfo); + } else { + $userinfo = Whups::formatUser($user); + } + $notification->push( + sprintf(_("%s added to those responsible for \"%s\""), + $userinfo, $info['name']), + 'horde.success'); + } else { + $notification->push( + sprintf(_("There was an error adding \"%s\" to the responsible list for \"%s\":"), + Whups::formatUser($vars->get('user')), + $info['name']) + . ' ' . $result->getMessage(), + 'horde.error'); + } + } + + _open(); + $form1 = new EditUserStep1Form($vars); + $form1->renderActive($renderer, $vars, $adminurl, 'post'); + echo '
'; + $vars = new Horde_Variables(array('queue' => $vars->get('queue'))); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + break; + +case 'edituserform': + require_once WHUPS_BASE . '/lib/Forms/Admin/User.php'; + $form1 = new EditUserStep1Form($vars); + $form2 = new AddUserForm($vars); + + _open(); + + $form1->renderActive($renderer, $vars, $adminurl, 'post'); + echo '
'; + + $vars = new Horde_Variables(array('queue' => $vars->get('queue'))); + $form2 = new AddUserForm($vars); + $form2->renderActive($renderer, $vars, $adminurl, 'post'); + break; + +case 'edituserstep1form': + require_once WHUPS_BASE . '/lib/Forms/Admin/User.php'; + $form = new EditUserStep1Form($vars); + if ($form->validate($vars)) { + $info = $whups_driver->getQueue($vars->get('queue')); + $result = $whups_driver->removeQueueUser($vars->get('queue'), + $vars->get('user')); + if (!is_a($result, 'PEAR_Error')) { + $notification->push( + sprintf(_("\"%s\" is no longer among those responsible for \"%s\""), + Whups::formatUser($vars->get('user')), $info['name']), + 'horde.success'); + } else { + $notification->push( + sprintf(_("There was an error removing \"%s\" from the responsible list for \"%s\":"), + Whups::formatUser($vars->get('user')), $info['name']) + . ' ' . $result->getMessage(), + 'horde.error'); + } + } + + _open(); + $vars = new Horde_Variables(array('queue' => $vars->get('queue'))); + $form = new EditUserStep1Form($vars); + $form->renderActive($renderer, $vars, $adminurl, 'get'); + $form1 = new AddUserForm($vars); + $form1->renderActive($renderer, $vars, $adminurl, 'get'); + break; + +case 'addversionform': + require_once WHUPS_BASE . '/lib/Forms/Admin/Version.php'; + $form = new AddVersionForm($vars); + if ($form->validate($vars)) { + $result = $whups_driver->addVersion($vars->get('queue'), + $vars->get('name'), + $vars->get('description'), + $vars->get('active') == 'on'); + if (!is_a($result, 'PEAR_Error')) { + $queuename = $whups_driver->getQueue($vars->get('queue')); + $queuename = $queuename['name']; + $notification->push( + sprintf(_("The version \"%s\" has been added to %s."), + $vars->get('name'), $queuename), + 'horde.success'); + } else { + $notification->push(_("There was an error creating the version:") + . ' ' . $result->getMessage(), + 'horde.error'); + } + + _open(); + $vars = new Horde_Variables(array('queue' => $vars->get('queue'))); + $form1 = new EditVersionStep1Form($vars); + $form1->renderActive($renderer, $vars, $adminurl, 'post'); + $form2 = new AddVersionForm($vars); + $form2->renderActive($renderer, $vars, $adminurl, 'post'); + } else { + _open(); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + } + break; + +case 'editversionstep1form': + require_once WHUPS_BASE . '/lib/Forms/Admin/Version.php'; + $form1 = new EditVersionStep1Form($vars); + + _open(); + + if (!$vars->get('submitbutton')) { + $form1->renderActive($renderer, $vars, $adminurl, 'post'); + + $form2 = new AddVersionForm($vars); + $form2->renderActive($renderer, $vars, $adminurl, 'post'); + } else { + if ($form1->validate($vars)) { + switch ($vars->get('submitbutton')) { + case _("Edit Version"): + $form2 = new EditVersionStep2Form($vars); + $form2->renderActive($renderer, $vars, $adminurl, 'post'); + break; + + case _("Delete Version"): + $form2 = new DeleteVersionForm($vars); + $form2->renderActive($renderer, $vars, $adminurl, 'post'); + break; + } + } else { + $form1->renderActive($renderer, $vars, $adminurl, 'post'); + } + } + break; + +case 'editversionstep2form': + require_once WHUPS_BASE . '/lib/Forms/Admin/Version.php'; + $form = new EditVersionStep2Form($vars); + if ($form->validate($vars)) { + $result = $whups_driver->updateVersion($vars->get('version'), + $vars->get('name'), + $vars->get('description'), + $vars->get('active') == 'on'); + if (!is_a($result, 'PEAR_Error')) { + $notification->push(_("The version has been modified."), + 'horde.success'); + + _open(); + $form->renderInactive($renderer, $vars); + } else { + $notification->push(_("There was an error editing the version:") + . ' ' . $result->getMessage(), + 'horde.error'); + } + + _open(); + $vars = new Horde_Variables(array('queue' => $vars->get('queue'))); + $form1 = new EditVersionStep1Form($vars); + $form1->renderActive($renderer, $vars, $adminurl, 'post'); + $form2 = new AddVersionForm($vars); + $form2->renderActive($renderer, $vars, $adminurl, 'post'); + } else { + _open(); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + } + break; + +case 'deleteversionform': + require_once WHUPS_BASE . '/lib/Forms/Admin/Version.php'; + $form = new DeleteVersionForm($vars); + if ($form->validate($vars)) { + if ($vars->get('yesno') == 1) { + $result = $whups_driver->deleteVersion($vars->get('version')); + if (!is_a($result, 'PEAR_Error')) { + $notification->push(_("The version has been deleted."), + 'horde.success'); + } else { + $notification->push(_("There was an error deleting the version:") + . ' ' . $result->getMessage(), + 'horde.error'); + } + } else { + $notification->push(_("The version was not deleted."), + 'horde.message'); + } + + _open(); + $form1 = new EditVersionStep1Form($vars); + $form1->renderActive($renderer, $vars, $adminurl, 'post'); + $form2 = new AddVersionForm($vars); + $form2->renderActive($renderer, $vars, $adminurl, 'post'); + } else { + _open(); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + } + break; + +case 'addattributedescform': +case 'addattributedescform_reload': + require_once WHUPS_BASE . '/lib/Forms/Admin/Attribute.php'; + $form = new AddAttributeDescForm($vars); + $vars->set('action', 'type'); + if ($vars->get('formname') == 'addattributedescform' && + $form->validate($vars)) { + $result = $whups_driver->addAttributeDesc( + $vars->get('type'), + $vars->get('attribute_name'), + $vars->get('attribute_description'), + $vars->get('attribute_type'), + $vars->get('attribute_params'), + $vars->get('attribute_required')); + if (!is_a($result, 'PEAR_Error')) { + $typename = $whups_driver->getType($vars->get('type')); + $typename = $typename['name']; + $notification->push( + sprintf(_("The attribute \"%s\" has been added to %s."), + $vars->get('attribute_name'), $typename), + 'horde.success'); + $vars = new Horde_Variables(array('type' => $vars->get('type'))); + } else { + $notification->push(_("There was an error creating the attribute:") + . ' ' . $result->getMessage(), + 'horde.error'); + } + + _open(); + $form1 = new EditAttributeDescStep1Form($vars); + $form1->renderActive($renderer, $vars, $adminurl, 'post'); + echo '
'; + $form2 = new AddAttributeDescForm($vars); + $form2->renderActive($renderer, $vars, $adminurl, 'post'); + } else { + _open(); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + } + break; + +case 'editattributedescstep1form': + require_once WHUPS_BASE . '/lib/Forms/Admin/Attribute.php'; + $form1 = new EditAttributeDescStep1Form($vars); + $vars->set('action', 'type'); + _open(); + if (!$vars->get('submitbutton')) { + $form1->renderActive($renderer, $vars, $adminurl, 'post'); + echo '
'; + + $form2 = new AddAttributeDescForm($vars); + $form2->renderActive($renderer, $vars, $adminurl, 'post'); + } else { + if ($form1->validate($vars)) { + switch ($vars->get('submitbutton')) { + case _("Edit Attribute"): + $form2 = new EditAttributeDescStep2Form($vars); + $form2->renderActive($renderer, $vars, $adminurl, 'post'); + break; + + case _("Delete Attribute"): + $form2 = new DeleteAttributeDescForm($vars); + $form2->renderActive($renderer, $vars, $adminurl, 'post'); + break; + } + } else { + $form1->renderActive($renderer, $vars, $adminurl, 'post'); + } + } + break; + +case 'editattributedescstep2form': +case 'editattributedescstep2form_reload': + require_once WHUPS_BASE . '/lib/Forms/Admin/Attribute.php'; + $form = new EditAttributeDescStep2Form($vars); + $vars->set('action', 'type'); + if ($vars->get('formname') == 'editattributedescstep2form' && + $form->validate($vars)) { + $form->getInfo($vars, $info); + $result = $whups_driver->updateAttributeDesc( + $info['attribute'], + $info['attribute_name'], + $info['attribute_description'], + $info['attribute_type'], + $info['attribute_params'], + $info['attribute_required']); + if (!is_a($result, 'PEAR_Error')) { + $notification->push( _("The attribute has been modified."), + 'horde.success'); + + _open(); + $form->renderInactive($renderer, $vars); + echo '
'; + $vars = new Horde_Variables(array('type' => $vars->get('type'))); + } else { + $notification->push(_("There was an error editing the attribute:") + . ' ' . $result->getMessage(), + 'horde.error'); + } + + _open(); + $form1 = new EditAttributeDescStep1Form($vars); + $form1->renderActive($renderer, $vars, $adminurl, 'post'); + echo '
'; + $form2 = new AddAttributeDescForm($vars); + $form2->renderActive($renderer, $vars, $adminurl, 'post'); + } else { + _open(); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + } + break; + +case 'deleteattributedescform': + require_once WHUPS_BASE . '/lib/Forms/Admin/Attribute.php'; + $form = new DeleteAttributeDescForm($vars); + if ($form->validate($vars)) { + if ($vars->get('yesno') == 1) { + $result = $whups_driver->deleteAttributeDesc($vars->get('attribute')); + if (!is_a($result, 'PEAR_Error')) { + $notification->push(_("The attribute has been deleted."), + 'horde.success'); + } else { + $notification->push( + _("There was an error deleting the attribute:") + . ' ' . $result->getMessage(), + 'horde.error'); + } + } else { + $notification->push(_("The attribute was not deleted."), + 'horde.message'); + } + + _open(); + $form1 = new EditAttributeDescStep1Form($vars); + $form1->renderActive($renderer, $vars, $adminurl, 'post'); + $form2 = new AddAttributeDescForm($vars); + $form2->renderActive($renderer, $vars, $adminurl, 'post'); + } else { + _open(); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + } + break; + +case 'addreplyform': + require_once WHUPS_BASE . '/lib/Forms/Admin/Reply.php'; + $form = new AddReplyForm($vars); + $vars->set('action', 'type'); + if ($form->validate($vars)) { + $result = $whups_driver->addReply( + $vars->get('type'), + $vars->get('reply_name'), + $vars->get('reply_text')); + if (!is_a($result, 'PEAR_Error')) { + $typename = $whups_driver->getType($vars->get('type')); + $typename = $typename['name']; + $notification->push( + sprintf(_("The form reply \"%s\" has been added to %s."), + $vars->get('reply_name'), $typename), + 'horde.success'); + _open(); + $vars->set('reply', $result); + $form = new EditReplyStep2Form($vars); + $form->renderInactive($renderer, $vars); + } else { + $notification->push(_("There was an error creating the form reply:") + . ' ' . $result->getMessage(), + 'horde.error'); + _open(); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + } + } else { + _open(); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + } + break; + +case 'editreplystep1form': + require_once WHUPS_BASE . '/lib/Forms/Admin/Reply.php'; + $form1 = new EditReplyStep1Form($vars); + $vars->set('action', 'type'); + _open(); + if (!$vars->get('submitbutton')) { + $form1->renderActive($renderer, $vars, $adminurl, 'post'); + echo '
'; + + $form2 = new AddReplyForm($vars); + $form2->renderActive($renderer, $vars, $adminurl, 'post'); + } else { + if ($form1->validate($vars)) { + switch ($vars->get('submitbutton')) { + case _("Edit Form Reply"): + $form2 = new EditReplyStep2Form($vars); + $form2->renderActive($renderer, $vars, $adminurl, 'post'); + break; + + case _("Delete Form Reply"): + $form2 = new DeleteReplyForm($vars); + $form2->renderActive($renderer, $vars, $adminurl, 'post'); + break; + } + } else { + $form1->renderActive($renderer, $vars, $adminurl, 'post'); + } + } + break; + +case 'editreplystep2form': + require_once WHUPS_BASE . '/lib/Forms/Admin/Reply.php'; + $form = new EditReplyStep2Form($vars); + $vars->set('action', 'type'); + if ($vars->get('formname') == 'editreplystep2form' && + $form->validate($vars)) { + $result = $whups_driver->updateReply( + $vars->get('reply'), + $vars->get('reply_name'), + $vars->get('reply_text')); + if (is_a($result, 'PEAR_Error')) { + $notification->push(_("There was an error editing the form reply:") + . ' ' . $result->getMessage(), + 'horde.error'); + } else { + $notification->push( _("The form reply has been modified."), + 'horde.success'); + _open(); + $form->renderInactive($renderer, $vars); + echo '
'; + $vars = new Horde_Variables(array('type' => $vars->get('type'))); + } + + _open(); + $form1 = new EditReplyStep1Form($vars); + $form1->renderActive($renderer, $vars, $adminurl, 'post'); + echo '
'; + $form2 = new AddReplyForm($vars); + $form2->renderActive($renderer, $vars, $adminurl, 'post'); + } else { + _open(); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + } + break; + +case 'deletereplyform': + require_once WHUPS_BASE . '/lib/Forms/Admin/Reply.php'; + $form = new DeleteReplyForm($vars); + if ($form->validate($vars)) { + if ($vars->get('yesno') == 1) { + $result = $whups_driver->deleteReply($vars->get('reply')); + if (!is_a($result, 'PEAR_Error')) { + $notification->push(_("The form reply has been deleted."), + 'horde.success'); + } else { + $notification->push( + _("There was an error deleting the form reply:") + . ' ' . $result->getMessage(), + 'horde.error'); + } + } else { + $notification->push(_("The form reply was not deleted."), + 'horde.message'); + } + + _open(); + $form1 = new EditReplyStep1Form($vars); + $form1->renderActive($renderer, $vars, $adminurl, 'post'); + echo '
'; + $form2 = new AddReplyForm($vars); + $form2->renderActive($renderer, $vars, $adminurl, 'post'); + } else { + _open(); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + } + break; + +case 'sendreminderform': + require_once WHUPS_BASE . '/lib/Forms/Admin.php'; + $form = new SendReminderForm($vars); + if ($form->validate($vars)) { + $result = Whups::sendReminders($vars); + if (is_a($result, 'PEAR_Error')) { + $notification->push($result, 'horde.error'); + _open(); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + } else { + $notification->push(_("Reminders were sent."), 'horde.success'); + } + } else { + _open(); + $form->renderActive($renderer, $vars, $adminurl, 'post'); + } + break; + +case 'mtmatrix': + $vars->set('action', 'mtmatrix'); + $queues = $whups_driver->getQueues(); + $types = $whups_driver->getAllTypes(); + $matrix = $vars->get('matrix'); + + // Validate data. + $pairs = array(); + if (!empty($matrix)) { + foreach ($matrix as $mid => $mtypes) { + if (isset($queues[$mid])) { + foreach ($mtypes as $tid => $on) { + if (isset($types[$tid])) { + $pairs[] = array($mid, $tid); + } + } + } + } + } + + $result = $whups_driver->updateTypesQueues($pairs); + if (is_a($result, 'PEAR_Error')) { + $notification->push($result, 'horde.error'); + } else { + $notification->push(_("Associations updated successfully."), + 'horde.success'); + } + break; +} + +if (!_open(true)) { + // Check for actions. + switch ($vars->get('action')) { + case 'type': + require_once WHUPS_BASE . '/lib/Forms/Admin/Type.php'; + if (count($whups_driver->getAllTypes())) { + $main1 = new EditTypeStep1Form($vars); + } + $main2 = new AddTypeStep1Form($vars); + break; + + case 'reminders': + require_once WHUPS_BASE . '/lib/Forms/Admin.php'; + $main1 = new SendReminderForm($vars); + break; + + case 'mtmatrix': + _open(); + $queues = $whups_driver->getQueues(); + $types = $whups_driver->getAllTypes(); + $tlink = Horde::applicationUrl('admin/?formname=edittypeform'); + $mlink = Horde::applicationUrl('admin/?formname=editqueueform'); + require WHUPS_TEMPLATES . '/admin/mtmatrix.inc'; + break; + + case 'queue': + require_once WHUPS_BASE . '/lib/Forms/Admin/Queue.php'; + if (count($whups_driver->getQueues())) { + $main1 = new EditQueueStep1Form($vars); + } + if ($registry->hasMethod('tickets/listQueues') == $registry->getApp()) { + $main2 = new AddQueueForm($vars); + } + break; + } + + _open(); + if (isset($main1)) { + $main1->renderActive($renderer, $vars, $adminurl, 'get'); + } + if (isset($main1) && isset($main2)) { + echo '
'; + } + if (isset($main2)) { + $main2->renderActive($renderer, $vars, $adminurl, 'get'); + } +} + +_open(); +require $registry->get('templates', 'horde') . '/common-footer.inc'; diff --git a/whups/config/.cvsignore b/whups/config/.cvsignore new file mode 100644 index 000000000..dd1dda56f --- /dev/null +++ b/whups/config/.cvsignore @@ -0,0 +1,10 @@ +conf.php +conf.bak.php +create_email*.txt +hooks.php +menu.php +mime_drivers.php +notify_email*.txt +prefs.php +reminders.php +templates.php diff --git a/whups/config/.htaccess b/whups/config/.htaccess new file mode 100644 index 000000000..3a4288278 --- /dev/null +++ b/whups/config/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/whups/config/conf.php b/whups/config/conf.php new file mode 100644 index 000000000..4b10cef7a --- /dev/null +++ b/whups/config/conf.php @@ -0,0 +1,53 @@ + + + + + + sql + + + + + + + + + + + + false + + + /usr/share/games/figlet/fonts/big.flf + + + + + + + + + + false + false + new + + new + chronological + revchronological + + + true + 127.0.0.1 + 80 + + + + + + + User Preference Attributes + bug|ticket|issue + false + + + Menu Settings + + + + + + + + + + + + active + + + Unconfirmed + A ticket has been reported but not yet analyzed + unconfirmed + + + unconfirmed + new + assigned + resolved + + + + + + + active + + + Accepted + The ticket has been analyzed and accepted as valid. + new + + + unconfirmed + new + assigned + resolved + + + + + + + active + + + Assigned + Someone has accepted responsibility for the ticket. + assigned + + + unconfirmed + new + assigned + resolved + + + + + + + active + + + Resolved + The ticket has been resolved. + resolved + + + unconfirmed + new + assigned + resolved + + + + + + + active + + + Canceled + The ticket is no longer valid for one reason or another. + resolved + + + unconfirmed + new + assigned + resolved + + + + + + + inactive + + + + + + + + unconfirmed + new + assigned + resolved + + + + + + + inactive + + + + + + + + unconfirmed + new + assigned + resolved + + + + + + + inactive + + + + + + + + unconfirmed + new + assigned + resolved + + + + + + + + + + + + active + + + 1. Low + This is a very low priority ticket + + + + + active + + + 2. Medium + This is an important task, but not urgent. + + + + + active + + + 3. High + This ticket is very urgent + + + + + inactive + + + + + + + + + inactive + + + + + + + + + inactive + + + + + + + + + + diff --git a/whups/config/create_email.txt b/whups/config/create_email.txt new file mode 100644 index 000000000..a251e780e --- /dev/null +++ b/whups/config/create_email.txt @@ -0,0 +1,2 @@ +@@dont_reply@@@@ticket_url@@ +@@table@@@@comment@@ diff --git a/whups/config/create_email.txt.dist b/whups/config/create_email.txt.dist new file mode 100644 index 000000000..a251e780e --- /dev/null +++ b/whups/config/create_email.txt.dist @@ -0,0 +1,2 @@ +@@dont_reply@@@@ticket_url@@ +@@table@@@@comment@@ diff --git a/whups/config/hooks.php.dist b/whups/config/hooks.php.dist new file mode 100644 index 000000000..6afb4871c --- /dev/null +++ b/whups/config/hooks.php.dist @@ -0,0 +1,66 @@ + $common_fields, +// 'Attributes' => $attributes); +// } + + /** + * This is an example hook that intercepts ticket changes. + * + * If a comment has been added to a closed ticket, it will re-open the + * ticket, setting the state to "assigned". You might want to use numeric + * ids for the 'to' item in a real life hook. + */ +// public function ticket_update($ticket, $changes) +// { +// /* We only want to change the ticket state if it is closed, a comment +// * has been added, and the state hasn't been changed already. */ +// if (!empty($changes['comment']) && +// empty($changes['state']) && +// $ticket->get('state_category') == 'resolved') { +// /* Pick the first state from the state category 'assigned'. */ +// $states = $GLOBALS['whups_driver']->getStates($ticket->get('type'), +// 'assigned'); +// /* These three item have to exist in a change set. */ +// $changes['state'] = array( +// 'to' => key($states), +// 'from' => $ticket->get('state'), +// 'from_name' => $ticket->get('state_name')); +// } +// +// return $changes; +// } + +} diff --git a/whups/config/menu.php.dist b/whups/config/menu.php.dist new file mode 100644 index 000000000..c4510b2a8 --- /dev/null +++ b/whups/config/menu.php.dist @@ -0,0 +1,41 @@ + 'http://www.example.com/', + * 'text' => 'Example, Inc.', + * 'icon' => 'example.gif', + * 'icon_path' => 'http://www.example.com/images/', + * 'target' => '_blank', + * 'onclick' => '' + * ); + * + * You can also add a "separator" (a spacer) between menu items. To add a + * separator, simply add a new string to the $_menu array set to the text + * 'separator'. It should look like this: + * + * $_menu[] = 'separator'; + */ + +$_menu = array(); + +/* Add your custom entries below this line. */ diff --git a/whups/config/mime_drivers.php b/whups/config/mime_drivers.php new file mode 100644 index 000000000..436e9308d --- /dev/null +++ b/whups/config/mime_drivers.php @@ -0,0 +1,39 @@ + 'compressed.png'); diff --git a/whups/config/mime_drivers.php.dist b/whups/config/mime_drivers.php.dist new file mode 100644 index 000000000..436e9308d --- /dev/null +++ b/whups/config/mime_drivers.php.dist @@ -0,0 +1,39 @@ + 'compressed.png'); diff --git a/whups/config/notify_email.txt b/whups/config/notify_email.txt new file mode 100644 index 000000000..a251e780e --- /dev/null +++ b/whups/config/notify_email.txt @@ -0,0 +1,2 @@ +@@dont_reply@@@@ticket_url@@ +@@table@@@@comment@@ diff --git a/whups/config/notify_email.txt.dist b/whups/config/notify_email.txt.dist new file mode 100644 index 000000000..a251e780e --- /dev/null +++ b/whups/config/notify_email.txt.dist @@ -0,0 +1,2 @@ +@@dont_reply@@@@ticket_url@@ +@@table@@@@comment@@ diff --git a/whups/config/prefs.php b/whups/config/prefs.php new file mode 100644 index 000000000..7cabb9121 --- /dev/null +++ b/whups/config/prefs.php @@ -0,0 +1,175 @@ + _("General Options"), + 'label' => _("Display Options"), + 'desc' => _("Change display options such as how search results are sorted."), + 'members' => array('sortby', 'sortdir', 'comment_sort_dir', 'whups_default_view', 'summary_show_requested', 'summary_show_ticket_numbers', 'report_time_format', 'autolink_tickets') +); + +$prefGroups['notification'] = array( + 'column' => _("General Options"), + 'label' => _("Notification Options"), + 'desc' => _("Change options for email notifications of ticket activity."), + 'members' => array('email_others_only', 'email_comments_only')); + +if ($GLOBALS['registry']->hasMethod('contacts/sources')) { + $prefGroups['addressbooks'] = array( + 'column' => _("General Options"), + 'label' => _("Address Books"), + 'desc' => _("Select address book sources for adding and searching for addresses."), + 'members' => array('sourceselect'), + ); +} + + +// the layout of the bugs portal. +$_prefs['mybugs_layout'] = array( + 'value' => 'a:0:{}', + 'locked' => false, + 'shared' => false, + 'type' => 'implicit' +); + +// user preferred sorting column +$_prefs['sortby'] = array( + 'value' => 'id', + 'locked' => false, + 'shared' => false, + 'type' => 'enum', + 'enum' => array('id' => _("Id"), + 'summary' => _("Summary"), + 'state_name' => _("State"), + 'type_name' => _("Type"), + 'priority_name' => _("Priority"), + 'queue_name' => _("Queue"), + 'version_name' => _("Version"), + 'timestamp' => _("Created"), + 'date_assigned' => _("Assigned"), + 'date_resolved' => _("Resolved")), + 'desc' => _("Default sorting criteria:") +); + +// user preferred sorting direction +$_prefs['sortdir'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'enum', + 'enum' => array(0 => _("Ascending"), + 1 => _("Descending")), + 'desc' => _("Default sorting direction:") +); + +// default view +$_prefs['whups_default_view'] = array( + 'value' => 'mybugs', + 'locked' => false, + 'shared' => false, + 'type' => 'enum', + 'enum' => array('mybugs' => _("My Tickets"), + 'search' => _("Search Tickets"), + 'ticket/create' => _("Create Ticket")), + 'desc' => _("Select the view to display after login:") +); + +// show requested tickets in the horde summary? +$_prefs['summary_show_requested'] = array( + 'value' => 1, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Show tickets you have requested in the summary view?")); + +// show ticket ids in the horde summary? +$_prefs['summary_show_ticket_numbers'] = array( + 'value' => 1, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Show ticket IDs in the summary view?") +); + +// Allow custom time/date formats in reports +$_prefs['report_time_format'] = array( + 'value' => '%m/%d/%y', + 'locked' => false, + 'shared' => false, + 'type' => 'enum', + 'enum' => array('%a %d %B' => _("Weekday Day Month"), + '%c' => _("Weekday Day Month HH:MM:SS TZ"), + '%m/%d/%y' => _("MM/DD/YY"), + '%m/%d/%y %H:%M:%S' => _("MM/DD/YY HH:MM:SS")), + 'desc' => _("Date/Time format for search results") +); + +// Skip notification of changes you added? +$_prefs['email_others_only'] = array( + 'value' => 1, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Only notify me of ticket changes from other users?") +); + +// Skip notification without comments? +$_prefs['email_comments_only'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Only notify me of ticket changes with comments?") +); + +// AutoLink to tickets references in comments +$_prefs['autolink_tickets'] = array( + 'value' => 1, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Autolink to other tickets in comments?") +); + +// Show ticket comments in ascending or descending order? +$_prefs['comment_sort_dir'] = array( + 'value' => 1, + 'locked' => false, + 'shared' => false, + 'type' => 'enum', + 'desc' => _("Show comments in chronological order, or most recent first?"), + 'enum' => array(0 => _("Chronological (oldest first)"), + 1 => _("Most recent first")) +); + +// address book selection widget +$_prefs['sourceselect'] = array('type' => 'special'); + +// address book(s) to use when expanding addresses +// You can provide default values this way (note the \t and the double quotes): +// 'value' => "source_one\tsource_two" +// refer to turba/config/sources.php for possible source values +$_prefs['search_sources'] = array( + 'value' => "", + 'locked' => false, + 'shared' => false, + 'type' => 'implicit', +); + +// field(s) to use when expanding addresses +// This depends on the search_sources preference if you want to provide +// default values: +// 'value' => "source_one\tfield_one\tfield_two\nsource_two\tfield_three" +// will search the fields 'field_one' and 'field_two' in source_one and +// 'field_three' in source_two. +// refer to turba/config/sources.php for possible source and field values +$_prefs['search_fields'] = array( + 'value' => "", + 'locked' => false, + 'shared' => false, + 'type' => 'implicit', +); diff --git a/whups/config/prefs.php.dist b/whups/config/prefs.php.dist new file mode 100644 index 000000000..4a26feeee --- /dev/null +++ b/whups/config/prefs.php.dist @@ -0,0 +1,182 @@ + _("General Options"), + 'label' => _("Display Options"), + 'desc' => _("Change display options such as how search results are sorted."), + 'members' => array('sortby', 'sortdir', 'comment_sort_dir', 'whups_default_view', 'summary_show_requested', 'summary_show_ticket_numbers', 'report_time_format', 'autolink_tickets') +); + +$prefGroups['notification'] = array( + 'column' => _("General Options"), + 'label' => _("Notification Options"), + 'desc' => _("Change options for email notifications of ticket activity."), + 'members' => array('email_others_only', 'email_comments_only')); + +if ($GLOBALS['registry']->hasMethod('contacts/sources')) { + $prefGroups['addressbooks'] = array( + 'column' => _("General Options"), + 'label' => _("Address Books"), + 'desc' => _("Select address book sources for adding and searching for addresses."), + 'members' => array('sourceselect'), + ); +} + + +// the layout of the bugs portal. +$_prefs['mybugs_layout'] = array( + 'value' => 'a:0:{}', + 'locked' => false, + 'shared' => false, + 'type' => 'implicit' +); + +// user preferred sorting column +$_prefs['sortby'] = array( + 'value' => 'id', + 'locked' => false, + 'shared' => false, + 'type' => 'enum', + 'enum' => array('id' => _("Id"), + 'summary' => _("Summary"), + 'state_name' => _("State"), + 'type_name' => _("Type"), + 'priority_name' => _("Priority"), + 'queue_name' => _("Queue"), + 'version_name' => _("Version"), + 'timestamp' => _("Created"), + 'date_assigned' => _("Assigned"), + 'date_resolved' => _("Resolved")), + 'desc' => _("Default sorting criteria:") +); + +// user preferred sorting direction +$_prefs['sortdir'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'enum', + 'enum' => array(0 => _("Ascending"), + 1 => _("Descending")), + 'desc' => _("Default sorting direction:") +); + +// default view +$_prefs['whups_default_view'] = array( + 'value' => 'mybugs', + 'locked' => false, + 'shared' => false, + 'type' => 'enum', + 'enum' => array('mybugs' => _("My Tickets"), + 'search' => _("Search Tickets"), + 'ticket/create' => _("Create Ticket")), + 'desc' => _("Select the view to display after login:") +); + +// show requested tickets in the horde summary? +$_prefs['summary_show_requested'] = array( + 'value' => 1, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Show tickets you have requested in the summary view?"), +); + +// show ticket ids in the horde summary? +$_prefs['summary_show_ticket_numbers'] = array( + 'value' => 1, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Show ticket IDs in the summary view?"), +); + +// Allow custom time/date formats in reports +$_prefs['report_time_format'] = array( + 'value' => '%m/%d/%y', + 'locked' => false, + 'shared' => false, + 'type' => 'enum', + 'enum' => array( + '%a %d %B' => _("Weekday Day Month"), + '%c' => _("Weekday Day Month HH:MM:SS TZ"), + '%m/%d/%y' => _("MM/DD/YY"), + '%m/%d/%y %H:%M:%S' => _("MM/DD/YY HH:MM:SS"), + '%d/%m/%y' => _("DD/MM/YY"), + '%d/%m/%y %H:%M:%S' => _("DD/MM/YY HH:MM:SS"), + '%y/%m/%d' => _("YY/MM/DD"), + '%y/%m/%d %H:%M:%S' => _("YY/MM/DD HH:MM:SS"), + ), + 'desc' => _("Date/Time format for search results"), +); + +// Skip notification of changes you added? +$_prefs['email_others_only'] = array( + 'value' => 1, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Only notify me of ticket changes from other users?"), +); + +// Skip notification without comments? +$_prefs['email_comments_only'] = array( + 'value' => 0, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Only notify me of ticket changes with comments?") +); + +// AutoLink to tickets references in comments +$_prefs['autolink_tickets'] = array( + 'value' => 1, + 'locked' => false, + 'shared' => false, + 'type' => 'checkbox', + 'desc' => _("Autolink to other tickets in comments?") +); + +// Show ticket comments in ascending or descending order? +$_prefs['comment_sort_dir'] = array( + 'value' => 1, + 'locked' => false, + 'shared' => false, + 'type' => 'enum', + 'desc' => _("Show comments in chronological order, or most recent first?"), + 'enum' => array(0 => _("Chronological (oldest first)"), + 1 => _("Most recent first")) +); + +// address book selection widget +$_prefs['sourceselect'] = array('type' => 'special'); + +// address book(s) to use when expanding addresses +// You can provide default values this way (note the \t and the double quotes): +// 'value' => "source_one\tsource_two" +// refer to turba/config/sources.php for possible source values +$_prefs['search_sources'] = array( + 'value' => "", + 'locked' => false, + 'shared' => false, + 'type' => 'implicit', +); + +// field(s) to use when expanding addresses +// This depends on the search_sources preference if you want to provide +// default values: +// 'value' => "source_one\tfield_one\tfield_two\nsource_two\tfield_three" +// will search the fields 'field_one' and 'field_two' in source_one and +// 'field_three' in source_two. +// refer to turba/config/sources.php for possible source and field values +$_prefs['search_fields'] = array( + 'value' => "", + 'locked' => false, + 'shared' => false, + 'type' => 'implicit', +); diff --git a/whups/config/reminders.php.dist b/whups/config/reminders.php.dist new file mode 100644 index 000000000..55b238a4f --- /dev/null +++ b/whups/config/reminders.php.dist @@ -0,0 +1,46 @@ + A cron-style date specification defining how often + * the rule will be triggered. For example, + * '* 30 11 1-31&Mon *' would run any second, at half + * past the hour of 11, every Monday in the month, every + * month. + * + * 'server_name' => The hostname that reminder emails will be sent + * from. Necessary since $_SERVER['SERVER_NAME'] is + * not present when running from cron. You can ignore + * this if you've set an explicit server name in + * horde's conf.php in $conf['server']['name']. + * + * 'queue' => Which Whups queue are we looking at? + * + * 'unassigned' => What email address should we send notification of + * unassigned tickets to? Can be set to false or any + * empty value if no email is necessary. + * + * 'category' => An array of states to send reminders for. Any of + * 'unconfirmed', 'new', 'assigned', and 'resolved', + * though I doubt you'll want to send reminders for + * resolved tickets. + */ + +$reminders = array(); + +// Here's an example entry that will send reminders for queue number 1 +// every Monday at 5am, for everything but resolved tickets. +$reminders[] = array('frequency' => '* 0 5 1-31&Mon *', + 'server_name' => 'www.example.com', + 'queue' => 1, + 'unassigned' => false, + 'category' => array('unconfirmed', 'new', 'assigned')); diff --git a/whups/config/templates.php b/whups/config/templates.php new file mode 100644 index 000000000..0b9206c27 --- /dev/null +++ b/whups/config/templates.php @@ -0,0 +1,59 @@ + 'searchresults', + 'filename' => 'report.html', + 'name' => _("Simple HTML Report"), + 'sortby' => array('type_name', 'timestamp'), + 'sortdir' => array(0, 1), + 'template' => ' + + + + + + + + + + + + + + + + + + +
#TypeOwnersOpen DateDescription
' +); + +$_templates['csv'] = array( + 'type' => 'searchresults', + 'name' => _("Comma Separated Values (CSV file)"), + 'filename' => 'report.csv', + 'callback' => '_csvQuote', + 'template' => 'ID,Summary,State,Type,Priority,Queue,Version,Owners,Created,Assigned,Resolved +,,,,,,,,,, + +' +); + +if (!function_exists('_csvQuote')) { + function _csvQuote(&$data, $key) + { + if (strpos($data, ',') !== false) { + $data = '"' . str_replace('"', '\"', $data) . '"'; + } + } +} diff --git a/whups/config/templates.php.dist b/whups/config/templates.php.dist new file mode 100644 index 000000000..0b9206c27 --- /dev/null +++ b/whups/config/templates.php.dist @@ -0,0 +1,59 @@ + 'searchresults', + 'filename' => 'report.html', + 'name' => _("Simple HTML Report"), + 'sortby' => array('type_name', 'timestamp'), + 'sortdir' => array(0, 1), + 'template' => ' + + + + + + + + + + + + + + + + + + +
#TypeOwnersOpen DateDescription
' +); + +$_templates['csv'] = array( + 'type' => 'searchresults', + 'name' => _("Comma Separated Values (CSV file)"), + 'filename' => 'report.csv', + 'callback' => '_csvQuote', + 'template' => 'ID,Summary,State,Type,Priority,Queue,Version,Owners,Created,Assigned,Resolved +,,,,,,,,,, + +' +); + +if (!function_exists('_csvQuote')) { + function _csvQuote(&$data, $key) + { + if (strpos($data, ',') !== false) { + $data = '"' . str_replace('"', '\"', $data) . '"'; + } + } +} diff --git a/whups/data.php b/whups/data.php new file mode 100644 index 000000000..d83d3ccdd --- /dev/null +++ b/whups/data.php @@ -0,0 +1,66 @@ + + */ + +define('WHUPS_BASE', dirname(__FILE__)); +require_once WHUPS_BASE . '/lib/base.php'; +require_once 'Horde/Template.php'; +require WHUPS_BASE . '/config/templates.php'; + +if (!Horde_Auth::getAuth()) { + header('Location: ' . Horde::applicationUrl('search.php', true)); + exit; +} + +$tpl = Horde_Util::getFormData('template'); + +if (empty($_templates[$tpl])) { + Horde::fatal(_("The requested template does not exist."), __FILE__, __LINE__); +} +if ($_templates[$tpl]['type'] != 'searchresults') { + Horde::fatal(_("This is not a search results template."), __FILE__, __LINE__); +} + +// Fetch all unresolved tickets assigned to the current user. +$info = array('id' => explode(',', Horde_Util::getFormData('ids'))); +$tickets = $whups_driver->getTicketsByProperties($info); +foreach ($tickets as $id => $info) { + $tickets[$id]['#'] = $id + 1; + $tickets[$id]['link'] = Whups::urlFor('ticket', $info['id'], true, -1); + $tickets[$id]['date_created'] = strftime('%x', $info['timestamp']); + $tickets[$id]['owners'] = Whups::getOwners($info['id']); + $tickets[$id]['owner_name'] = Whups::getOwners($info['id'], false, true); + $tickets[$id]['owner_email'] = Whups::getOwners($info['id'], true, false); + if (!empty($info['date_assigned'])) { + $tickets[$id]['date_assigned'] = strftime('%x', $info['date_assigned']); + } + if (!empty($info['date_resolved'])) { + $tickets[$id]['date_resolved'] = strftime('%x', $info['date_resolved']); + } + + // If the template has a callback function defined for data + // filtering, call it now. + if (!empty($_templates[$tpl]['callback'])) { + array_walk($tickets[$id], $_templates[$tpl]['callback']); + } +} + +Whups::sortTickets($tickets, + isset($_templates[$tpl]['sortby']) ? $_templates[$tpl]['sortby'] : null, + isset($_templates[$tpl]['sortdir']) ? $_templates[$tpl]['sortdir'] : null); + +$template = new Horde_Template(); +$template->set('tickets', $tickets); +$template->set('now', strftime('%x')); +$template->set('values', Whups::getSearchResultColumns(null, true)); + +$browser->downloadHeaders(isset($_templates[$tpl]['filename']) ? $_templates[$tpl]['filename'] : 'report.html'); +echo $template->parse($_templates[$tpl]['template']); diff --git a/whups/docs/CHANGES b/whups/docs/CHANGES new file mode 100644 index 000000000..e86ffb0d6 --- /dev/null +++ b/whups/docs/CHANGES @@ -0,0 +1,356 @@ +-------- +v2.0-cvs +-------- + + + + +---------- +v1.0.2-cvs +---------- + + + + +------ +v1.0.1 +------ + +[jan] Fix Oracle SQL scripts. +[jan] Render private comments for everyone, but hide the comment text. +[jan] Add flag to disable old versions. +[jan] Apply simple markup highlighting on comments. +[jan] Save queue email addresses when editing queues (horde@hatzidakis.org, + Bug #7905). +[jan] Fix charset conversion of comments added with mail-filter.php + (thomas@gelf.net, Bug #7730). +[cjh] Show version changes in the ticket history. +[jan] Use all credentials and mailer settings when sending mails. +[cjh] Allow changing the queue version from the Update screen. +[cjh] Add more date formats to the report_time_format preference + (b5b5b5b5@centrum.sk, Request #7793). +[jan] Escape SQL wildcards in string queries. +[cjh] Enforce queue permissions in ticket-listing blocks (Bug #7614). +[cjh] Ensure the DB library is explicitly loaded (Bug #7647). +[jan] Add Turkish translation (Akif Dinc ). +[jan] Fix linking to queries if URL rewriting is turned off. + + +---- +v1.0 +---- + +[jan] Change group field in shares table to work with LDAP groups (Bug #6883). +[jan] Fix rendering attribute criteria in the query tree. +[jan] Generate a valid Message-ID. +[mjr] Fix an issue with searching on installations with a single queue that + was causing all existing tickets in the queue to be displayed on entering + the search page. + + +-------- +v1.0-RC2 +-------- + +[jan] Add date search criteria (Duck , Request #7274). +[cjh] Add an RSS feed of search results (Duck , Request #7259). +[jan] Group statistics by ticket type. +[jan] Add Precedence and Auto-Submitted headers to notification messages + (Request #7082). +[jan] Add In-Reply-To header to notification messages (Request #7103). +[jan] Add button to save searches as queries (Request #5921). +[jan] Add query slugs and RSS feeds (Request #5924). +[jan] Implement editing of query elements. +[mjr] Fix saving of queries. + + +-------- +v1.0-RC1 +-------- + +[jan] Remove attributes hooks. +[jan] Add form replies. +[jan] Add support for queue-specific notification messages. +[jan] Add email address per queue for ticket notifications. +[jan] Use highlightquotes filter for quoted comments. +[jan] Send notification messages in flowed text format (requires Horde 3.2.1). +[jan] Allow to specify field types and parameters for attributes. +[jan] Add a hook that is called if a ticket is being updated, for automatic + ticket changes. +[jan] Add auto-completion to retrieve requesters from the address book. +[jan] Add per-queue permission to manually set the ticket requester. +[jan] Deal with queue vs. admin permissions more consistently. +[jan] Add configuration option whether to include email headers in comments. +[cjh] Improve resource usage in datatree_to_sql share migration script + (Bug #6740). +[cjh] Add an upgrade script for the new SQL share driver (Request #6109). +[jan] Add preference to only receive notifications if a comment has been added. +[jan] Send personalized ticket notification messages. +[jan] Add addAttachment API method. +[jan] Add message templates for email notifications. +[jan] Sequentially number comments (Request #4895). +[jan] Unset resolved date when un-resolving tickets (Bug #6310). +[jan] Add mail sender as requester when using the --default-auth argument with + scripts/mail-filter.php. +[jan] Notify watchers that have just been added by email. +[jan] Add attributes search to query builder. +[jan] Rename API methods get_assigned_ticket_ids, get_requested_ticket_ids, + get_schema, add_tickets, and set_ticket_attributes. +[jan] Add --guess-queue argument to mail-filter.php. +[cjh] Use pretty URLs if Horde is configured for them (Request #5922). +[jan] Add configuration for default types, states, and priorities. +[mjr] Attribute values now show correctly in initial ticket notifications. +[jan] Add a hook to customize field grouping in the ticket views. +[cjh] Combine Type and Category selects in search form (php@ideacode.com, + Request #4928). +[jan] Show attribute changes in ticket history. +[jan] Allow scripts/mail-filter.php to process attachments. +[jan] Add ability to read messages from a mailbox to scripts/mail-filter.php. +[cjh] Don't re-use old attachment names even if the attachment has since been + deleted (Bug #4472). +[cjh] Store the guest user associated with transactions that only add an + attachment, with no comment text (Bug #2890). +[cjh] Include attribute values in ticket emails, including "diffs" for changes + (Bug #1083). +[cjh] When creating a ticket, preserve attachments uploaded in step 3 when + step 4 is used to assign the ticket (Bug #2514). +[cjh] When replying to a restricted comment, default to the same restriction + (Request #4902). +[cjh] Support split read and write databases (, Request #5926). +[jan] Add Lithuanian translation (Vilius Sumskas ). +[cjh] Add an addComment API method. +[jan] Add OpenSearch interface for direct ticket access through browser bars. +[jan] Move all Whups-specific hook examples from Horde's config/ directory. +[cjh] Rename whups_tickets_listeners to whups_ticket_listeners for consistency. +[cjh] Add a tree menu block (Jakob Schroeter ). +[cjh] On the search screen, only show types that are associated with queues + that are available/active (tinu@humbapa.ch, Request #4107). +[jan] Add Polish translation (Tadeusz Lesiecki , Piotr + Tarnowski ). +[jan] Add Ukrainian translation (Andriy Kopystyansky ). +[cjh] Ensure that a due date in a prior year doesn't make the EditTicketForm + invalid (Bug #4763). +[cjh] Remove saved searches (Request #4897). +[cjh] Calculate ticket date attributes when they change instead of on every + access (php@ideacode.com, Request #4893). +[cjh] Queries are now managed as shares, but the serialized bits are stored + and managed by Whups in their own dedicated table. +[jan] Allow guest access to query page. +[cjh] Smarter word wrapping in string representations of tickets + (Request #4510). +[cjh] Add a Queue Summary block showing queues with the number of open + tickets in each (Request #4628). +[cjh] Combine the People tab with the Update tab. +[cjh] Allow changing ticket queues as long as the user has DELETE permissions + on the current queue and EDIT permissions on the new queue + (tmerritt@email.arizona.edu, Request #4268). +[cjh] Add hours and minutes to due dates. +[cjh] Always use Summary for the ticket summary field label. +[jan] Add Slovenian translation (Duck ). +[cjh] Show the requester in search results (rodion (at) nezna (dot) com, + Bug #2820). +[cjh] Show either the Comment or Update tabs depending on permissions, + but not both. +[cjh] Report the last-updated date for tickets (Bug #2396). +[cjh] Tickets now have an optional due date field. +[cjh] New updateTicket API call (Ben Klang , Bug #4101). +[cjh] Check permissions when setting ticket attributes through an API call + (Ben Klang , Bug #4098). +[cjh] If guests can add tickets but not view them, don't tell them adding + failed (Bug #3630). +[cjh] Add Unassigned Tickets Horde_Block (Request #766). +[mas] Fix sorting in summary page to better handle dates. (Bug #2930) +[cjh] Add CAPTCHA support to the Add Comment and Create Ticket forms. +[cjh] Deliver RSS feeds in a way that supports USM + (http://www.kbcafe.com/rss/usm.html, Request #2593). +[cjh] processMail() now ignores emails that were generated by Whups + (Bug #3398). +[ben] Better support for MS-SQL. +[jan] Add Norwegian (Bokmal) translation (Torbjorn Grindhaug + ). +[cjh] "My Bugs" page is now a Horde_Block layout (Request #3202). +[cjh] Fix permissions checking for ticket comments when an admin user is the + one making the comment (Bug #2673). +[cjh] Delete searches by getvars string, not by name (Bug #3197). +[jan] Allow to assign tickets to foreign groups + (ronny.adsetts@amazinginternet.com, Request #2477). +[cjh] Add support for dynamic re-sorting of search results, including saving + the sort preferences on any changes. +[mas] Protect against HTML tags in the search results summary. +[jan] Allow other applications to provide versions. +[jan] Simplify UI for query editor and allow to search for versions. +[jan] Allow to send notification mails to queue-specific addresses (Marcus + Boerger ). +[jan] Allow other applications to provide queues. +[cjh] Add *-id arguments for type, priority, state, and queue to + mail-filter.php (Bug #2347). +[cjh] Add a link to return to the list of search results, along with the + previous/next links (Bug #1751). +[cjh] Fix the Quicksearch links. +[cjh] mail-filter.php now handles replies as well (Bug #280). +[cjh] Use the date_format preference for displaying TicketDetailsForm + as well (Bug #2151). +[jan] Add Russian translation (Illya Belov ). +[mas] Add ability to search by ticket requester. +[mas] Change any output of and tags to and for better + accessibility support. +[cjh] Add links to Update/Comment from individual transactions, which quote + that transaction's comment text (Bug #823). +[cjh] Add explicit permissions for assigning and updating tickets + (tmerritt@email.arizona.edu, Bug #1955). +[jan] Strike-through links to resolved tickets. +[jan] Make server name and port in mail-filter.php configurable (Bug #2004). +[cjh] Honor creator permissions on tickets (tmerritt@email.arizona.edu, + Bug #1945). +[cjh] Implement ticket watchers (tmerritt@email.arizona.edu, Bug #867). +[cjh] Enforce permissions on queues in reports, let guests see reports + if they have permissions (Bug #1812). +[cjh] Allow export templates to define a callback function for filtering + data. Includes an example for properly quoting CSV data (Bug #1774). +[jan] Use bind variables in the SQL driver (Bug #1701). +[cjh] Queries are stored as Horde_Share objects with full permissions. + (Bug #1481). +[cjh] Delete queue permissions when deleting a queue (Bug #1462). +[jan] Add MIME viewer for ZIP files. +[cjh] Queries can now be deleted (Bug #1193). +[cjh] Preserve the current search criteria when re-sorting results (Bug #1024). +[cjh] Link to ticket RSS feeds on all ticket display pages. +[cjh] Allow administrators to delete attachments (Bug #1252). +[cjh] Allow uploading an attachment when initially creating a ticket. +[cjh] Fix group-restricted comments (Bug #1225). +[jan] Add Brazilian Portuguese translation (Daniel V. Hoisel + ). +[cjh] Whups_Mail::processMail needs to use Whups_Ticket for ticket creation + to trigger email notifications, etc (Bug #1134). +[cjh] Allow inserting explicit Type filters into Query Builder queries + (Bug #434). +[cjh] Force users to choose a queue when creating tickets with the goal + of cutting down on misfiled tickets (Bug #588). +[cjh] Remove the Attachment tab, as it currently serves no purpose beyond + the Comment tab (Bug #868). +[cjh] Add a numeric log_value_num field for faster logs table comparisons + and for compatibility with databases that can't cast strings into + integer comparisons (Oracle, etc) (rvs (at) angara (dot) ru). +[jan] Add Finnish translation (Leena Heino ). +[jan] Add Spanish translation (Manuel Perez Ayala ). +[cjh] The way ticket histories are stored and retrieved has been completely + revamped to be quicker, more robust, and more complete. +[cjh] Add a 'summary' search option in the basic search form (Bug #269). +[cjh] Queue is now a valid query builder criterion. +[cjh] Add previous/next navigation when there's a current list of search + results to navigate through. +[cjh] Changing a ticket's queue now also allows setting a queue version. +[cjh] Group ticket histories by transaction, not by individual change. +[cjh] Show users their saved queries as well as saved searches. +[jan] Add Simplified Chinese translation (Liaobin ). +[cjh] Add a basic "Update" screen for changing summary, state, priority, + and adding attachments/comments, all at once. +[cjh] Finish renaming "module" to "queue" throughout the data and SQL. +[cjh] Add $conf['mail']['always_copy'] to allow Whups to always copy + a specific email address on ticket mail. +[cjh] Mail can be configured to come from a single email address now, + making it easier to allow Whups to post ticket email to a + mailing list, etc. +[cjh] Add a "DO NOT REPLY" note to generated emails if Whups isn't + configured to handle replies to ticket mail. +[cjh] Advertise permissions through the API. +[jan] Add Dutch translation (Stefan de Konink ). +[cjh] Make ticket owners available in search results again. +[jan] Allow uploading of attachments. +[cjh] Allow assigning tickets to groups. +[cjh] Add Set Type action to the details page (Bo Daley ). +[cjh] Allow clearing of all or individual searches (Bo Daley ). +[cjh] Start of a reminder-sending daemon. +[cjh] Allow assignment of a ticket to multiple users. +[cjh] Queue/Type matrix is now functional and allows very quick editing + of which ticket types are associated with each module. +[jan] Add Romanian translation (Eugen Hoanca ). +[cjh] Allow much more flexible configuration of who gets email on + various actions (Bo Daley ). +[cjh] Whups can now send out simple reminders. +[cjh] By giving users the 'whups:admin' permission, people can administer + individual queues in Whups, or just Whups as opposed to all of Horde. +[cjh] Allow multiple levels of sorting (first by date, then type, etc). +[cjh] Phrases in ticket comments can now be linked to the ticket in question + automatically (Mike Baptiste ). +[cjh] Use Horde_Template to generate configurable reports from + search result sets. +[cjh] Add a New Ticket link in the summary screen + (Brian Keifer ). +[cjh] Add a preference for not showing requested tickets in the summary + screen (Brian Keifer ). +[cjh] Prevent guest users from assigning tickets and make them enter + the ticket password to change state/priority. +[cjh] Guest users can now add tickets and add comments to tickets when + they have permissions to do so. +[cjh] We can now retrieve much more flexible datasets, such as the + average time it takes to resolve a ticket by developer, + requester, module, etc. +[cjh] Add a flexible set of stats, such as the average time a ticket + is unresolved. +[cjh] Add a much more flexible set of graphs, and a "My Bugs" + section for ticket summaries. +[cjh] Search results can now specify the results title header. +[cjh] Reports currently lacks pretty graphs, but now shows more useful + information - all assigned and requested tickets. +[cjh] Fix usage of Variables:: class. +[jan] Add Traditional Chinese translation (David Chang ). +[jan] Add Bulgarian translation (Miroslav Pendev ). +[cjh] Better enforcement of permissions on modules, especially + during searches. +[cjh] Add options for how many comments are sent in bug emails, + and in what order. +[cjh] Make sure that comments mailed to users don't include private + comments they aren't authorized to see. +[cjh] Clean up the format of generated emails to be much clearer. +[cjh] All email notification triggers now work. +[cjh] Add a standard Horde menu. +[cjh] Add an Options screen. +[cjh] Fix the Query Builder. +[cjh] Whups now uses the Horde FormSprocket:: API for all form handling. +[cjh] Ticket search results are now fully sortable, and a user preference. +[jan] Add French translation (Thierry Thomas). +[cjh] Use users' identities for showing names of requester, owner, etc. +[cjh] Include assigned and resolved dates in the search results view. +[cjh] Include date created, assigned, and resolved in the details view. +[cjh] Don't show resolved tickets in the summary. +[cjh] Require permission (whups:hiddenComments, at level Edit) to make + comments specific to a group. +[cjh] Display comments which are restricted differently. +[cjh] Add the ability to restrict viewing of a comment to a Group. +[cjh] Improve the reporting data that gets saved by a lot. +[jan] Add Czech translation. +[cjh] Fix some non-portable SQL. +[cjh] Add the option to keep track of different versions for a module. +[cjh] Fix problems when there are no types associated with a module. +[cjh] Default select lists which have only one value to that value. In + some cases this allows for auto-filling of forms (creating tickets). +[cjh] Include session ID in forms/links. +[cjh] Only show users queues which they have permissions for. +[cjh] Add a link from the edit queue section to edit the permissions on + that module. +[cjh] Add managing of which users can have tickets assigned to them, on a + per-module basis. +[cjh] Remove the sample data, as it poses sequence problems and isn't needed + now that the administration interface works. +[cjh] Don't create the sequence tables in whups.sql; PEAR needs to create + them itself to get implementation-specific details right. +[cjh] Administration interface - adding, deleting, and editing of modules, + types, states, and priorities all work now. +[jon] Adapt to the new Horde::img() syntax. +[cjh] Types can now map to multiple modules, instead of either one or global. + This is a much more flexible setup, and actually allows re-use of types. +[cjh] Added a SetType for collections of on/off values (a checkbox set). +[cjh] Use $registry->get() in place of other $registry->get + functions. +[cjh] Use WHUPS_TEMPLATES for template paths. +[jon] Enable the "portability" option in the SQL driver. +[jan] Remove the standard value for the language preference. The language to + fall back to should be set Horde wide in lang.php instead. +[cjh] Add API method and implementation for adding modules. +[rec] Add query builder, many UI improvements, more horde-style design. +[cjh] Apply patches from Alex L. for assignment, users, etc. +[avsm] Replace $conf['paths'] with the $registry equivalents. +[cjh] Convert short tags ( + +- Initial codebase +- Query builder + +Chuck Hagenbuch + +- Horde cleanup +- Reports generation +- Administration GUI + +Jan Schneider + +- Attachments +- E-mail support +- Form replies +- Stuff + + +Localization +============ + +====================== =============================================== +Brazilian Portuguese Daniel V. Hoisel +Bulgarian Miroslav Pendev +Chinese (Simplified) Liaobin +Chinese (Traditional) David Chang +Czech Pavel Chytil + Václav Hůla +Dutch Stefan de Konink + Han Spruyt +Finnish Leena Heino +French Thierry Thomas +Italian Fabio Pedretti +Lithuanian Vilius Šumskas +Norwegian (Bokmal) Torbjorn Grindhaug +Polish Tadeusz Lesiecki + Piotr Tarnowski +Romanian Eugen Hoanca +Russian Illya Belov + Alexey Zakharov +Slovenian Duck +Spanish Manuel Perez Ayala +Turkish Akif Dinc +Ukrainian Andriy Kopystyansky +====================== =============================================== diff --git a/whups/docs/INSTALL b/whups/docs/INSTALL new file mode 100644 index 000000000..952971e90 --- /dev/null +++ b/whups/docs/INSTALL @@ -0,0 +1,297 @@ +====================== + Installing Whups 1.0 +====================== + +:Last update: $Date: 2008/08/28 09:39:33 $ +:Revision: $Revision: 1.25 $ +:Contact: dev@lists.horde.org + +.. contents:: Contents +.. section-numbering:: + +This document contains instructions for installing the Whups web-based +ticket-tracking application on your system. + +For information on the capabilities and features of Whups, see the file +README_ in the top-level directory of the Whups distribution. + + +Obtaining Whups +=============== + +Whups can be obtained from the Horde website and FTP server, at + + http://www.horde.org/whups/ + + ftp://ftp.horde.org/pub/whups/ + +Or use the mirror closest to you: + + http://www.horde.org/mirrors.php + +Bleeding-edge development versions of Whups are available via CVS; see the +file `horde/docs/HACKING`_ in the Horde distribution, or the website +http://www.horde.org/source/, for information on accessing the Horde CVS +repository. + + +Prerequisites +============= + +To function properly, Whups **requires** the following: + +1. A working Horde installation. + + Whups runs within the `Horde Application Framework`_, a set of common + tools for Web applications written in PHP. You must install Horde before + installing Whups. + + .. Important:: Whups 1.0 requires version 3.2+ of the Horde Framework - + earlier versions of Horde will **not** work. + + .. _`Horde Application Framework`: http://www.horde.org/horde/ + + The Horde Framework can be obtained from the Horde website and FTP server, + at + + http://www.horde.org/horde/ + + ftp://ftp.horde.org/pub/horde/ + + Many of Whups's prerequisites are also Horde prerequisites. + + .. Important:: Be sure to have completed all of the steps in the + `horde/docs/INSTALL`_ file for the Horde Framework before + installing Whups. + +2. The following PHP capabilities: + + a. SQL support + + Whups stores its data in an SQL database. Build PHP with whichever SQL + driver you require; see the`horde/docs/INSTALL`_ file for details. + + +Installing Whups +================ + +Whups is written in PHP, and must be installed in a web-accessible directory. +The precise location of this directory will differ from system to system. +Conventionally, Whups is installed directly underneath Horde in the web +server's document tree. + +Since Whups is written in PHP, there is no compilation necessary; simply +expand the distribution where you want it to reside and rename the root +directory of the distribution to whatever you wish to appear in the URL. For +example, with the Apache web server's default document root of +``/usr/local/apache/htdocs``, you would type:: + + cd /usr/local/apache/htdocs/horde + tar zxvf /path/to/whups-h3-x.y.z.tar.gz + mv whups-h3-x.y.z whups + +and would then find Whups at the URL:: + + http://your-server/horde/whups/ + + +Configuring Whups +================= + +1. Configuring Horde for Whups + + a. Register the application + + In ``horde/config/registry.php``, find the ``applications['whups']`` + stanza. The default settings here should be okay, but you can change + them if desired. If you have changed the location of Whups relative to + Horde, either in the URL, in the filesystem or both, you must update the + ``fileroot`` and ``webroot`` settings to their correct values. + +2. Creating the database table + + The specific steps to create the Whups database table depend on which + database you've chosen to use. + + First, look in ``scripts/drivers/`` to see if a script already exists for + your database type. If so, you should be able to simply execute that script + as superuser in your database. + + If such a script does not exist, you'll need to build your own, using the + file ``whups.sql`` as a starting point. If you need assistance in creating + databases, you may wish to let us know on the Whups mailing list. + +3. Configuring Whups + + To configure Whups, change to the ``config/`` directory of the installed + distribution, and make copies of all of the configuration ``dist`` files + without the ``dist`` suffix:: + + cd config/ + for foo in *.dist; do cp $foo `basename $foo .dist`; done + + Or on Windows:: + + copy *.dist *. + + Documentation on the format and purpose of those files can be found in each + file. You may edit these files if you wish to customize Whups's appearance + and behavior. With one exception (``reminders.php``, in case you want to + automatically sent out reminders about open tickets) the defaults will be + correct for most sites. + + The ``create_email.txt`` and ``notify_email.txt`` files define how outgoing + email notifications about new respectively updated tickets look like. If + using non-ascii character in this file, it has to saved with UTF-8 + encoding. The following placeholders are available: + + :@@ticket_url@@: The link to the ticket page. + :@@table@@: The ticket summary table. + :@@comment@@: The last user comment if any, including leading + linebreaks. + :@@dont_reply@@: The message telling users to not reply, if enabled in + the configuration, including trailing line breaks. + :@@date@@: The current date. + :@@full_name@@: The full name of the notification recipient. + :@@auth_name@@: The full name of the user that updated the ticket. + + You can also specify queue-specific notification messages by creating + seperate files with the following naming convention: ``create_email_X.txt`` + will be used for ticket creation emails for queue "X"; + ``notify_email_Y.txt`` will be used for notification emails for queue "Y". + + You must login to Horde as a Horde Administrator to finish the + configuration of Whups. Use the Horde ``Administration`` menu item to get + to the administration page, and then click on the ``Configuration`` icon to + get the configuration page. Select ``Tickets`` from the selection list of + applications. Fill in or change any configuration values as needed. When + done click on ``Generate Tickets Configuration`` to generate the + ``conf.php`` file. If your web server doesn't have write permissions to the + Whups configuration directory or file, it will not be able to write the + file. In this case, go back to ``Configuration`` and choose one of the + other methods to create the configuration file ``whups/config/conf.php``. + + If you would like the ability to create and update tickets via + email, you will need to set up ``whups/scripts/mail-filter.php`` to + receive email from the appropriate addresses. This script takes a + number of arguments; see the script for more details. A typical + setup might be:: + + bugs |/path/to/horde/whups/scripts/mail-filter.php --queue-name=Bugs --type-name=Bug --state-name=New --priority-name=Low + + This will take in mail to the ``bugs`` address at your domain, and + create new tickets in the ``Bugs`` queue, with a type of ``Bug``, a + state of ``New``, and ``Low`` priority. Note that this must be a + valid combination of queue/type/state/priority names in your Whups + installation. If an email references an existing ticket (ticket + numbers are recognized in the subject line) it will be updated + instead. + + Note for international users: Whups uses GNU gettext to provide local + translations of text displayed by applications; the translations are found + in the ``po/`` directory. If a translation is not yet available for your + locale (and you wish to create one), see the ``horde/po/README`` file, or + if you're having trouble using a provided translation, please see the + `horde/docs/TRANSLATIONS`_ file for instructions. + +4. Testing Whups + + Use Whups to create your base data, create tickets, and modify + tickets. Test at least the following: + + - Creating a new project (queue) + - Creating ticket types, states, priorities for a project + - Adding a ticket + - Assigning a ticket + - Closing a ticket + +5. Creating tickets from email messages + + Whups provides functionality that can be used to create and update tickets + from email messages. One part of this functionality is the + ``mail-filter.php`` in the ``whups/scripts/`` directory. It can either be + installed inside the mail chain, or run as a standalone script against an + IMAP or POP3 server. It provides a list of all available command line + arguments if called with the ``--help`` argument: ``./mail-filter.php + --help``. + + If you use the arguments starting with ``--mail``, the script will login to + the provided IMAP or POP3 server and process all messages in the specified + folder. Any successfully processed messages will be deleted. An error + message will be displayed for any failed messages. Using the script in this + mode makes most sense when run regularly, e.g. by a cron job or the Windows + task planner. + + You can also install the script inside the mail chain. In this mode, the + script expects a single email message from standard input. A common + scenario would be to pipe all messages to a certain email address through + this script, e.g. through the forwarding or alias mechanism. An example + entry in ``/etc/alias`` could look like this:: + + bugs:"|/pathtohorde/whups/scripts/mail-filter.php -q 'Test Queue' -t mytype -p '1. Low' -s Unconfirmed" + + Even though this example uses "names" for the arguments, it's preferred to + use IDs, because those doesn't cause any problems with spaces, or non-ascii + characters. + + The script tries to determine the ticket number from the message, if a + ticket number hasn't been specified with the ``--ticket`` + argument. Currently it searches for strings looking like "[Bug #1]" in the + message subject. If a ticket number cannot be determined by any means, or + if a ticket with that number doesn't exist, a new ticket is created. + + The (Horde) user that will be used to create or update the ticket, will + also be determined by investigating the message. The email address used in + the ``From:`` header of the message will be looked up by searching all + identities of all users in the authentication backend. This only works if + the authentication backend is capable of listing users. If a user cannot be + determined this way, the user provided by the ``--default--auth`` argument, + if any, is used. Finally, if none has been provided, the user specified in + Whups' configuration (``$conf[mail][username]``) will be used. If there + still hasn't been a user determined at this point, the ticket will be + updated or created by the "guest" user, using the email address of the + ``From:`` header. This only works if guest access has been granted to both + Whups, and the queue specified with the ``--queue-name`` or ``--queue-id`` + parameters. + + Finally, you might want to to enable the setting in Whups' configuration, + below the "Email Settings" tab, that allows users to reply to ticket + emails. This setting removes the warning from the generated ticket emails + to *not* reply to those emails. And you should of course make sure that you + specify the correct email address here for the generated messages. It + should the address that you use for the mail pipe, or the IMAP/POP3 account + when calling ``mail-filter.php``. + + +Obtaining Support +================= + +If you encounter problems with Whups, help is available! + +The Horde Frequently Asked Questions List (FAQ), available on the Web at + + http://www.horde.org/faq/ + +The Horde Project runs a number of mailing lists, for individual applications +and for issues relating to the project as a whole. Information, archives, and +subscription information can be found at + + http://www.horde.org/mail/ + +Lastly, Horde developers, contributors and users may also be found on IRC, +on the channel #horde on the Freenode Network (irc.freenode.net). + +Please keep in mind that Whups is free software written by volunteers. +For information on reasonable support expectations, please read + + http://www.horde.org/support.php + +Thanks for using Whups! + +The Whups team + + +.. _README: ?f=README.html +.. _`horde/docs/HACKING`: ../../horde/docs/?f=HACKING.html +.. _`horde/docs/INSTALL`: ../../horde/docs/?f=INSTALL.html +.. _`horde/docs/TRANSLATIONS`: ../../horde/docs/?f=TRANSLATIONS.html diff --git a/whups/docs/RELEASE_NOTES b/whups/docs/RELEASE_NOTES new file mode 100644 index 000000000..fe4c4a226 --- /dev/null +++ b/whups/docs/RELEASE_NOTES @@ -0,0 +1,44 @@ +notes['fm']['focus'] = 4; + +/* Mailing list release notes. */ +$this->notes['ml']['changes'] = <<notes['fm']['changes'] = <<notes['name'] = 'Whups'; +$this->notes['list'] = 'horde'; +$this->notes['fm']['project'] = 'whups'; +$this->notes['fm']['branch'] = 'Default'; diff --git a/whups/docs/TODO b/whups/docs/TODO new file mode 100644 index 000000000..8d89fbf59 --- /dev/null +++ b/whups/docs/TODO @@ -0,0 +1,55 @@ +============================= + Whups Development TODO List +============================= + +:Last update: $Date: 2007/04/22 04:51:55 $ +:Revision: $Revision: 1.16 $ +:Contact: dev@lists.horde.org + +- Ability to take/steal tickets from other users in the list UI. + +- Ability to merge a ticket with another ticket (instead of marking as + duplicate). Histories of two tickets should be merged. + +- Better permissions integration. + +- Possible integration with other Horde queues (nag/turba/hermes), including + api support between them. + +- docs and help files... + +- Additional "work flow" support. + +- Handle attachments in Whups_Mail + +- States/Priorities (or whole types?) cloning: + + | > What if we had a "clone" feature? When editing states/priorities, just + | > being able to clone the states/priorities from another type into this + | > type? + | + | I now think that this would be a good idea. It's almost the same as + | Gary's template patch, but it should work in a slightly different way + | to better fit the workflow direction. + | + | When we have state transitions, it's more important that a type + | doesn't change as tickets flow through it because that could cause + | tickets to become inconsistent. However, it's very likely that as the + | type is being used, people see some way of making it fit the model + | more accurately. In that case, probably the best way to fix it is to + | copy the existing type into a new one. You can then modify the new + | type however you see fit then 'publish' the type and start creating + | tickets in it. Published types can't be altered. + | + | With the type templates, you could only copy particular types into new + | ones, instead of any type that you need to. + | + | However, with the templates, type were created as 'just a template', + | ie. one that shouldn't have tickets created. This can be quite + | useful, but instead of using an underscore prefix to identify it, I'd + | prefer to have a 'published' field in the table to represent types + | that can have tickets in it. A template could then be a normal, + | unpublished, type. + +- For project scheduling: + http://www.joelonsoftware.com/articles/fog0000000245.html diff --git a/whups/docs/UPGRADING b/whups/docs/UPGRADING new file mode 100644 index 000000000..e662dda02 --- /dev/null +++ b/whups/docs/UPGRADING @@ -0,0 +1,27 @@ +================= + Upgrading Whups +================= + +:Last update: $Date: 2009/09/07 09:56:43 $ +:Revision: $Revision: 1.1 $ +:Contact: horde@lists.horde.org + + +These are instructions to upgrade from earlier Whups versions. Please backup +your existing data before running any of the steps described below. You can't +use the updated data with your old Whups version anymore. + + +Upgrading Whups from 1.0 to 1.0.1 +================================= + +SQL Backends +------------ + +A field to store whether a version is still active has been added to the +default SQL table layout. + +Execute the provided SQL script to update your data to the new Whups version, +e.g.:: + + mysql --user=root --password= < scripts/upgrades/1.0_to_1.0.1.sql diff --git a/whups/docs/lighttpd-whups.conf b/whups/docs/lighttpd-whups.conf new file mode 100644 index 000000000..aa2e66bdb --- /dev/null +++ b/whups/docs/lighttpd-whups.conf @@ -0,0 +1,19 @@ +## This file should be reviewed prior to inclusion in your lighttpd +## configuration. Specifically, if you have whups somewhere other than +## /horde/whups you will need to edit the following rules to match your server +## configuration. + +## This file should be included in your lighttpd.conf file with the "include" +## directive. Example: +## include "path/to/lighttpd-whups.conf" +## The exact path you use will of course depend on your specific configuration. + +url.rewrite-once += ( + "^/horde/whups/queue/([0-9]+)/?(?:\?(.*))?$" => "/horde/whups/queue/index.php?id=$1&$2", + "^/horde/whups/queue/([0-9]+)/rss/?(?:\?(.*))?$" => "/horde/whups/queue/rss.php?id=$1&$2", + "^/horde/whups/queue/(a-zA-Z0-9_]+)/?(?:\?(.*))?$" => "/horde/whups/queue/index.php?slug=$1&$2", + "^/horde/whups/queue/(a-zA-Z0-9_]+)/rss/?(?:\?(.*))?$" => "/horde/whups/queue/rss.php?id=$1&2", + "^/horde/whups/ticket/([0-9]+)/?(?:\?(.*))?$" => "/horde/whups/ticket/index.php?id=$1&$2", + "^/horde/whups/ticket/([0-9]+)/rss/?(?:\?(.*))?$" => "/horde/whups/ticket/rss.php?id=$1&$2", + "^/horde/whups/ticket/([0-9]+)/([a-z]+)(\.php)?(?:\?(.*))?$" => "/horde/whups/ticket/$2.php?id=$1&$3" +) diff --git a/whups/index.php b/whups/index.php new file mode 100644 index 000000000..6bdc0b9d4 --- /dev/null +++ b/whups/index.php @@ -0,0 +1,31 @@ + + * Copyright 2001-2009 The Horde Project (http://www.horde.org/) + * + * See the enclosed file LICENSE for license information (BSD). If you + * did not receive this file, see http://www.horde.org/licenses/bsdl.php. + */ + +define('WHUPS_BASE', dirname(__FILE__)); +$whups_configured = (is_readable(WHUPS_BASE . '/config/conf.php') && + is_readable(WHUPS_BASE . '/config/create_email.txt') && + is_readable(WHUPS_BASE . '/config/mime_drivers.php') && + is_readable(WHUPS_BASE . '/config/notify_email.txt') && + is_readable(WHUPS_BASE . '/config/prefs.php') && + is_readable(WHUPS_BASE . '/config/templates.php')); + +if (!$whups_configured) { + require WHUPS_BASE . '/../lib/Test.php'; + Horde_Test::configFilesMissing('Whups', WHUPS_BASE, + array('conf.php', 'mime_drivers.php', 'prefs.php'), + array('templates.php' => 'This file defines the templates that various parts of Whups use to format data.', + 'create_email.txt' => 'This is the template for ticket creation emails', + 'notify_email.txt' => 'This is the template for ticket notification emails', + )); +} + +require_once WHUPS_BASE . '/lib/base.php'; +require basename($prefs->getValue('whups_default_view') . '.php'); diff --git a/whups/lib/.htaccess b/whups/lib/.htaccess new file mode 100644 index 000000000..3a4288278 --- /dev/null +++ b/whups/lib/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/whups/lib/Ajax/Imple/ContactAutoCompleter.php b/whups/lib/Ajax/Imple/ContactAutoCompleter.php new file mode 100644 index 000000000..57c59ee83 --- /dev/null +++ b/whups/lib/Ajax/Imple/ContactAutoCompleter.php @@ -0,0 +1,162 @@ + + * @package Whups + */ + +class Whups_Ajax_Imple_ContactAutoCompleter extends Horde_Ajax_Imple_AutoCompleter +{ + + /** + * Attach the Imple object to a javascript event. + */ + protected function _attach($js_params) + { + $js_params['indicator'] = $this->_params['triggerId'] . '_loading_img'; + + $ret = array( + 'params' => $js_params, + 'raw_params' => array( + 'onSelect' => 'function (v) { if (!v.endsWith(";")) { v += ","; } return v + " "; }', + 'onType' => 'function (e) { return e.include("<") ? "" : e; }' + ) + ); + + $ret['ajax'] = 'ContactAutoCompleter'; + + return $ret; + } + + /** + * TODO + * + * @param array $args TODO + * + * @return string TODO + */ + public function handle($args, $post) + { + // Avoid errors if 'input' isn't set and short-circuit empty searches. + if (empty($args['input']) || + !($input = Horde_Util::getPost($args['input']))) { + return array(); + } + + return array_map('htmlspecialchars', self::expandAddresses($input)); + } + + /** + * Uses the Registry to expand names and return error information for + * any address that is either not valid or fails to expand. This function + * will not search if the address string is empty. + * + * @param string $addrString The name(s) or address(es) to expand. + * @param array $options Additional options: + *
+     * 'levenshtein' - (boolean) If true, will sort the results using the
+     *                 PHP levenshtein() scoring function.
+     * 
+ * + * @return array All matching addresses. + */ + static public function expandAddresses($addrString, $options = array()) + { + if (!preg_match('|[^\s]|', $addrString)) { + return array(); + } + + $addrString = reset(array_filter(array_map('trim', Horde_Mime_Address::explode($addrString, ',;')))); + $addr_list = self::getAddressList($addrString); + + if (empty($options['levenshtein'])) { + return $addr_list; + } + + $sort_list = array(); + foreach ($addr_list as $val) { + $sort_list[$val] = levenshtein($addrString, $val); + } + asort($sort_list, SORT_NUMERIC); + + return array_keys($sort_list); + } + + /** + * Uses the Registry to expand names and return error information for + * any address that is either not valid or fails to expand. + * + * @param string $search The term to search by. + * + * @return array All matching addresses. + */ + static public function getAddressList($search = '') + { + $sparams = self::getAddressSearchParams(); + try { + $res = $GLOBALS['registry']->call('contacts/search', array($search, $sparams['sources'], $sparams['fields'], false)); + } catch (Horde_Exception $e) { + Horde::logMessage($e, __FILE__, __LINE__, PEAR_LOG_ERR); + return array(); + } + + if (!count($res)) { + return array(); + } + + /* The first key of the result will be the search term. The matching + * entries are stored underneath this key. */ + $search = array(); + foreach (reset($res) as $val) { + if (!empty($val['email'])) { + if (strpos($val['email'], ',') !== false) { + $search[] = Horde_Mime_Address::encode($val['name'], 'personal') . ': ' . $val['email'] . ';'; + } else { + $mbox_host = explode('@', $val['email']); + if (isset($mbox_host[1])) { + $search[] = Horde_Mime_Address::writeAddress($mbox_host[0], $mbox_host[1], $val['name']); + } + } + } + } + + return $search; + } + + /** + * Determines parameters needed to do an address search + * + * @return array An array with two keys: 'sources' and 'fields'. + */ + static public function getAddressSearchParams() + { + $src = explode("\t", $GLOBALS['prefs']->getValue('search_sources')); + if ((count($src) == 1) && empty($src[0])) { + $src = array(); + } + + $fields = array(); + if (($val = $GLOBALS['prefs']->getValue('search_fields'))) { + $field_arr = explode("\n", $val); + foreach ($field_arr as $field) { + $field = trim($field); + if (!empty($field)) { + $tmp = explode("\t", $field); + if (count($tmp) > 1) { + $source = array_splice($tmp, 0, 1); + $fields[$source[0]] = $tmp; + } + } + } + } + + return array('sources' => $src, 'fields' => $fields); + } + +} diff --git a/whups/lib/Api.php b/whups/lib/Api.php new file mode 100644 index 000000000..c2b3a62cf --- /dev/null +++ b/whups/lib/Api.php @@ -0,0 +1,801 @@ + array( + 'name' => _("Queues"), + 'icon' => $registry->getImageDir() . '/whups.png', + 'browseable' => count( + Whups::permissionsFilter($whups_driver->getQueues(), + 'queue', Horde_Perms::READ)))); + } else { + $path = explode('/', $path); + Horde::logMessage(var_export($path, true), __FILE__, __LINE__); + $results = array(); + + switch ($path[0]) { + case 'queue': + $queues = Whups::permissionsFilter($whups_driver->getQueues(), + 'queue', Horde_Perms::SHOW); + if (count($path) == 1) { + foreach ($queues as $queue => $name) { + $results['whups/queue/' . $queue] = array( + 'name' => $name, + 'browseable' => true); + } + } else { + if (!Whups::hasPermission($queues[$path[1]], 'queue', + Horde_Perms::READ)) { + return PEAR::raiseError('permission denied'); + } + + $tickets = $whups_driver->getTicketsByProperties( + array('queue' => $path[1])); + foreach ($tickets as $ticket) { + $results['whups/queue/' . $path[1] . '/' . $ticket['id']] = array( + 'name' => $ticket['summary'], + 'browseable' => false); + } + } + break; + } + } + + return $results; + } + + /** + * Create a new queue. + * + * @param string $name The queue's name. + * + * @return integer The new queue id. + */ + public function addQueue($name) + { + require_once dirname(__FILE__) . '/base.php'; + if (Horde_Auth::isAdmin('whups:admin')) { + return $GLOBALS['whups_driver']->addQueue($name, ''); + } else { + return PEAR::raiseError('You must be an administrator to perform this action.'); + } + } + + /** + * Return the ids of all open tickets assigned to the current user. + * + * @return array Array of ticket ids. + */ + public function getAssignedTicketIds() + { + require_once dirname(__FILE__) . '/base.php'; + global $whups_driver; + + $info = array('owner' => 'user:' . Horde_Auth::getAuth(), 'nores' => true); + $tickets = $whups_driver->getTicketsByProperties($info); + if (is_a($tickets, 'PEAR_Error')) { + return $tickets; + } + $result = array(); + foreach ($tickets as $ticket) { + $result[] = $ticket['id']; + } + return $result; + } + + /** + * Return the ids of all open tickets that the current user created. + * + * @return array Array of ticket ids. + */ + public function getRequestedTicketIds() + { + require_once dirname(__FILE__) . '/base.php'; + global $whups_driver; + + $info = array('requester' => Horde_Auth::getAuth(), 'nores' => true); + $tickets = $whups_driver->getTicketsByProperties($info); + if (is_a($tickets, 'PEAR_Error')) { + return $tickets; + } + $result = array(); + foreach ($tickets as $ticket) { + $result[] = (int) $ticket['id']; + } + return $result; + } + + /** + * Create a new ticket. + * + * @param array $ticket_info An array of form variables representing all of the + * data collected by CreateStep1Form, CreateStep2Form, CreateStep3Form, and + * optionally CreateStep4Form. + * + * @return integer The new ticket id. + */ + public function addTicket($ticket_info) + { + require_once dirname(__FILE__) . '/base.php'; + require_once dirname(__FILE__) . '/Forms/CreateTicket.php'; + require_once dirname(__FILE__) . '/Ticket.php'; + global $whups_driver; + + if (!is_array($ticket_info)) { + return PEAR::raiseError('Invalid arguments'); + } + + $vars = new Horde_Variables($ticket_info); + + $form1 = new CreateStep1Form($vars); + $form2 = new CreateStep2Form($vars); + $form3 = new CreateStep3Form($vars); + + // FIXME: This is an almighty hack, but we can't have form + // tokens in rpc calls. + $form1->useToken(false); + $form2->useToken(false); + $form3->useToken(false); + + // Complain if we've been given bad parameters. + if (!$form1->validate($vars, true)) { + $f1 = var_export($form1->_errors, true); + return PEAR::raiseError("Invalid arguments ($f1)"); + } + if (!$form2->validate($vars, true)) { + $f2 = var_export($form2->_errors, true); + return PEAR::raiseError("Invalid arguments ($f2)"); + } + if (!$form3->validate($vars, true)) { + $f3 = var_export($form3->_errors, true); + return PEAR::raiseError("Invalid arguments ($f3)"); + } + + $form1->getInfo($vars, $info); + $form2->getInfo($vars, $info); + $form3->getInfo($vars, $info); + + // More checks if we're assigning the ticket at create-time. + if (Horde_Auth::getAuth() && $whups_driver->isCategory('assigned', $vars->get('state'))) { + $form4 = new CreateStep4Form($vars); + } + if (Auth::getAuth() && $whups_driver->isCategory('assigned', $vars->get('state'))) { + $form4 = new CreateStep4Form($vars); + $form4->useToken(false); + if (!$form4->validate($vars, true)) { + return PEAR::raiseError('Invalid arguments (' . var_export($form4->_errors, true) . ')'); + } + + $form4->getInfo($vars, $info); + } + + $ticket = Whups_Ticket::newTicket($info, Horde_Auth::getAuth()); + if (is_a($ticket, 'PEAR_Error')) { + return $ticket; + } else { + return $ticket->getId(); + } + } + + /** + * Update a ticket's properties. + * + * @param integer $ticket_id The id of the id to changes. + * @param array $ticket_info The attributes to set, from the EditTicketForm. + * + * @return boolean True + */ + public function updateTicket($ticket_id, $ticket_info) + { + require_once dirname(__FILE__) . '/base.php'; + require_once dirname(__FILE__) . '/Ticket.php'; + require_once dirname(__FILE__) . '/Forms/EditTicket.php'; + global $whups_driver; + + // Cast as an int for safety. + $ticket = Whups_Ticket::makeTicket((int)$ticket_id); + if (is_a($ticket, 'PEAR_Error')) { + // The ticket is either invalid or we don't have permission to + // read it. + return $ticket; + } + + // Check that we have permission to update the ticket + if (!Horde_Auth::getAuth() || + !Whups::hasPermission($ticket->get('queue'), 'queue', 'update')) { + return PEAR::raiseError(_('You do not have permission to update this ticket.')); + } + + // Populate $vars with existing ticket details. + $vars = new Horde_Variables(); + $ticket->setDetails($vars); + + // Copy new ticket details in. + foreach ($ticket_info as $detail => $newval) { + $vars->set($detail, $newval); + } + + // Create and populate the EditTicketForm for validation. API calls can't + // use form tokens and aren't the result of the EditTicketForm being + // submitted. + $editform = new EditTicketForm($vars, null, $ticket); + $editform->useToken(false); + $editform->setSubmitted(true); + + // Attempt to validate and update the ticket. + if (!$editform->validate($vars)) { + $form_errors = var_export($editform->_errors, true); + return PEAR::raiseError(sprintf(_("Invalid ticket data supplied: %s"), $form_errors)); + } + + $editform->getInfo($vars, $info); + + $ticket->change('summary', $info['summary']); + $ticket->change('state', $info['state']); + $ticket->change('priority', $info['priority']); + if (!empty($info['newcomment'])) { + $ticket->change('comment', $info['newcomment']); + } + + // Update attributes. + $whups_driver->setAttributes($info); + + // Add attachment if one was uploaded. + if (!empty($info['newattachment']['name'])) { + $ticket->change('attachment', + array('name' => $info['newattachment']['name'], + 'tmp_name' => $info['newattachment']['tmp_name'])); + } + + // If there was a new comment and permissions were specified on + // it, set them. + if (!empty($info['group'])) { + $ticket->change('comment-perms', $info['group']); + } + + $result = $ticket->commit(); + if (is_a($result, 'PEAR_Error')) { + return $result; + } + + // Ticket updated successfully + return true; + } + + /** + * Add a comment to a ticket. + * + * @param integer $ticket_id The id of the ticket to comment on. + * @param string $comment The comment text to add. + * @param string $group (optional) Restrict this comment to a specific group. + * + * @return boolean True + */ + public function addComment($ticket_id, $comment, $group = null) + { + require_once dirname(__FILE__) . '/base.php'; + require_once WHUPS_BASE . '/lib/Ticket.php'; + + $ticket_id = (int)$ticket_id; + if (empty($ticket_id)) { + return PEAR::raiseError('Invalid ticket id'); + } + + $ticket = Whups_Ticket::makeTicket($ticket_id); + if (is_a($ticket, 'PEAR_Error')) { + return $ticket; + } + + if (empty($comment)) { + return PEAR::raiseError('Empty comments are not allowed'); + } + + // Add comment. + $ticket->change('comment', $comment); + + // Add comment permissions, if specified. + // @TODO: validate the user is allowed to specify this group + if (!empty($group)) { + $ticket->change('comment-perms', $group); + } + + $result = $ticket->commit(); + if (is_a($result, 'PEAR_Error')) { + return $result; + } + + return true; + } + + /** + * Adds an attachment to a ticket. + * + * @param integer $ticket_id The ticket number. + * @param string $name The name of the attachment. + * @param string $data The attachment data. + * + * @return mixed True on success or PEAR_Error on failure. + */ + public function addAttachment($ticket_id, $name, $data) + { + require_once dirname(__FILE__) . '/base.php'; + require_once WHUPS_BASE . '/lib/Ticket.php'; + + $ticket_id = (int)$ticket_id; + if (empty($ticket_id)) { + return PEAR::raiseError(_("Invalid Ticket Id")); + } + + $ticket = Whups_Ticket::makeTicket($ticket_id); + if (is_a($ticket, 'PEAR_Error')) { + return $ticket; + } + + if (!strlen($name) || !strlen($data)) { + return PEAR::raiseError(_("Empty attachment")); + } + + $tmp_name = Horde_Util::getTempFile('whups', true, $GLOBALS['conf']['tmpdir']); + $fp = fopen($tmp_name, 'wb'); + fwrite($fp, $data); + fclose($fp); + + $ticket->change('attachment', + array('name' => $name, 'tmp_name' => $tmp_name)); + $result = $ticket->commit(); + if (is_a($result, 'PEAR_Error')) { + return $result; + } + + return true; + } + + /** + * Set attributes for a ticket + * + * @TODO fold this into the updateTicket method + */ + public function setTicketAttributes($info) + { + require_once dirname(__FILE__) . '/base.php'; + global $whups_driver; + + if (!isset($info['ticket_id']) || !isset($info['attributes'])) { + return PEAR::raiseError(_("Invalid arguments: Must supply a ticket number and new attributes.")); + } + + $ticket = $whups_driver->getTicketDetails($info['ticket_id']); + if (is_a($ticket, "PEAR_Error")) { + // Either the ticket doesn't exist or the caller didn't have + // permission. + return $ticket; + } + + // Convert the RPC parameters into what we'd expect if we were + // posting the EditAttributes form. + $ainfo = array(); + foreach ($info['attributes'] as $attrib) { + if (!isset($attrib['id']) || !isset($attrib['value'])) { + return PEAR::raiseError(_("Invalid argument: Missing attribute name or value.")); + } + + $ainfo['a' . $attrib['id']] = $attrib['value']; + } + + $ainfo['id'] = $info['ticket_id']; + + return $whups_driver->setAttributes($ainfo); + } + + /** + * Get the types that Whups items can be listed as. + * + * @return array Array of list types. + */ + public function getListTypes() + { + return array('taskHash' => true); + } + + /** + * Get a list of items from whups as type $type. + * + * @param string $type The list type to use (@see getListTypes). Currently supported: 'taskHash' + * + * @return array An array of tickets. + */ + public function listAs($type) + { + switch ($type) { + case 'taskHash': + require_once dirname(__FILE__) . '/base.php'; + global $whups_driver; + $info = array('owner' => 'user:' . Horde_Auth::getAuth(), + 'nores' => true); + $tickets = $whups_driver->getTicketsByProperties($info); + if (is_a($tickets, 'PEAR_Error')) { + return $tickets; + } + $result = array(); + foreach ($tickets as $ticket) { + $view_link = Whups::urlFor('ticket', $ticket['id'], true); + $delete_link = Whups::urlFor('ticket_action', array('delete', $ticket['id']), true); + $complete_link = Whups::urlFor('ticket_action', array('update', $ticket['id']), true); + + $result['whups/' . $ticket['id']] = array( + 'task_id' => $ticket['id'], + 'priority' => $ticket['priority_name'], + 'tasklist_id' => '**EXTERNAL**', + 'completed' => ($ticket['state_category'] == 'resolved'), + 'name' => '[#' . $ticket['id'] . '] ' . $ticket['summary'], + 'desc' => null, + 'due' => null, + 'category' => null, + 'view_link' => $view_link, + 'delete_link' => $delete_link, + 'edit_link' => $view_link, + 'complete_link' => $complete_link + ); + } + break; + + default: + $result = array(); + break; + } + + return $result; + } + + /** + * Return a list of queues that the current user has read permissions for + * + * @return array Array of queue details + */ + public function listQueues() + { + require_once dirname(__FILE__) . '/base.php'; + return Whups::permissionsFilter($GLOBALS['whups_driver']->getQueuesInternal(), 'queue', Horde_Perms::SHOW); + } + + /** + * Get details for a queue + * + * @param array | integer $queue Either an array of queue ids or a single queue id. + * + * @return array An array of queue information (or an array of arrays, if multiple queues were passed). + */ + public function getQueueDetails($queue) + { + require_once dirname(__FILE__) . '/base.php'; + if (is_array($queue)) { + $queues = Whups::permissionsFilter($queue, 'queue_id'); + $details = array(); + foreach ($queues as $id) { + $details[$id] = $GLOBALS['whups_driver']->getQueueInternal($id); + } + return $details; + } + + $queues = Whups::permissionsFilter(array($queue), 'queue_id'); + if ($queues) { + return $GLOBALS['whups_driver']->getQueueInternal($queue); + } + + return array(); + } + + /** + * List the versions associated with a queue + * + * @param integer $queue The queue id to get versions for. + * + * @return array Array of queue versions + */ + public function listVersions($queue) + { + require_once dirname(__FILE__) . '/base.php'; + + $queues = Whups::permissionsFilter(array($queue), 'queue_id'); + if (!$queues) { + return array(); + } + + $versions = array(); + $version_list = $GLOBALS['whups_driver']->getVersionInfoInternal($queue); + foreach ($version_list as $version) { + $versions[] = array('id' => $version['version_id'], + 'name' => $version['version_name'], + 'description' => $version['version_description'], + 'active' => !empty($version['version_active']), + 'readonly' => false); + } + + usort($versions, array($this, '_sortVersions')); + + return $versions; + } + + private function _sortVersions($a, $b) + { + $a_number = (string)(int)$a['name'][0] === $a['name'][0]; + $b_number = (string)(int)$b['name'][0] === $b['name'][0]; + + if ($a_number && $b_number) { + return version_compare($b['name'], $a['name']); + } + if (!$a_number && !$b_number) { + return strcoll($b['name'], $a['name']); + } + return $a_number ? 1 : -1; + } + + /** + * Add a version to a queue + * + * @param integer $queue The queue id to add the version to. + * @param string $name The name of the new version. + * @param string $description The descriptive text for the new version. + * @param boolean $active Whether the version is still active. + */ + public function addVersion($queue, $name, $description, $active = true) + { + require_once dirname(__FILE__) . '/base.php'; + return $GLOBALS['whups_driver']->addVersion($queue, $name, $description, $active); + } + + /** + * Return the details for a queue version + * + * @param integer $version_id The version to fetch + * + * @return array Array of version details + */ + public function getVersionDetails($version_id) + { + require_once dirname(__FILE__) . '/base.php'; + return $GLOBALS['whups_driver']->getVersionInternal($version_id); + } + + /** + * Get the all tickets for a queue, optionally with a specific state. + * + * @param integer $queue_id The queue to get tickets for + * @param string $state The state filter, if any. + * + * @return array Array of tickets + */ + public function getTicketDetails($queue_id, $state = null) + { + require_once dirname(__FILE__) . '/base.php'; + global $whups_driver; + + $info['queue_id'] = $queue_id; + if (!empty($state)) { + $info['category'] = $state; + } + $tickets = $whups_driver->getTicketsByProperties($info); + + for ($i = 0; $i < count($tickets); $i++) { + $view_link = Whups::urlFor('ticket', $tickets[$i]['id'], true); + $delete_link = Whups::urlFor('ticket_action', array('delete', $tickets[$i]['id']), true); + $complete_link = Whups::urlFor('ticket_action', array('update', $tickets[$i]['id']), true); + + $tickets[$i] = array( + 'ticket_id' => $tickets[$i]['id'], + 'completed' => ($tickets[$i]['state_category'] == 'resolved'), + 'assigned' => ($tickets[$i]['state_category'] == 'assigned'), + 'name' => $tickets[$i]['queue_name'] . ' #' . + $tickets[$i]['id'] . ' - ' . $tickets[$i]['summary'], + 'state' => $tickets[$i]['state_name'], + 'type' => $tickets[$i]['type_name'], + 'priority' => $tickets[$i]['priority_name'], + 'desc' => null, + 'due' => null, + 'category' => null, + 'view_link' => $view_link, + 'delete_link' => $delete_link, + 'edit_link' => $view_link, + 'complete_link' => $complete_link + ); + } + + return $tickets; + } + + /** + * Permissions available from Whups + * + * @return array Permissions tree + */ + public function perms() + { + } + + /** + * List cost objects + * + * @param array $criteria The list criteria + * + * @return array Tickets (as cost objects) matching $criteria + */ + public function listCostObjects($criteria) + { + require_once dirname(__FILE__) . '/base.php'; + global $whups_driver; + + $info = array(); + if (!empty($criteria['user'])) { + $info['owner'] = 'user:' . Horde_Auth::getAuth(); + } + if (!empty($criteria['active'])) { + $info['nores'] = true; + } + if (!empty($criteria['id'])) { + $info['id'] = $criteria['id']; + } + + $tickets = $whups_driver->getTicketsByProperties($info); + if (is_a($tickets, 'PEAR_Error')) { + return $tickets; + } + $result = array(); + foreach ($tickets as $ticket) { + $result[$ticket['id']] = array('id' => $ticket['id'], + 'active' => ($ticket['state_category'] != 'resolved'), + 'name' => sprintf(_("Ticket %s - %s"), + $ticket['id'], + $ticket['summary'])); + + /* If the user has an estimate attribute, use that for cost object + * hour estimates. */ + $attributes = $whups_driver->getTicketAttributesWithNames($ticket['id']); + if (!is_a($attributes, 'PEAR_Error')) { + foreach ($attributes as $k => $v) { + if (strtolower($k) == _("estimated time")) { + if (!empty($v)) { + $result[$ticket['id']]['estimate'] = (double) $v; + } + } + } + } + } + ksort($result); + if (count($result) == 0) { + return array(); + } else { + return array(array('category' => _("Tickets"), + 'objects' => array_values($result))); + } + } + + /** + * List the ways that tickets can be treated as time objects + * + * @return array Array of time object types + */ + public function listTimeObjectCategories() + { + return array('created' => _("My tickets by creation date"), + 'assigned' => _("My tickets by assignment date"), + 'due' => _("My tickets by due date"), + 'resolved' => _("My tickets by resolution date")); + } + + /** + * Lists tickets with due dates as time objects. + * + * @param array $categories The time categories (from listTimeObjectCategories) to list. + * @param mixed $start The start date of the period. + * @param mixed $end The end date of the period. + */ + public function listTimeObjects($categories, $start, $end) + { + require_once dirname(__FILE__) . '/base.php'; + require_once WHUPS_BASE . '/lib/Ticket.php'; + global $whups_driver; + + $start = new Horde_Date($start); + $start_ts = $start->timestamp(); + $end = new Horde_Date($end); + $end_ts = $end->timestamp(); + + $criteria['owner'] = Whups::getOwnerCriteria(Horde_Auth::getAuth()); + + /* @TODO Use $categories */ + $category = 'due'; + switch ($category) { + case 'assigned': + $label = _("Assigned"); + $criteria['ass'] = true; + break; + + case 'created': + $label = _("Created"); + break; + + case 'due': + $label = _("Due"); + $criteria['nores'] = true; + break; + + case 'resolved': + $label = _("Resolved"); + $criteria['res'] = true; + break; + } + + $tickets = $whups_driver->getTicketsByProperties($criteria); + if (is_a($tickets, 'PEAR_Error')) { + return array(); + } + + $objects = array(); + foreach ($tickets as $ticket) { + switch ($category) { + case 'assigned': + $t_start = $ticket['date_assigned']; + break; + + case 'created': + $t_start = $ticket['timestamp']; + break; + + case 'due': + if (empty($ticket['due'])) { + continue 2; + } + $t_start = $ticket['due']; + break; + + case 'resolved': + $t_start = $ticket['date_resolved']; + break; + } + + if ($t_start + 1 < $start_ts || $t_start > $end_ts) { + continue; + } + $t = new Whups_Ticket($ticket['id'], $ticket); + $objects[$ticket['id']] = array( + 'title' => sprintf('%s: [#%s] %s', $label, $ticket['id'], $ticket['summary']), + 'description' => $t->toString(), + 'id' => $ticket['id'], + 'start' => date('Y-m-d\TH:i:s', $t_start), + 'end' => date('Y-m-d\TH:i:s', $t_start + 1), + 'params' => array('id' => $ticket['id']), + 'link' => Whups::urlFor('ticket', $ticket['id'], true)); + } + + return $objects; + } + +} \ No newline at end of file diff --git a/whups/lib/Application.php b/whups/lib/Application.php new file mode 100644 index 000000000..b46bea278 --- /dev/null +++ b/whups/lib/Application.php @@ -0,0 +1,72 @@ +getQueues(); + foreach ($queues as $id => $name) { + $perms['tree']['whups']['queues'][$id] = false; + $perms['title']['whups:queues:' . $id] = $name; + + $perms['tree']['whups']['queues'][$id]['update'] = false; + $perms['title']['whups:queues:' . $id . ':update'] = _("Update"); + $perms['type']['whups:queues:' . $id . ':update'] = 'boolean'; + $perms['params']['whups:queues:' . $id . ':update'] = array(); + + $perms['tree']['whups']['queues'][$id]['assign'] = false; + $perms['title']['whups:queues:' . $id . ':assign'] = _("Assign"); + $perms['type']['whups:queues:' . $id . ':assign'] = 'boolean'; + $perms['params']['whups:queues:' . $id . ':assign'] = array(); + + $perms['tree']['whups']['queues'][$id]['requester'] = false; + $perms['title']['whups:queues:' . $id . ':requester'] = _("Set Requester"); + $perms['type']['whups:queues:' . $id . ':requester'] = 'boolean'; + $perms['params']['whups:queues:' . $id . ':requester'] = array(); + } + + $perms['tree']['whups']['replies'] = array(); + $perms['title']['whups:replies'] = _("Form Replies"); + + /* Loop through type and replies and add their titles. */ + foreach ($whups_driver->getAllTypes() as $type_id => $type_name) { + foreach ($whups_driver->getReplies($type_id) as $reply_id => $reply) { + $perms['tree']['whups']['replies'][$reply_id] = false; + $perms['title']['whups:replies:' . $reply_id] = $type_name . ': ' . $reply['reply_name']; + } + } + + return $perms; + } + +} diff --git a/whups/lib/Block/myqueries.php b/whups/lib/Block/myqueries.php new file mode 100644 index 000000000..94c00efcb --- /dev/null +++ b/whups/lib/Block/myqueries.php @@ -0,0 +1,53 @@ +listQueries(Horde_Auth::getAuth(), true); + if (is_a($queries, 'PEAR_Error')) { + return $queries; + } + $myqueries = Whups_View::factory('SavedQueries', + array('results' => $queries)); + + $html = Horde_Util::bufferOutput(array($myqueries, 'html'), false); + if ($html) { + return $html; + } + return '

' . _("No queries have been saved.") . '

'; + } + +} diff --git a/whups/lib/Block/myrequests.php b/whups/lib/Block/myrequests.php new file mode 100644 index 000000000..919078609 --- /dev/null +++ b/whups/lib/Block/myrequests.php @@ -0,0 +1,72 @@ +getQueues(), 'queue', Horde_Perms::READ)); + $info = array('requester' => Horde_Auth::getAuth(), + 'notowner' => 'user:' . Horde_Auth::getAuth(), + 'nores' => true, + 'queue' => $queue_ids); + $requests = $whups_driver->getTicketsByProperties($info); + if (is_a($requests, 'PEAR_Error')) { + return $requests; + } + + if (!$requests) { + return '

' . _("You have no open requests.") . '

'; + } + + $html = ''; + $sortby = $prefs->getValue('sortby'); + $sortdirclass = ' class="' . ($prefs->getValue('sortdir') ? 'sortup' : 'sortdown') . '"'; + foreach (Whups::getSearchResultColumns('block') as $name => $column) { + $html .= '' . $name . ''; + } + $html .= ''; + + Whups::sortTickets($requests); + foreach ($requests as $ticket) { + $link = Horde::link(Whups::urlFor('ticket', $ticket['id'], true)); + $html .= '' . $link . htmlspecialchars($ticket['id']) . '' . + '' . $link . htmlspecialchars($ticket['summary']) . '' . + '' . htmlspecialchars($ticket['priority_name']) . '' . + '' . htmlspecialchars($ticket['state_name']) . ''; + } + + Horde::addScriptFile('tables.js', 'horde', true); + return '' . $html . '
'; + } + +} diff --git a/whups/lib/Block/mytickets.php b/whups/lib/Block/mytickets.php new file mode 100644 index 000000000..7cf29fb7e --- /dev/null +++ b/whups/lib/Block/mytickets.php @@ -0,0 +1,71 @@ +getQueues(), 'queue', Horde_Perms::READ)); + $info = array('owner' => Whups::getOwnerCriteria(Horde_Auth::getAuth()), + 'nores' => true, + 'queue' => $queue_ids); + $assigned = $whups_driver->getTicketsByProperties($info); + if (is_a($assigned, 'PEAR_Error')) { + return $assigned; + } + + if (!$assigned) { + return '

' . _("No tickets are assigned to you.") . '

'; + } + + $html = ''; + $sortby = $prefs->getValue('sortby'); + $sortdirclass = ' class="' . ($prefs->getValue('sortdir') ? 'sortup' : 'sortdown') . '"'; + foreach (Whups::getSearchResultColumns('block') as $name => $column) { + $html .= '' . $name . ''; + } + $html .= ''; + + Whups::sortTickets($assigned); + foreach ($assigned as $ticket) { + $link = Horde::link(Whups::urlFor('ticket', $ticket['id'], true)); + $html .= '' . $link . htmlspecialchars($ticket['id']) . '' . + '' . $link . htmlspecialchars($ticket['summary']) . '' . + '' . htmlspecialchars($ticket['priority_name']) . '' . + '' . htmlspecialchars($ticket['state_name']) . ''; + } + + Horde::addScriptFile('tables.js', 'horde', true); + return '' . $html . '
'; + } + +} diff --git a/whups/lib/Block/query.php b/whups/lib/Block/query.php new file mode 100644 index 000000000..135620dd7 --- /dev/null +++ b/whups/lib/Block/query.php @@ -0,0 +1,113 @@ +listQueries(Horde_Auth::getAuth()); + if (count($qParams)) { + $qType = 'enum'; + } else { + $qDefault = _("You have no saved queries."); + $qType = 'error'; + } + + return array('query' => array('type' => $qType, + 'name' => _("Query to run"), + 'default' => $qDefault, + 'values' => $qParams)); + } + + /** + * The title to go in this block. + * + * @return string The title text. + */ + function _title() + { + if (($query = $this->_getQuery()) && $query->name) { + return Horde::link(Whups::urlFor('query', empty($query->slug) ? array('id' => $query->id) : array('slug' => $query->slug))) + . htmlspecialchars($query->name) . ''; + } + return _("Query Results"); + } + + /** + * The content to go in this block. + * + * @return string The content. + */ + function _content() + { + global $whups_driver, $prefs; + + if (!($query = $this->_getQuery())) { + return '

' . _("No query to run") . '

'; + } + + $vars = Horde_Variables::getDefaultVariables(); + $tickets = $whups_driver->executeQuery($query, $vars); + if (is_a($tickets, 'PEAR_Error')) { + return $tickets; + } + + $html = ''; + $sortby = $prefs->getValue('sortby'); + $sortdirclass = ' class="' . ($prefs->getValue('sortdir') ? 'sortup' : 'sortdown') . '"'; + foreach (Whups::getSearchResultColumns('block') as $name => $column) { + $html .= '' . $name . ''; + } + $html .= ''; + + Whups::sortTickets($tickets); + foreach ($tickets as $ticket) { + $link = Horde::link(Whups::urlFor('ticket', $ticket['id'], true)); + $html .= '' . $link . htmlspecialchars($ticket['id']) . '' . + '' . $link . htmlspecialchars($ticket['summary']) . '' . + '' . htmlspecialchars($ticket['priority_name']) . '' . + '' . htmlspecialchars($ticket['state_name']) . ''; + } + + Horde::addScriptFile('tables.js', 'horde', true); + return '' . $html . '
'; + } + + function _getQuery() + { + if (empty($this->_params['query'])) { + return false; + } + + require_once dirname(__FILE__) . '/../base.php'; + require_once WHUPS_BASE . '/lib/Query.php'; + + $qManager = new Whups_QueryManager(); + $query = $qManager->getQuery($this->_params['query']); + if (is_a($query, 'PEAR_Error')) { + return false; + } + if (!$query->hasPermission(Horde_Auth::getAuth(), Horde_Perms::READ)) { + return false; + } + + return $query; + } + +} diff --git a/whups/lib/Block/queuecontents.php b/whups/lib/Block/queuecontents.php new file mode 100644 index 000000000..8216152c5 --- /dev/null +++ b/whups/lib/Block/queuecontents.php @@ -0,0 +1,115 @@ +getQueues(), 'queue', Horde_Perms::READ); + if (!$qParams) { + $qDefault = _("No queues available."); + $qType = 'error'; + } else { + $qType = 'enum'; + } + + return array('queue' => array('type' => $qType, + 'name' => _("Queue"), + 'default' => $qDefault, + 'values' => $qParams, + ), + ); + } + + /** + * The title to go in this block. + * + * @return string The title text. + */ + function _title() + { + if ($queue = $this->_getQueue()) { + return sprintf(_("Open Tickets in %s"), htmlspecialchars($queue['name'])); + } + return _("Queue Contents"); + } + + /** + * The content to go in this block. + * + * @return string The content + */ + function _content() + { + global $whups_driver, $prefs; + + if (!($queue = $this->_getQueue())) { + return '

' . _("No tickets in queue.") . '

'; + } + + $info = array('queue' => $this->_params['queue'], + 'nores' => true); + $tickets = $whups_driver->getTicketsByProperties($info); + if (is_a($tickets, 'PEAR_Error')) { + return $tickets; + } + + if (!$tickets) { + return '

' . _("No tickets in queue.") . '

'; + } + + $html = ''; + $sortby = $prefs->getValue('sortby'); + $sortdirclass = ' class="' . ($prefs->getValue('sortdir') ? 'sortup' : 'sortdown') . '"'; + foreach (Whups::getSearchResultColumns('block') as $name => $column) { + $html .= '' . $name . ''; + } + $html .= ''; + + Whups::sortTickets($tickets); + foreach ($tickets as $ticket) { + $link = Horde::link(Whups::urlFor('ticket', $ticket['id'], true)); + $html .= '' . $link . htmlspecialchars($ticket['id']) . '' . + '' . $link . htmlspecialchars($ticket['summary']) . '' . + '' . htmlspecialchars($ticket['priority_name']) . '' . + '' . htmlspecialchars($ticket['state_name']) . ''; + } + + Horde::addScriptFile('tables.js', 'horde', true); + return '' . $html . '
'; + } + + function _getQueue() + { + global $whups_driver; + require_once dirname(__FILE__) . '/../base.php'; + + if (empty($this->_params['queue'])) { + return false; + } + if (!Whups::permissionsFilter(array($this->_params['queue']), 'queue', Horde_Perms::READ)) { + return false; + } + $queue = $whups_driver->getQueue($this->_params['queue']); + if (is_a($queue, 'PEAR_Error')) { + return false; + } + return $queue; + } + +} diff --git a/whups/lib/Block/queuesummary.php b/whups/lib/Block/queuesummary.php new file mode 100644 index 000000000..d82da0896 --- /dev/null +++ b/whups/lib/Block/queuesummary.php @@ -0,0 +1,63 @@ +getQueues(), 'queue', Horde_Perms::READ); + $qsummary = $whups_driver->getQueueSummary(array_keys($queues)); + if (is_a($qsummary, 'PEAR_Error')) { + return $qsummary; + } + + if (!$qsummary) { + return '

' . _("There are no open tickets.") . '

'; + } + + $html = ''; + $sortby = 'queue_name'; + foreach (array('queue_name' => _("Queue"), 'open_tickets' => _("Open Tickets")) as $column => $name) { + $html .= '' . $name . ''; + } + $html .= ''; + + foreach ($qsummary as $queue) { + $html .= '' . Horde::link(Whups::urlFor('queue', $queue, true), $queue['description']) . htmlspecialchars($queue['name']) . '' . + '' . htmlspecialchars($queue['open_tickets']) . ''; + } + + Horde::addScriptFile('tables.js', 'horde', true); + return '' . $html . '
'; + } + +} diff --git a/whups/lib/Block/tree_menu.php b/whups/lib/Block/tree_menu.php new file mode 100644 index 000000000..89b02db1b --- /dev/null +++ b/whups/lib/Block/tree_menu.php @@ -0,0 +1,38 @@ +addNode($parent . '__new', + $parent, + _("New Ticket"), + $indent + 1, + false, + array('icon' => 'create.png', + 'icondir' => $registry->getImageDir(), + 'url' => Horde::applicationUrl('ticket/create.php'))); + + $tree->addNode($parent . '__search', + $parent, + _("Search"), + $indent + 1, + false, + array('icon' => 'search.png', + 'icondir' => $registry->getImageDir('horde'), + 'url' => Horde::applicationUrl('search.php'))); + } + +} diff --git a/whups/lib/Block/unassigned.php b/whups/lib/Block/unassigned.php new file mode 100644 index 000000000..c8f42c246 --- /dev/null +++ b/whups/lib/Block/unassigned.php @@ -0,0 +1,71 @@ +getQueues(), 'queue', Horde_Perms::READ)); + $info = array('notowner' => true, + 'nores' => true, + 'queue' => $queue_ids); + $unassigned = $whups_driver->getTicketsByProperties($info); + if (is_a($unassigned, 'PEAR_Error')) { + return $unassigned; + } + + if (!$unassigned) { + return '

' . _("No tickets are unassigned!") . '

'; + } + + $html = ''; + $sortby = $prefs->getValue('sortby'); + $sortdirclass = ' class="' . ($prefs->getValue('sortdir') ? 'sortup' : 'sortdown') . '"'; + foreach (Whups::getSearchResultColumns('block') as $name => $column) { + $html .= '' . $name . ''; + } + $html .= ''; + + Whups::sortTickets($unassigned); + foreach ($unassigned as $ticket) { + $link = Horde::link(Whups::urlFor('ticket', $ticket['id'], true)); + $html .= '' . $link . htmlspecialchars($ticket['id']) . '' . + '' . $link . htmlspecialchars($ticket['summary']) . '' . + '' . htmlspecialchars($ticket['priority_name']) . '' . + '' . htmlspecialchars($ticket['state_name']) . ''; + } + + Horde::addScriptFile('tables.js', 'horde', true); + return '' . $html . '
'; + } + +} diff --git a/whups/lib/Driver.php b/whups/lib/Driver.php new file mode 100644 index 000000000..2b30ebc1f --- /dev/null +++ b/whups/lib/Driver.php @@ -0,0 +1,558 @@ + + * Copyright 2001-2009 The Horde Project (http://www.horde.org/) + * + * See the enclosed file LICENSE for license information (BSD). If you + * did not receive this file, see http://www.horde.org/licenses/bsdl.php. + * + * @todo Needs updating to include method stubs for all required methods, to + * indicate what methods need to be implemented by other backends. + * + * @author Robert E. Coyle + * @author Jan Schneider + * @package Whups + */ +class Whups_Driver { + + /** + * @var array + */ + var $_params; + + /** + */ + function Whups_Driver($params) + { + $this->_params = $params; + } + + /** + */ + function setAttributes($info, &$ticket) + { + $ticket_id = $ticket->getId(); + + foreach ($info as $name => $value) { + if (substr($name, 0, 10) == 'attribute_' && + $ticket->get($name) != $value) { + $attribute_id = (int)substr($name, 10); + $ticket->change($name, $value); + $this->_setAttributeValue($ticket_id, $attribute_id, $value); + $this->updateLog($ticket_id, Horde_Auth::getAuth(), array('attribute' => $attribute_id . ':' . $value)); + } + } + } + + /** + * @param integer $ticket_id + */ + function getHistory($ticket_id) + { + $rows = $this->_getHistory($ticket_id); + if (is_a($rows, 'PEAR_Error')) { + return $rows; + } + + $attributes = array(); + foreach ($rows as $row) { + if ($row['log_type'] == 'attribute' && + strpos($row['log_value'], ':')) { + $attributes[(int)$row['log_value']] = $row['attribute_name']; + } + } + + $history = array(); + foreach ($rows as $row) { + $label = null; + $value = $row['log_value']; + $transaction = $row['transaction_id']; + + $history[$transaction]['timestamp'] = $row['timestamp']; + $history[$transaction]['user_id'] = $row['user_id']; + $history[$transaction]['ticket_id'] = $row['ticket_id']; + + switch ($row['log_type']) { + case 'comment': + $history[$transaction]['comment'] = $row['comment_text']; + $history[$transaction]['changes'][] = array( + 'type' => $row['log_type'], + 'value' => $row['log_value'], + 'comment' => $row['comment_text']); + continue 2; + + case 'queue': + $label = $row['queue_name']; + break; + + case 'version': + $label = $row['version_name']; + break; + + case 'type': + $label = $row['type_name']; + break; + + case 'state': + $label = $row['state_name']; + break; + + case 'priority': + $label = $row['priority_name']; + break; + + case 'attribute': + continue 2; + + case 'due': + $label = $row['log_value_num']; + break; + + default: + if (strpos($row['log_type'], 'attribute_') === 0) { + $attribute = substr($row['log_type'], 10); + if (isset($attributes[$attribute])) { + $label = $attributes[$attribute]; + } else { + $label = sprintf(_("Attribute %d"), $attribute); + } + $history[$transaction]['changes'][] = array( + 'type' => 'attribute', + 'value' => $value, + 'label' => $label); + continue 2; + } + break; + } + + $history[$transaction]['changes'][] = array( + 'type' => $row['log_type'], + 'value' => $value, + 'label' => $label); + } + + return $history; + } + + /** + */ + function getQueue($queueId) + { + return $GLOBALS['registry']->call('tickets/getQueueDetails', + array($queueId)); + } + + /** + */ + function getQueues() + { + return $GLOBALS['registry']->call('tickets/listQueues'); + } + + /** + */ + function getVersionInfo($queue) + { + return $GLOBALS['registry']->call('tickets/listVersions', + array($queue)); + } + + /** + * Returns a hash of versions suitable for select lists. + */ + function getVersions($queue, $all = false) + { + if (empty($queue)) { + return array(); + } + + $versioninfo = $this->getVersionInfo($queue); + if (is_a($versioninfo, 'PEAR_Error')) { + return $versioninfo; + } + + $versions = array(); + $old_versions = false; + foreach ($versioninfo as $vinfo) { + if (!$all && !$vinfo['active']) { + $old_versions = $vinfo['id']; + continue; + } + $versions[$vinfo['id']] = $vinfo['name']; + if (!empty($vinfo['description'])) { + $versions[$vinfo['id']] .= ': ' . $vinfo['description']; + } + if ($all && !$vinfo['active']) { + $versions[$vinfo['id']] .= ' ' . _("(inactive)"); + } + } + + if ($old_versions) { + $versions[$old_versions] = _("Older? Please update first!"); + } + + return $versions; + } + + /** + */ + function getVersion($version) + { + return $GLOBALS['registry']->call('tickets/getVersionDetails', + array($version)); + } + + /** + */ + function getCategories() + { + return array('unconfirmed' => _("Unconfirmed"), + 'new' => _("New"), + 'assigned' => _("Assigned"), + 'resolved' => _("Resolved")); + } + + /** + * Returns the attributes for a specific ticket type. + * + * This method will check if external attributes need to be fetched from + * hooks or whether to use the standard ones defined within Whups. + * + * @params integer $type The ticket type. + * + * @return array List of attributes. + */ + function getAttributesForType($type = null) + { + $attributes = $this->_getAttributesForType($type); + if (is_a($attributes, 'PEAR_Error')) { + return $attributes; + } + + foreach ($attributes as $id => $attribute) { + $attributes[$id] = array( + 'human_name' => $attribute['attribute_name'], + 'type' => $attribute['attribute_type'], + 'required' => $attribute['attribute_required'], + 'readonly' => false, + 'desc' => $attribute['attribute_description'], + 'params' => $attribute['attribute_params']); + } + return $attributes; + } + + /** + * Returns the attributes for a specific ticket. + * + * This method will check if external attributes need to be fetched from + * hooks or whether to use the standard ones defined within Whups. + * + * @params integer $ticket_id The ticket ID. + * + * @return array List of attributes. + */ + function getAllTicketAttributesWithNames($ticket_id) + { + $ta = $this->_getAllTicketAttributesWithNames($ticket_id); + if (is_a($ta, 'PEAR_Error')) { + return $ta; + } + + $attributes = array(); + foreach ($ta as $id => $attribute) { + $attributes[$attribute['attribute_id']] = array( + 'id' => $attribute['attribute_id'], + 'human_name' => $attribute['attribute_name'], + 'type' => $attribute['attribute_type'], + 'required' => $attribute['attribute_required'], + 'readonly' => false, + 'desc' => $attribute['attribute_description'], + 'params' => $attribute['attribute_params'], + 'value' => $attribute['attribute_value']); + } + return $attributes; + } + + /** + * Deletes a queue. + * + * Should be called by driver subclasses after successful removal from the + * backend. Takes only care of cleaning up queue permissions. + * + * @param integer $queueId The id of the queue being deleted. + */ + function deleteQueue($queueId) + { + $perm = &$GLOBALS['perms']->getPermission("whups:queues:$queueId"); + if (is_a($perm, 'PEAR_Error')) { + return; + } + + return $GLOBALS['perms']->removePermission($perm, true); + } + + /** + * Deletes a form reply. + * + * Should be called by driver subclasses after successful removal from the + * backend. Takes only care of cleaning up reply permissions. + * + * @param integer $reply The id of the form reply being deleted. + */ + function deleteReply($reply) + { + $perm = &$GLOBALS['perms']->getPermission("whups:replies:$reply"); + if (is_a($perm, 'PEAR_Error')) { + return; + } + + return $GLOBALS['perms']->removePermission($perm, true); + } + + /** + */ + function filterTicketsByState($tickets, $state_category = array()) + { + /* Take a list of tickets and return only those of the specified + * state_category. */ + $tickets_filtered = array(); + foreach ($tickets as $ticket) { + foreach ($state_category as $state) { + if ($ticket['state_category'] == $state) { + $tickets_filtered[] = $ticket; + } + } + } + + return $tickets_filtered; + } + + /** + * Sends email notifications to a list of recipients. + * + * We do some ugly work in here to make sure that no one gets comments + * mailed to them that they shouldn't see (because of group permissions). + * + * @param integer $ticket_id The ticket id. + * @param array $recipients The list of recipients. + * @param string $subject The email subject. + * @param string $message The email message text. + * @param string $from The email sender. + * @param boolean $reminder Whether this is reminder email (no ticket + * changes). + * @param integer $queue_id The queue id. + * @param boolean $is_new Whether a ticket has been created, if + * notifying about a ticket. + */ + function mail($ticket_id, $recipients, $subject, $message, $from, + $reminder, $queue_id = null, $is_new = false) + { + global $conf, $registry, $prefs; + + /* Set up recipients and message headers. */ + if (!is_array($recipients)) { + $recipients = array($recipients); + } + + $mail = new Horde_Mime_Mail(); + $mail->addHeader('X-Whups-Generated', 1); + $mail->addHeader('User-Agent', 'Whups ' . $registry->getVersion()); + $mail->addHeader('Precedence', 'bulk'); + $mail->addHeader('Auto-Submitted', $reminder ? 'auto-generated' : 'auto-replied'); + + $mail_always = null; + if (!$reminder && !empty($conf['mail']['always_copy'])) { + $mail_always = $conf['mail']['always_copy']; + if (strpos($mail_always, '<@>') !== false) { + $ticket = Whups_Ticket::makeTicket($ticket_id); + if (!is_a($ticket, 'PEAR_Error')) { + $mail_always = str_replace('<@>', $ticket->get('queue_name'), $mail_always); + } else { + $mail_always = null; + } + } + if ($mail_always) { + $recipients[] = $mail_always; + } + } + + if ($queue_id) { + $queue = $this->getQueue($queue_id); + } else { + $queue = null; + } + + if ($queue && !empty($queue['email'])) { + $mail->addHeader('From', $queue['email']); + } elseif (!empty($conf['mail']['from_addr'])) { + $mail->addHeader('From', $conf['mail']['from_addr']); + } else { + $mail->addHeader('From', Whups::formatUser($from), Horde_Nls::getCharset()); + } + + $subject = (is_null($ticket_id) + ? '' + : '[' . $registry->get('name') . ' #' . $ticket_id . '] ') + . $subject; + $mail->addHeader('Subject', $subject, Horde_Nls::getCharset()); + + /* Get our array of comments, sorted in the appropriate order. */ + if (!is_null($ticket_id)) { + $comments = $this->getHistory($ticket_id); + if ($conf['mail']['commenthistory'] == 'new' && count($comments)) { + $comments = array_pop($comments); + $comments = array($comments); + } elseif ($conf['mail']['commenthistory'] != 'chronological') { + $comments = array_reverse($comments); + } + } else { + $comments = array(); + } + + /* Don't notify any email address more than once. */ + $seen_email_addresses = array(); + + foreach ($recipients as $user) { + if ($user == $from && $user == Horde_Auth::getAuth() && + $prefs->getValue('email_others_only')) { + continue; + } + + /* Make sure to check permissions as a guest for the 'always_copy' + * address, and as the recipient for all others. */ + $to = $full_name = ''; + if (!empty($mail_always) && $user == $mail_always) { + $mycomments = Whups::permissionsFilter( + $comments, 'comment', Horde_Perms::READ, ''); + $to = $mail_always; + } else { + $details = Whups::getUserAttributes($user); + if (!empty($details['email'])) { + $to = Whups::formatUser($details); + $mycomments = Whups::permissionsFilter( + $comments, 'comment', Horde_Perms::READ, $details['user']); + } + $full_name = $details['name']; + } + + /* We may have no recipients due to users excluding themselves + * from self notifies. */ + if (!$to) { + continue; + } + + $formattedComment = $this->formatComments($mycomments); + if (empty($formattedComment) && $prefs->getValue('email_comments_only')) { + continue; + } + + $addr_arr = Horde_Mime_Address::parseAddressList($to); + if (!is_a($addr_arr, 'PEAR_Error') && isset($addr_arr[0])) { + $bare_address = strtolower($addr_arr[0]['mailbox'] . '@' . $addr_arr[0]['host']); + if (!empty($seen_email_addresses[$bare_address])) { + continue; + } + $seen_email_addresses[$bare_address] = true; + + if (empty($full_name) && isset($addr_arr[0]['personal'])) { + $full_name = $addr_arr[0]['personal']; + } + } + + // use email address as fallback + if (empty($full_name)) { + $full_name = $to; + } + + $body = str_replace( + array('@@comment@@', '@@full_name@@'), + array("\n\n" . $formattedComment, $full_name), + $message); + $mail->setBody($body, Horde_Nls::getCharset()); + + $mail->addHeader('Message-ID', Horde_Mime::generateMessageId()); + if ($ticket_id) { + $message_id = ''; + if ($is_new) { + $mail->addHeader('Message-ID', $message_id); + } else { + $mail->addHeader('In-Reply-To', $message_id); + $mail->addHeader('References', $message_id); + } + } + + $mail->clearRecipients(); + $mail->addHeader('To', $to, Horde_Nls::getCharset()); + + try { + $mail->send(Horde::getMailerConfig(), true); + $entry = sprintf('%s Message sent to %s from "%s"', + $_SERVER['REMOTE_ADDR'], $to, + Horde_Auth::getAuth()); + Horde::logMessage($entry, __FILE__, __LINE__, PEAR_LOG_INFO); + } catch (Horde_Mime_Exception $e) { + Horde::logMessage($e, __FILE__, __LINE__, PEAR_LOG_ERR); + } + } + } + + /** + * Converts a changeset array to a plain text comment snippet. + * + * @param array $comments A changeset list. + * + * @return string The formatted comment text, if any. + */ + function formatComments($comments) + { + $text = ''; + foreach ($comments as $comment) { + if (empty($comment['comment_text'])) { + continue; + } + $text .= "\n" + . sprintf(_("%s (%s) wrote:"), + Whups::formatUser($comment['user_id']), + Horde_Form_Type_date::getFormattedTime( + $comment['timestamp'], '%Y-%m-%d %H:%M', false)) + . "\n\n" . $comment['comment_text'] . "\n\n\n"; + } + + return $text; + } + + /** + * Attempts to return a concrete Whups_Driver instance based on $driver. + * + * @param string $driver The type of concrete Driver subclass to return. + * @param array $params A hash containing any additional configuration or + * connection parameters a subclass might need. + * + * @return Whups_Driver The newly created concrete Whups_Driver instance. + */ + function factory($driver = null, $params = null) + { + if (is_null($driver)) { + $driver = $GLOBALS['conf']['tickets']['driver']; + } + + $driver = basename($driver); + $class = 'Whups_Driver_' . $driver; + if (!class_exists($class)) { + include dirname(__FILE__) . '/Driver/' . $driver . '.php'; + } + if (class_exists($class)) { + if (is_null($params)) { + $params = Horde::getDriverConfig('tickets', $driver); + } + return new $class($params); + } else { + return PEAR::raiseError(sprintf(_("No such backend \"%s\" found"), $driver)); + } + } + +} diff --git a/whups/lib/Driver/sql.php b/whups/lib/Driver/sql.php new file mode 100644 index 000000000..37a670616 --- /dev/null +++ b/whups/lib/Driver/sql.php @@ -0,0 +1,3057 @@ + + * Copyright 2001-2009 The Horde Project (http://www.horde.org/) + * + * See the enclosed file LICENSE for license information (BSD). If you + * did not receive this file, see http://www.horde.org/licenses/bsdl.php. + * + * @author Robert E. Coyle + * @author Chuck Hagenbuch + * @package Whups + */ +class Whups_Driver_sql extends Whups_Driver { + + /** + * The database connection object. + * + * @var DB + */ + var $_db; + + /** + * Handle for the current database connection, used for writing. Defaults + * to the same handle as $_db if a separate write database is not required. + * + * @var DB + */ + var $_write_db; + + /** + * A mapping of attributes from generic Whups names to DB backend fields. + * + * @var array + */ + var $_map = array('id' => 'ticket_id', + 'summary' => 'ticket_summary', + 'requester' => 'user_id_requester', + 'queue' => 'queue_id', + 'version' => 'version_id', + 'type' => 'type_id', + 'state' => 'state_id', + 'priority' => 'priority_id', + 'timestamp' => 'ticket_timestamp', + 'due' => 'ticket_due', + 'date_updated' => 'date_updated', + 'date_assigned' => 'date_assigned', + 'date_resolved' => 'date_resolved', + ); + + /** + * Adds a new queue to the backend. + * + * @params string $name The queue name. + * @params string $description The queue description. + * @params string $slug The queue slug. + * @params string $email The queue email address. + * + * @return mixed The new queue_id || PEAR_Error + */ + function addQueue($name, $description, $slug = '', $email = '') + { + // Get a new unique id. + $new_id = $this->_write_db->nextId('whups_queues'); + if (is_a($new_id, 'PEAR_Error')) { + Horde::logMessage($new_id, __FILE__, __LINE__, PEAR_LOG_ERR); + return $new_id; + } + + // Check for slug uniqueness + if (!empty($slug)) { + $query = 'SELECT count(queue_slug) FROM whups_queues ' + . 'WHERE queue_slug = ?'; + $result = $this->_db->getOne($query, $slug); + if ($result > 0) { + return PEAR::raiseError(_("That queue slug is already taken. Please select another.")); + } + } + $query = 'INSERT INTO whups_queues ' + . '(queue_id, queue_name, queue_description, queue_slug, queue_email) ' + . 'VALUES (?, ?, ?, ?, ?)'; + $values = array( + $new_id, + Horde_String::convertCharset($name, Horde_Nls::getCharset(), + $this->_params['charset']), + Horde_String::convertCharset($description, Horde_Nls::getCharset(), + $this->_params['charset']), + $slug, + $email); + Horde::logMessage( + sprintf('Whups_Driver_sql::addQueue(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $result = $this->_write_db->query($query, $values); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + return $result; + } + + return $new_id; + } + + function addType($name, $description) + { + // Get a new unique id. + $new_id = $this->_write_db->nextId('whups_types'); + if (is_a($new_id, 'PEAR_Error')) { + Horde::logMessage($new_id, __FILE__, __LINE__, PEAR_LOG_ERR); + return $new_id; + } + + $query = 'INSERT INTO whups_types' . + ' (type_id, type_name, type_description) VALUES (?, ?, ?)'; + $values = array($new_id, + Horde_String::convertCharset($name, Horde_Nls::getCharset(), + $this->_params['charset']), + Horde_String::convertCharset($description, Horde_Nls::getCharset(), + $this->_params['charset'])); + Horde::logMessage( + sprintf('Whups_Driver_sql::addType(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $result = $this->_write_db->query($query, $values); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + return $result; + } + + return $new_id; + } + + function addState($typeId, $name, $description, $category) + { + // Get a new state id. + $new_id = $this->_write_db->nextId('whups_states'); + if (is_a($new_id, 'PEAR_Error')) { + Horde::logMessage($new_id, __FILE__, __LINE__, PEAR_LOG_ERR); + return $new_id; + } + + $query = 'INSERT INTO whups_states (state_id, type_id, state_name, ' + . 'state_description, state_category) VALUES (?, ?, ?, ?, ?)'; + $values = array($new_id, + $typeId, + Horde_String::convertCharset($name, Horde_Nls::getCharset(), + $this->_params['charset']), + Horde_String::convertCharset($description, Horde_Nls::getCharset(), + $this->_params['charset']), + Horde_String::convertCharset($category, Horde_Nls::getCharset(), + $this->_params['charset'])); + Horde::logMessage( + sprintf('Whups_Driver_sql::addState(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $result = $this->_write_db->query($query, $values); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + return $result; + } + + return $new_id; + } + + function addPriority($typeId, $name, $description) + { + // Get a new priority id. + $new_id = $this->_write_db->nextId('whups_priorities'); + if (is_a($new_id, 'PEAR_Error')) { + Horde::logMessage($new_id, __FILE__, __LINE__, PEAR_LOG_ERR); + return $new_id; + } + + $query = 'INSERT INTO whups_priorities (priority_id, type_id, ' + . 'priority_name, priority_description) VALUES (?, ?, ?, ?)'; + $values = array($new_id, + $typeId, + Horde_String::convertCharset($name, Horde_Nls::getCharset(), + $this->_params['charset']), + Horde_String::convertCharset($description, Horde_Nls::getCharset(), + $this->_params['charset'])); + Horde::logMessage( + sprintf('Whups_Driver_sql::addPriority(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $result = $this->_write_db->query($query, $values); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + return $result; + } + + return $new_id; + } + + /** + * Adds a new version to the specified queue. + * + * @param integer $queueId The queueId to add the version to. + * @param string $name The name of the new version. + * @param string $description The descriptive text for the new version. + * @param boolean $active Whether the version is still active. + * + * @return mixed The new version id || PEAR_Error + */ + function addVersion($queueId, $name, $description, $active) + { + // Get a new version id. + $new_id = $this->_write_db->nextId('whups_versions'); + if (is_a($new_id, 'PEAR_Error')) { + Horde::logMessage($new_id, __FILE__, __LINE__, PEAR_LOG_ERR); + return $new_id; + } + + $query = 'INSERT INTO whups_versions (version_id, queue_id, ' + . 'version_name, version_description, version_active) VALUES (?, ?, ?, ?, ?)'; + $values = array((int)$new_id, + (int)$queueId, + Horde_String::convertCharset($name, Horde_Nls::getCharset(), + $this->_params['charset']), + Horde_String::convertCharset($description, Horde_Nls::getCharset(), + $this->_params['charset']), + (int)$active); + Horde::logMessage( + sprintf('Whups_Driver_sql::addVersion(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $result = $this->_write_db->query($query, $values); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + return $result; + } + + return $new_id; + } + + /** + * Adds a form reply to the backend. + * + * @param integer $type The ticket type id for which to add the new reply. + * @param string $name The reply name. + * @param string $text The reply text. + * + * @return integer The id of the new form reply. + */ + function addReply($type, $name, $text) + { + // Get a new reply id. + $new_id = $this->_write_db->nextId('whups_replies'); + if (is_a($new_id, 'PEAR_Error')) { + Horde::logMessage($new_id, __FILE__, __LINE__, PEAR_LOG_ERR); + return $new_id; + } + + $query = 'INSERT INTO whups_replies (type_id, reply_id, ' + . 'reply_name, reply_text) VALUES (?, ?, ?, ?)'; + $values = array($type, + $new_id, + Horde_String::convertCharset($name, Horde_Nls::getCharset(), + $this->_params['charset']), + Horde_String::convertCharset($text, Horde_Nls::getCharset(), + $this->_params['charset'])); + Horde::logMessage( + sprintf('Whups_Driver_sql::addReply(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $result = $this->_write_db->query($query, $values); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + return $result; + } + + return $new_id; + } + + function addTicket(&$info, $requester) + { + $type = $info['type']; + $state = $info['state']; + $priority = $info['priority']; + $queue = $info['queue']; + $summary = $info['summary']; + $version = isset($info['version']) ? $info['version'] : null; + $due = isset($info['due']) ? $info['due'] : null; + $comment = $info['comment']; + $attributes = isset($info['attributes']) ? $info['attributes'] : array(); + + // Get the new unique ids for this ticket and the initial comment. + $ticketId = $this->_write_db->nextId('whups_tickets'); + if (is_a($ticketId, 'PEAR_Error')) { + Horde::logMessage($ticketId, __FILE__, __LINE__, PEAR_LOG_ERR); + return $ticketId; + } + + if (!empty($info['user_email'])) { + $requester = $ticketId * -1; + } + + // Create the ticket. + $query = 'INSERT INTO whups_tickets (ticket_id, ticket_summary, ' + . 'user_id_requester, type_id, state_id, priority_id, queue_id, ' + . 'ticket_timestamp, ticket_due, version_id)' + . ' VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'; + $values = array($ticketId, + Horde_String::convertCharset($summary, Horde_Nls::getCharset(), + $this->_params['charset']), + $requester, + $type, + $state, + $priority, + $queue, + time(), + $due, + $version); + Horde::logMessage( + sprintf('Whups_Driver_sql::addTicket(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $result = $this->_write_db->query($query, $values); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + return $result; + } + + if ($requester < 0) { + $query = 'INSERT INTO whups_guests (guest_id, guest_email) ' + . 'VALUES (?, ?)'; + $values = array((string)$requester, $info['user_email']); + Horde::logMessage( + sprintf('Whups_Driver_sql::addTicket(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $result = $this->_write_db->query($query, $values); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + return $result; + } + } + + $commentId = $this->addComment( + $ticketId, $comment, $requester, + isset($info['user_email']) ? $info['user_email'] : null); + if (is_a($commentId, 'PEAR_Error')) { + Horde::logMessage($commentId, __FILE__, __LINE__, PEAR_LOG_ERR); + return $commentId; + } + + $transaction = $this->updateLog($ticketId, + $requester, + array('state' => $state, + 'priority' => $priority, + 'type' => $type, + 'summary' => $summary, + 'due' => $due, + 'comment' => $commentId, + 'queue' => $queue)); + if (is_a($transaction, 'PEAR_Error')) { + Horde::logMessage($transaction, __FILE__, __LINE__, PEAR_LOG_ERR); + return $transaction; + } + + // Store the last-transaction id in the ticket's info for later use if + // needed. + $info['last-transaction'] = $transaction; + + // Assign the ticket, if requested. + $owners = array_merge( + isset($info['owners']) ? $info['owners'] : array(), + isset($info['group_owners']) ? $info['group_owners'] : array()); + foreach ($owners as $owner) { + $this->addTicketOwner($ticketId, $owner); + $result = $this->updateLog($ticketId, $requester, + array('assign' => $owner), + $transaction); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + return $result; + } + } + + // Add any supplied attributes for this ticket. + foreach ($attributes as $attribute_id => $attribute_value) { + $result = $this->_setAttributeValue($ticketId, + $attribute_id, + $attribute_value); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + return $result; + } + $this->updateLog( + $ticketId, $requester, + array('attribute' => $attribute_id . ':' . $attribute_value, + 'attribute_' . $attribute_id => $attribute_value), + $transaction); + } + + return $ticketId; + } + + function addComment($ticket_id, $comment, $creator, $creator_email = null) + { + $id = $this->_write_db->nextId('whups_comments'); + if (is_a($id, 'PEAR_Error')) { + Horde::logMessage($id, __FILE__, __LINE__, PEAR_LOG_ERR); + return $id; + } + + if (empty($creator) || $creator < 0) { + $creator = '-' . $id . '_comment'; + } + + // Add the row. + $result = $this->_write_db->query('INSERT INTO whups_comments (comment_id, ticket_id, user_id_creator, comment_text, comment_timestamp)' . + ' VALUES (?, ?, ?, ?, ?)', + array((int)$id, + (int)$ticket_id, + $creator, + Horde_String::convertCharset($comment, Horde_Nls::getCharset(), $this->_params['charset']), + time())); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + return $result; + } + + if ($creator < 0 && !empty($creator_email)) { + $query = 'INSERT INTO whups_guests (guest_id, guest_email)' + . ' VALUES (?, ?)'; + $values = array((string)$creator, $creator_email); + Horde::logMessage( + sprintf('Whups_Driver_sql::addComment(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $result = $this->_write_db->query($query, $values); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + return $result; + } + } + + return $id; + } + + /** + * Update any details of a ticket that are stored in the main + * whups_tickets table. Does not update the ticket log (so that it can be + * used for things low-level enough to not show up there. In general, you + * should *always* update the log; Whups_Ticket::commit() will take care + * of this in most cases). + * + * @param integer $ticketId The id of the ticket to update. + * @param array $attributes The array of attributes (key => value) to + * change. + * + * @return boolean|PEAR_Error True or an error object. + */ + function updateTicket($ticketId, $attributes) + { + if (!count($attributes)) { + return true; + } + + $query = ''; + $values = array(); + foreach ($attributes as $field => $value) { + if (empty($this->_map[$field])) { + continue; + } + + $query .= $this->_map[$field] . ' = ?, '; + $values[] = Horde_String::convertCharset($value, Horde_Nls::getCharset(), $this->_params['charset']); + } + + /* Don't try to execute an empty query (if we didn't find any updates + * to make). */ + if (empty($query)) { + return; + } + + $query = 'UPDATE whups_tickets SET ' . substr($query, 0, -2) . ' WHERE ticket_id = ?'; + $values[] = (int)$ticketId; + + Horde::logMessage( + sprintf('Whups_Driver_sql::updateTicket(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + return $this->_write_db->query($query, $values); + } + + function addTicketOwner($ticketId, $owner) + { + return $this->_write_db->query('INSERT INTO whups_ticket_owners (ticket_id, ticket_owner) VALUES (?, ?)', + array($ticketId, $owner)); + } + + function deleteTicketOwner($ticketId, $owner) + { + return $this->_write_db->query('DELETE FROM whups_ticket_owners WHERE ticket_owner = ? AND ticket_id = ?', + array($owner, $ticketId)); + } + + function deleteTicket($info) + { + global $conf; + + $id = (int)$info['id']; + + $tables = array('whups_ticket_listeners', + 'whups_logs', + 'whups_comments', + 'whups_tickets', + 'whups_attributes'); + + if (!empty($conf['vfs']['type'])) { + require_once 'VFS.php'; + $vfs = &VFS::singleton($conf['vfs']['type'], Horde::getDriverConfig('vfs')); + if (is_a($vfs, 'PEAR_Error')) { + return $vfs; + } else { + if ($vfs->isFolder(WHUPS_VFS_ATTACH_PATH, $id)) { + $result = $vfs->deleteFolder(WHUPS_VFS_ATTACH_PATH, $id, true); + if (is_a($result, 'PEAR_Error')) { + return $result; + } + } + } + } + + // Attempt to clean up everything. + foreach ($tables as $table) { + $query = 'DELETE FROM ' . $table . ' WHERE ticket_id = ?'; + $values = array($id); + Horde::logMessage( + sprintf('Whups_Driver_sql::deleteTicket(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $result = $this->_write_db->query($query, $values); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + return $result; + } + } + + return true; + } + + function executeQuery($query, $vars, $get_details = true, $munge = true) + { + $this->jtables = array(); + $this->joins = array(); + + $where = $query->reduce($this, '_clauseFromQuery', $vars); + if (!$where) { + $GLOBALS['notification']->push(_("No query to run"), 'horde.message'); + return array(); + } + + if ($this->joins) { + $joins = implode(' ', $this->joins); + } else { + $joins = ''; + } + + $sql = "SELECT whups_tickets.ticket_id, 1 FROM whups_tickets $joins " + . "WHERE $where"; + + Horde::logMessage( + sprintf('Whups_Driver_sql::executeQuery(): query="%s"', $sql), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $ids = $this->_db->getAssoc($sql); + if (is_a($ids, 'PEAR_Error')) { + Horde::logMessage($ids, __FILE__, __LINE__, PEAR_LOG_ERR); + $GLOBALS['notification']->push($ids, 'horde.error'); + return array(); + } + $ids = array_keys($this->_db->getAssoc($sql)); + + if (!count($ids)) { + return array(); + } + + if ($get_details) { + $ids = $this->getTicketsByProperties(array('id' => $ids), $munge); + } + + return $ids; + } + + function _clauseFromQuery($args, $type, $criterion, $cvalue, $operator, $value) + { + switch ($type) { + case QUERY_TYPE_AND: + return $this->_concatClauses($args, 'AND'); + + case QUERY_TYPE_OR: + return $this->_concatClauses($args, 'OR'); + + case QUERY_TYPE_NOT: + return $this->_notClause($args); + + case QUERY_TYPE_CRITERION: + return $this->_criterionClause($criterion, $cvalue, $operator, $value); + } + } + + function _concatClauses($args, $conjunction) + { + $count = count($args); + + if ($count == 0) { + $result = ''; + } elseif ($count == 1) { + $result = $args[0]; + } else { + $result = '(' . $args[0] . ')'; + + for ($i = 1; $i < $count; $i++) { + if ($args[$i] != '') { + $result .= ' ' . $conjunction . ' (' . $args[$i] . ')'; + } + } + } + + return $result; + } + + function _notClause($args) + { + if (count($args) == 0) { + return ''; + } + + // TODO: put in a sanity check: count($args) should be 1 + // always. + return 'NOT (' . $args[0] . ')'; + } + + function _criterionClause($criterion, $cvalue, $operator, $value) + { + $func = ''; + $funcend = ''; + + switch ($operator) { + case OPERATOR_GREATER: $op = '>'; break; + case OPERATOR_LESS: $op = '<'; break; + case OPERATOR_EQUAL: $op = '='; break; + case OPERATOR_PATTERN: $op = 'LIKE'; break; + + case OPERATOR_CI_SUBSTRING: + $value = '%' . str_replace(array('%', '_'), array('\%', '\_'), $value) . '%'; + if ($this->_db->phptype == 'pgsql') { + $op = 'ILIKE'; + } else { + $op = 'LIKE'; + $func = 'LOWER('; + $funcend = ')'; + } + break; + + case OPERATOR_CS_SUBSTRING: + // FIXME: Does not work in Postgres. + $func = 'LOCATE(' . $this->_write_db->quote($value) . ', '; + $funcend = ')'; + $op = '>'; + $value = 0; + break; + + case OPERATOR_WORD: + // TODO: There might be a better way to avoid missing + // words at the start and end of the text field. + if ($this->_db->phptype == 'pgsql') { + $func = "' ' || "; + $funcend = " || ' '"; + } else { + $func = "CONCAT(' ', CONCAT("; + $funcend = ", ' '))"; + } + $op = 'LIKE'; + $value = '%' . str_replace(array('%', '_'), array('\%', '\_'), $value) . '%'; + break; + } + + $qvalue = $this->_write_db->quote($value); + $done = false; + $text = ''; + + switch ($criterion) { + case CRITERION_ID: + $text = "{$func}whups_tickets.ticket_id{$funcend}"; + break; + + case CRITERION_QUEUE: + $text = "{$func}whups_tickets.queue_id{$funcend}"; + break; + + case CRITERION_VERSION: + $text = "{$func}whups_tickets.version_id{$funcend}"; + break; + + case CRITERION_TYPE: + $text = "{$func}whups_tickets.type_id{$funcend}"; + break; + + case CRITERION_STATE: + $text = "{$func}whups_tickets.state_id{$funcend}"; + break; + + case CRITERION_PRIORITY: + $text = "{$func}whups_tickets.priority_id{$funcend}"; + break; + + case CRITERION_SUMMARY: + $text = "{$func}whups_tickets.ticket_summary{$funcend}"; + break; + + case CRITERION_TIMESTAMP: + $text = "{$func}whups_tickets.ticket_timestamp{$funcend}"; + break; + + case CRITERION_UPDATED: + $text = "{$func}whups_tickets.date_updated{$funcend}"; + break; + + case CRITERION_RESOLVED: + $text = "{$func}whups_tickets.date_resolved{$funcend}"; + break; + + case CRITERION_ASSIGNED: + $text = "{$func}whups_tickets.date_assigned{$funcend}"; + break; + + case CRITERION_DUE: + $text = "{$func}whups_tickets.ticket_due{$funcend}"; + break; + + case CRITERION_ATTRIBUTE: + $cvalue = (int)$cvalue; + + if (!isset($this->jtables['whups_attributes'])) { + $this->jtables['whups_attributes'] = 1; + } + $v = $this->jtables['whups_attributes']++; + + $this->joins[] = "LEFT JOIN whups_attributes wa$v ON (whups_tickets.ticket_id = wa$v.ticket_id AND wa$v.attribute_id = $cvalue)"; + $text = "{$func}wa$v.attribute_value{$funcend} $op $qvalue"; + $done = true; + break; + + case CRITERION_OWNERS: + if (!isset($this->jtables['whups_ticket_owners'])) { + $this->jtables['whups_ticket_owners'] = 1; + } + $v = $this->jtables['whups_ticket_owners']++; + + $this->joins[] = "LEFT JOIN whups_ticket_owners wto$v ON whups_tickets.ticket_id = wto$v.ticket_id"; + $qvalue = $this->_write_db->quote('user:' . $value); + $text = "{$func}wto$v.ticket_owner{$funcend} $op $qvalue"; + $done = true; + break; + + case CRITERION_REQUESTER: + if (!isset($this->jtables['whups_guests'])) { + $this->jtables['whups_guests'] = 1; + } + $v = $this->jtables['whups_guests']++; + + $this->joins[] = "LEFT JOIN whups_guests wg$v ON whups_tickets.user_id_requester = wg$v.guest_id"; + $text = "{$func}whups_tickets.user_id_requester{$funcend} $op $qvalue OR {$func}wg$v.guest_email{$funcend} $op $qvalue"; + $done = true; + break; + + case CRITERION_GROUPS: + if (!isset($this->jtables['whups_ticket_owners'])) { + $this->jtables['whups_ticket_owners'] = 1; + } + $v = $this->jtables['whups_ticket_owners']++; + + $this->joins[] = "LEFT JOIN whups_ticket_owners wto$v ON whups_tickets.ticket_id = wto$v.ticket_id"; + $qvalue = $this->_write_db->quote('group:' . $value); + $text = "{$func}wto$v.ticket_owner{$funcend} $op $qvalue"; + $done = true; + break; + + case CRITERION_ADDED_COMMENT: + if (!isset($this->jtables['whups_comments'])) { + $this->jtables['whups_comments'] = 1; + } + $v = $this->jtables['whups_comments']++; + + $this->joins[] = "LEFT JOIN whups_comments wc$v ON (whups_tickets.ticket_id = wc$v.ticket_id)"; + $text = "{$func}wc$v.user_id_creator{$funcend} $op $qvalue"; + $done = true; + break; + + case CRITERION_COMMENT: + if (!isset($this->jtables['whups_comments'])) { + $this->jtables['whups_comments'] = 1; + } + $v = $this->jtables['whups_comments']++; + + $this->joins[] = "LEFT JOIN whups_comments wc$v ON (whups_tickets.ticket_id = wc$v.ticket_id)"; + $text = "{$func}wc$v.comment_text{$funcend} $op $qvalue"; + $done = true; + break; + } + + if ($done == false) { + $text .= " $op $qvalue"; + } + + return $text; + } + + function getTicketsByProperties($info, $munge = true, $perowner = false) + { + // Search conditions. + $where = $this->_generateWhere( + 'whups_tickets', + array('ticket_id', 'type_id', 'state_id', 'priority_id', 'queue_id'), + $info, 'integer'); + + $where2 = $this->_generateWhere( + 'whups_tickets', array('user_id_requester'), $info, 'string'); + + if (empty($where)) { + $where = $where2; + } elseif (!empty($where2)) { + $where .= ' AND ' . $where2; + } + + // Add summary filter if present. + if (!empty($info['summary'])) { + $where = $this->_addWhere( + $where, 1, + 'LOWER(whups_tickets.ticket_summary) LIKE ' + . $this->_write_db->quote('%' . Horde_String::lower($info['summary']) . '%')); + } + + // Add date fields. + if (!empty($info['ticket_timestamp'])) { + $where = $this->_addDateWhere($where, $info['ticket_timestamp'], 'ticket_timestamp'); + } + if (!empty($info['date_updated'])) { + $where = $this->_addDateWhere($where, $info['date_updated'], 'date_updated'); + } + if (!empty($info['date_assigned'])) { + $where = $this->_addDateWhere($where, $info['date_assigned'], 'date_assigned'); + } + if (!empty($info['date_resolved'])) { + $where = $this->_addDateWhere($where, $info['date_resolved'], 'date_resolved'); + } + if (!empty($info['ticket_due'])) { + $where = $this->_addDateWhere($where, $info['ticket_due'], 'ticket_due'); + } + + $fields = array('ticket_id AS id', + 'ticket_summary AS summary', + 'user_id_requester', + 'state_id AS state', + 'type_id AS type', + 'priority_id AS priority', + 'queue_id AS queue', + 'date_updated', + 'date_assigned', + 'date_resolved', + 'version_id AS version'); + + $fields = $this->_prefixTableToColumns('whups_tickets', $fields) + . ', whups_tickets.ticket_timestamp AS timestamp, whups_tickets.ticket_due AS due'; + $tables = 'whups_tickets'; + $join = ''; + $groupby = 'whups_tickets.ticket_id, whups_tickets.ticket_summary, whups_tickets.user_id_requester, whups_tickets.state_id, whups_tickets.type_id, whups_tickets.priority_id, whups_tickets.queue_id, whups_tickets.ticket_timestamp, whups_tickets.ticket_due, whups_tickets.date_updated, whups_tickets.date_assigned, whups_tickets.date_resolved'; + + // State filters. + if (isset($info['category'])) { + if (is_array($info['category'])) { + $cat = ''; + foreach ($info['category'] as $category) { + if (!empty($cat)) { + $cat .= ' OR '; + } + $cat .= 'whups_states.state_category = ' + . $this->_write_db->quote($category); + } + $cat = ' AND (' . $cat . ')'; + } else { + $cat = isset($info['category']) + ? ' AND whups_states.state_category = ' + . $this->_write_db->quote($info['category']) + : ''; + } + } else { + $cat = ''; + } + + // Type filters. + if (isset($info['type_id'])) { + if (is_array($info['type_id'])) { + $t = array(); + foreach ($info['type_id'] as $type) { + $t[] = 'whups_tickets.type_id = ' + . $this->_write_db->quote($type); + } + $t = ' AND (' . implode(' OR ', $t) . ')'; + } else { + $t = isset($info['type_id']) + ? ' AND whups_tickets.type_id = ' + . $this->_write_db->quote($info['type_id']) + : ''; + } + + $this->_addWhere($where, $t, $t); + } + + $nouc = isset($info['nouc']) + ? " AND whups_states.state_category <> 'unconfirmed'" : ''; + $nores = isset($info['nores']) + ? " AND whups_states.state_category <> 'resolved'" : ''; + $nonew = isset($info['nonew']) + ? " AND whups_states.state_category <> 'new'" : ''; + $noass = isset($info['noass']) + ? " AND whups_states.state_category <> 'assigned'" : ''; + + $uc = isset($info['uc']) + ? " AND whups_states.state_category = 'unconfirmed'" : ''; + $res = isset($info['res']) + ? " AND whups_states.state_category = 'resolved'" : ''; + $new = isset($info['new']) + ? " AND whups_states.state_category = 'new'" : ''; + $ass = isset($info['ass']) + ? " AND whups_states.state_category = 'assigned'" : ''; + + // If there are any state filters, add them in. + if ($nouc || $nores || $nonew || $noass || + $uc || $res || $new || $ass || $cat) { + $where = $this->_addWhere($where, 1, "(whups_tickets.type_id = whups_states.type_id AND whups_tickets.state_id = whups_states.state_id$nouc$nores$nonew$noass$uc$res$new$ass$cat)"); + } + + // Initialize join clauses. + $join = ''; + + // Handle owner properties. + if (isset($info['owner'])) { + $join .= ' INNER JOIN whups_ticket_owners ON whups_tickets.ticket_id = whups_ticket_owners.ticket_id AND '; + if (is_array($info['owner'])) { + $clauses = array(); + foreach ($info['owner'] as $owner) { + $clauses[] = 'whups_ticket_owners.ticket_owner = ' + . $this->_write_db->quote($owner); + } + $join .= '(' . implode(' OR ', $clauses) . ')'; + } else { + $join .= 'whups_ticket_owners.ticket_owner = ' + . $this->_write_db->quote($info['owner']); + } + } + if (isset($info['notowner'])) { + if ($info['notowner'] === true) { + // Filter for tickets with no owner. + $join .= ' LEFT JOIN whups_ticket_owners ON whups_tickets.ticket_id = whups_ticket_owners.ticket_id AND whups_ticket_owners.ticket_owner IS NOT NULL'; + } else { + $join .= ' LEFT JOIN whups_ticket_owners ON whups_tickets.ticket_id = whups_ticket_owners.ticket_id AND whups_ticket_owners.ticket_owner = ' . $this->_write_db->quote($info['notowner']); + } + $where = $this->_addWhere($where, 1, + 'whups_ticket_owners.ticket_id IS NULL'); + } + + if ($munge) { + $myqueues = $GLOBALS['registry']->hasMethod('tickets/listQueues') == $GLOBALS['registry']->getApp(); + $myversions = $GLOBALS['registry']->hasMethod('tickets/listVersions') == $GLOBALS['registry']->getApp(); + $fields = "$fields, " . + 'whups_types.type_name AS type_name, ' . + 'whups_states.state_name AS state_name, ' . + 'whups_states.state_category AS state_category, ' . + 'whups_priorities.priority_name AS priority_name'; + + $join .= + ' INNER JOIN whups_types ON whups_tickets.type_id = whups_types.type_id' . + ' INNER JOIN whups_states ON whups_tickets.state_id = whups_states.state_id' . + ' INNER JOIN whups_priorities ON whups_tickets.priority_id = whups_priorities.priority_id' . + ' INNER JOIN whups_states state2 ON whups_tickets.type_id = state2.type_id'; + + $groupby .= ', whups_types.type_name, whups_states.state_name, whups_states.state_category'; + if ($myversions) { + $versions = array(); + $fields .= ', whups_versions.version_name AS version_name' + . ', whups_versions.version_description AS version_description' + . ', whups_versions.version_active AS version_active'; + $join .= ' LEFT JOIN whups_versions ON whups_tickets.version_id = whups_versions.version_id'; + $groupby .= ', whups_versions.version_name, whups_versions.version_description, whups_versions.version_active, whups_tickets.version_id'; + } + if ($myqueues) { + $queues = array(); + $fields .= ', whups_queues.queue_name AS queue_name'; + $join .= ' INNER JOIN whups_queues ON whups_tickets.queue_id = whups_queues.queue_id'; + $groupby .= ', whups_queues.queue_name'; + } + $groupby .= ', whups_priorities.priority_name'; + } + + if ($perowner) { + $join .= ' LEFT JOIN whups_ticket_owners ON whups_tickets.ticket_id = whups_ticket_owners.ticket_id'; + $fields .= ', whups_ticket_owners.ticket_owner AS owner'; + $groupby .= ', whups_ticket_owners.ticket_owner'; + } + + $query = "SELECT $fields FROM $tables$join " + . (!empty($where) ? "WHERE $where " : '') + . 'GROUP BY ' . $groupby; + Horde::logMessage( + sprintf('Whups_Driver_sql::getTicketsByProperties(): query="%s"', + $query), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + + $info = $this->_db->getAll($query, null, DB_FETCHMODE_ASSOC); + if (is_a($info, 'PEAR_Error')) { + Horde::logMessage($info, __FILE__, __LINE__, PEAR_LOG_ERR); + return $info; + } + + if (!count($info)) { + return array(); + } + + $info = Horde_String::convertCharset($info, $this->_params['charset']); + + $tickets = array(); + foreach ($info as $ticket) { + if ($munge) { + if (!$myqueues) { + if (!isset($queues[$ticket['queue']])) { + $queues[$ticket['queue']] = $GLOBALS['registry']->call( + 'tickets/getQueueDetails', + array($ticket['queue'])); + } + $ticket['queue_name'] = $queues[$ticket['queue']]['name']; + if (isset($queues[$ticket['queue']]['link'])) { + $ticket['queue_link'] = $queues[$ticket['queue']]['link']; + } + } + if (!$myversions) { + if (!isset($versions[$ticket['version']])) { + $versions[$ticket['version']] = $GLOBALS['registry']->call( + 'tickets/getVersionDetails', + array($ticket['version'])); + } + $ticket['version_name'] = $versions[$ticket['version']]['name']; + if (isset($versions[$ticket['version']]['link'])) { + $ticket['version_link'] = $versions[$ticket['version']]['link']; + } + } + } + $tickets[$ticket['id']] = $ticket; + } + + $owners = $this->getOwners(array_keys($tickets)); + if (is_a($owners, 'PEAR_Error')) { + return $owners; + } + foreach ($owners as $row) { + if (empty($tickets[$row['id']]['owners'])) { + $tickets[$row['id']]['owners'] = array(); + } + $tickets[$row['id']]['owners'][] = $row['owner']; + } + + $attributes = $this->getTicketAttributesWithNames(array_keys($tickets)); + foreach ($attributes as $row) { + $attribute_id = 'attribute_' . $row['attribute_id']; + $tickets[$row['id']][$attribute_id] = $row['attribute_value']; + $tickets[$row['id']][$attribute_id . '_name'] = $row['attribute_name']; + } + return array_values($tickets); + } + + function getTicketDetails($ticket, $checkPerms = true) + { + $result = $this->getTicketsByProperties(array('id' => $ticket)); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + return $result; + } elseif (!isset($result[0])) { + return PEAR::raiseError(sprintf(_("Ticket %s was not found."), + $ticket)); + } else { + $queues = Whups::permissionsFilter( + $this->getQueues(), 'queue', Horde_Perms::READ, Horde_Auth::getAuth(), + $result[0]['user_id_requester']); + if ($checkPerms && + !in_array($result[0]['queue'], array_flip($queues))) { + return PEAR::raiseError( + sprintf(_("You do not have permission to access this ticket (%s)."), + $ticket), + 0); + } + } + + return $result[0]; + } + + function getTicketState($ticket_id) + { + $query = 'SELECT whups_tickets.state_id, whups_states.state_category ' + . 'FROM whups_tickets INNER JOIN whups_states ' + . 'ON whups_tickets.state_id = whups_states.state_id ' + . 'WHERE ticket_id = ?'; + Horde::logMessage( + sprintf('Whups_Driver_sql::getTicketState(): query="%s"; values="%s"', + $query, $ticket_id), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $state = $this->_db->getRow($query, array($ticket_id), + DB_FETCHMODE_ASSOC); + if (is_a($state, 'PEAR_Error')) { + Horde::logMessage($state, __FILE__, __LINE__, PEAR_LOG_ERR); + } + return $state; + } + + function getGuestEmail($guest_id) + { + static $guestCache; + + if (!isset($guestCache[$guest_id])) { + $query = 'SELECT guest_email FROM whups_guests WHERE guest_id = ?'; + $values = array($guest_id); + Horde::logMessage( + sprintf('Whups_Driver_sql::getGuestEmail(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $result = $this->_db->getOne($query, $values); + if (is_a($result, 'PEAR_Error')) { + return $result; + } + $guestCache[$guest_id] = Horde_String::convertCharset( + $result, $this->_params['charset']); + } + return $guestCache[$guest_id]; + } + + function _getHistory($ticket_id) + { + $where = 'whups_logs.ticket_id = ' . (int)$ticket_id; + $join = 'LEFT JOIN whups_comments + ON whups_logs.log_type = \'comment\' + AND whups_logs.log_value_num = whups_comments.comment_id + LEFT JOIN whups_versions + ON whups_logs.log_type = \'version\' + AND whups_logs.log_value_num = whups_versions.version_id + LEFT JOIN whups_states + ON whups_logs.log_type = \'state\' + AND whups_logs.log_value_num = whups_states.state_id + LEFT JOIN whups_priorities + ON whups_logs.log_type = \'priority\' + AND whups_logs.log_value_num = whups_priorities.priority_id + LEFT JOIN whups_types + ON whups_logs.log_type = \'type\' + AND whups_logs.log_value_num = whups_types.type_id + LEFT JOIN whups_attributes_desc + ON whups_logs.log_type = \'attribute\' + AND whups_logs.log_value_num = whups_attributes_desc.attribute_id'; + + $fields = $this->_prefixTableToColumns('whups_comments', + array('comment_text')) + . ', whups_logs.log_timestamp AS timestamp, whups_logs.ticket_id' + . ', whups_logs.log_type, whups_logs.log_value' + . ', whups_logs.log_value_num, whups_logs.log_id' + . ', whups_logs.transaction_id, whups_logs.user_id' + . ', whups_priorities.priority_name, whups_states.state_name, whups_versions.version_name' + . ', whups_types.type_name, whups_attributes_desc.attribute_name'; + + $query = "SELECT $fields FROM whups_logs $join WHERE $where " + . "ORDER BY whups_logs.transaction_id"; + Horde::logMessage(sprintf('Whups_Driver_sql::_getHistory(): query="%s"', + $query), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + + $history = $this->_db->getAll($query, null, DB_FETCHMODE_ASSOC); + if (is_a($history, 'PEAR_Error')) { + Horde::logMessage($history, __FILE__, __LINE__, PEAR_LOG_ERR); + return $history; + } + + $history = Horde_String::convertCharset($history, $this->_params['charset']); + for ($i = 0, $iMax = count($history); $i < $iMax; ++$i) { + if ($history[$i]['log_type'] == 'queue') { + $queue = $this->getQueue($history[$i]['log_value_num']); + $history[$i]['queue_name'] = $queue ? $queue['name'] : null; + } + } + + return $history; + } + + /** + * Return a list of queues with open tickets, and the number of + * open tickets in each. + * + * @param array $queues Array of queue ids to summarize. + */ + function getQueueSummary($queue_ids) + { + $qstring = (int)array_shift($queue_ids); + while ($queue_ids) { + $qstring .= ', ' . (int)array_shift($queue_ids); + } + + $sql = 'SELECT q.queue_id AS id, q.queue_slug AS slug, ' + . 'q.queue_name AS name, q.queue_description AS description, ' + . 'COUNT(t.ticket_id) AS open_tickets ' + . 'FROM whups_queues q LEFT JOIN whups_tickets t ' + . 'ON q.queue_id = t.queue_id ' + . 'INNER JOIN whups_states s ' + . 'ON (t.state_id = s.state_id AND s.state_category != \'resolved\') ' + . 'WHERE q.queue_id IN (' . $qstring . ') ' + . 'GROUP BY q.queue_id, q.queue_slug, q.queue_name, ' + . 'q.queue_description ORDER BY q.queue_name'; + Horde::logMessage( + sprintf('Whups_Driver_sql::getQueueSummary(): query="%s"', $sql), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $queues = $this->_db->getAll($sql, null, DB_FETCHMODE_ASSOC); + if (is_a($queues, 'PEAR_Error')) { + Horde::logMessage($queues, __FILE__, __LINE__, PEAR_LOG_ERR); + return $queues; + } + + return Horde_String::convertCharset($queues, $this->_params['charset']); + } + + function getQueueInternal($queueId) + { + static $queues; + + if (isset($queues[$queueId])) { + return $queues[$queueId]; + } + + $query = 'SELECT queue_id, queue_name, queue_description, ' + . 'queue_versioned, queue_slug, queue_email ' + . 'FROM whups_queues WHERE queue_id = ?'; + $values = array((int)$queueId); + Horde::logMessage( + sprintf('Whups_Driver_sql::getQueueInternal(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $queue = $this->_db->getRow($query, $values, DB_FETCHMODE_ASSOC); + if (is_a($queue, 'PEAR_Error')) { + Horde::logMessage($queue, __FILE__, __LINE__, PEAR_LOG_ERR); + return $queue; + } elseif (!$queue) { + return false; + } + + $queue = Horde_String::convertCharset($queue, $this->_params['charset']); + $queues[$queueId] = array('id' => (int)$queue['queue_id'], + 'name' => $queue['queue_name'], + 'description' => $queue['queue_description'], + 'versioned' => (bool)$queue['queue_versioned'], + 'slug' => $queue['queue_slug'], + 'email' => $queue['queue_email'], + 'readonly' => false); + + return $queues[$queueId]; + } + + function getQueueBySlugInternal($slug) + { + $query = 'SELECT queue_id, queue_name, queue_description, ' + . 'queue_versioned, queue_slug FROM whups_queues WHERE ' + . 'queue_slug = ?'; + $values = array((string)$slug); + Horde::logMessage( + sprintf('Whups_Driver_sql::getQueueInternal(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $queue = $this->_db->getAll($query, $values); + if (is_a($queue, 'PEAR_Error')) { + Horde::logMessage($queue, __FILE__, __LINE__, PEAR_LOG_ERR); + return $queue; + } elseif (!count($queue)) { + return $queue; + } + + $queue = Horde_String::convertCharset($queue, $this->_params['charset']); + $queue = $queue[0]; + return array('id' => $queue[0], + 'name' => $queue[1], + 'description' => $queue[2], + 'versioned' => $queue[3], + 'slug' => $queue[4], + 'readonly' => false); + } + + function getQueuesInternal() + { + static $internals; + + if ($internals) { + return $internals; + } + + $query = 'SELECT queue_id, queue_name FROM whups_queues ' + . 'ORDER BY queue_name'; + Horde::logMessage(sprintf('Whups_Driver_sql::getQueues(): query="%s"', + $query), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $queues = $this->_db->getAssoc($query); + if (is_a($queues, 'PEAR_Error')) { + Horde::logMessage($queues, __FILE__, __LINE__, PEAR_LOG_ERR); + return array(); + } + + $internals = Horde_String::convertCharset($queues, $this->_params['charset']); + return $internals; + } + + function updateQueue($queueId, $name, $description, $types, $versioned, + $slug = '', $email = '', $default = null) + { + global $registry; + + if ($registry->hasMethod('tickets/listQueues') == $registry->getApp()) { + // Is slug unique? + $query = 'SELECT count(queue_slug) FROM whups_queues WHERE queue_slug = ? AND queue_id <> ?'; + $result = $this->_db->getOne($query, array($slug, $queueId)); + if ($result > 0) { + return PEAR::raiseError(_("That queue slug is already taken. Please select another.")); + } + + // First update the queue entry itself. + $query = 'UPDATE whups_queues SET queue_name = ?, ' + . 'queue_description = ?, queue_versioned = ?, ' + . 'queue_slug = ?, queue_email = ? WHERE queue_id = ?'; + $values = array(Horde_String::convertCharset($name, + Horde_Nls::getCharset(), + $this->_params['charset']), + Horde_String::convertCharset($description, + Horde_Nls::getCharset(), + $this->_params['charset']), + (empty($versioned) ? 0 : 1), + $slug, + $email, + $queueId); + Horde::logMessage( + sprintf('Whups_Driver_sql::updateQueue(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $result = $this->_write_db->query($query, $values); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + return $result; + } + } + + // Clear all previous type-queue associations. + $query = 'DELETE FROM whups_types_queues WHERE queue_id = ?'; + $values = array($queueId); + Horde::logMessage( + sprintf('Whups_Driver_sql::updateQueue(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $result = $this->_write_db->query($query, $values); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + return $result; + } + + // Add the new associations. + if (is_array($types)) { + foreach ($types as $typeId) { + $query = 'INSERT INTO whups_types_queues ' + . '(queue_id, type_id, type_default) VALUES (?, ?, ?)'; + $values = array($queueId, $typeId, $default == $typeId ? 1 : 0); + Horde::logMessage( + sprintf('Whups_Driver_sql::updateQueue(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $result = $this->_write_db->query($query, $values); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + return $result; + } + } + } + + return true; + } + + function getDefaultType($queue) + { + $query = 'SELECT type_id FROM whups_types_queues ' + . 'WHERE type_default = 1 AND queue_id = ?'; + Horde::logMessage( + sprintf('Whups_Driver_sql::setDefaultType(): query="%s"', $query), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $type = $this->_db->getOne($query, array($queue)); + if (is_a($type, 'PEAR_Error')) { + Horde::logMessage($type, __FILE__, __LINE__, PEAR_LOG_ERR); + return null; + } + return $type; + } + + /** + */ + function deleteQueue($queueId) + { + $tables = array('whups_queues_users', + 'whups_types_queues', + 'whups_versions', + 'whups_queues'); + foreach ($tables as $table) { + $query = 'DELETE FROM ' . $table . ' WHERE queue_id = ?'; + $values = array($queueId); + Horde::logMessage( + sprintf('Whups_Driver_sql::deleteQueue(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $result = $this->_write_db->query($query, $values); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + return $result; + } + } + + return parent::deleteQueue($queueId); + } + + /** + */ + function updateTypesQueues($tmPairs) + { + // Do this as a transaction. + $this->_write_db->autoCommit(false); + + // Delete existing associations. + $query = 'DELETE FROM whups_types_queues'; + Horde::logMessage( + sprintf('Whups_Driver_sql::updateTypesQueues(): query="%s"', $query), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $result = $this->_write_db->query($query); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + $this->_write_db->rollback(); + $this->_write_db->autoCommit(true); + return $result; + } + + // Insert new associations. + foreach ($tmPairs as $pair) { + $query = 'INSERT INTO whups_types_queues (queue_id, type_id) ' + . 'VALUES (?, ?)'; + $values = array((int)$pair[0], (int)$pair[1]); + Horde::logMessage( + sprintf('Whups_Driver_sql::updateTypesQueues(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $result = $this->_write_db->query($query, $values); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + $this->_write_db->rollback(); + $this->_write_db->autoCommit(true); + return $result; + } + } + + $result = $this->_write_db->commit(); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + $this->_write_db->rollback(); + $this->_write_db->autoCommit(true); + return $result; + } + + $this->_write_db->autoCommit(true); + } + + function getQueueUsers($queueId) + { + $query = 'SELECT user_uid AS u1, user_uid AS u2 FROM whups_queues_users' + . ' WHERE queue_id = ? ORDER BY u1'; + $values = array($queueId); + Horde::logMessage( + sprintf('Whups_Driver_sql::getQueueUsers(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $users = $this->_db->getAssoc($query, false, $values); + if (is_a($users, 'PEAR_Error')) { + Horde::logMessage($users, __FILE__, __LINE__, PEAR_LOG_ERR); + return array(); + } + + return $users; + } + + function addQueueUser($queueId, $userId) + { + if (!is_array($userId)) { + $userId = array($userId); + } + foreach ($userId as $user) { + $query = 'INSERT INTO whups_queues_users (queue_id, user_uid) ' + . 'VALUES (?, ?)'; + $values = array($queueId, $user); + Horde::logMessage( + sprintf('Whups_Driver_sql::addQueueUser(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $result = $this->_write_db->query($query, $values); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + return $result; + } + } + return true; + } + + function removeQueueUser($queueId, $userId) + { + $query = 'DELETE FROM whups_queues_users' . + ' WHERE queue_id = ? AND user_uid = ?'; + $values = array($queueId, $userId); + Horde::logMessage( + sprintf('Whups_Driver_sql::removeQueueUser(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + return $this->_write_db->query($query, $values); + } + + function getType($typeId) + { + if (empty($typeId)) { + return false; + } + $query = 'SELECT type_id, type_name, type_description ' + . 'FROM whups_types WHERE type_id = ?'; + $values = array($typeId); + Horde::logMessage( + sprintf('Whups_Driver_sql::getType(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + + $type = $this->_db->getAssoc($query, false, $values); + if (is_a($type, 'PEAR_Error')) { + Horde::logMessage($type, __FILE__, __LINE__, PEAR_LOG_ERR); + return $type; + } + + $type = Horde_String::convertCharset($type, $this->_params['charset']); + return array('id' => $typeId, + 'name' => isset($type[$typeId][0]) ? $type[$typeId][0] : '', + 'description' => isset($type[$typeId][1]) ? $type[$typeId][1] : ''); + } + + function getTypes($queueId) + { + $query = 'SELECT t.type_id, t.type_name ' + . 'FROM whups_types t, whups_types_queues tm ' + . 'WHERE tm.queue_id = ? AND tm.type_id = t.type_id ' + . 'ORDER BY t.type_name'; + $values = array($queueId); + Horde::logMessage( + sprintf('Whups_Driver_sql::getTypes(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $types = $this->_db->getAssoc($query, false, $values); + if (is_a($types, 'PEAR_Error')) { + Horde::logMessage($types, __FILE__, __LINE__, PEAR_LOG_ERR); + return array(); + } + + return Horde_String::convertCharset($types, $this->_params['charset']); + } + + function getTypeIds($queueId) + { + $query = 'SELECT type_id FROM whups_types_queues ' + . 'WHERE queue_id = ? ORDER BY type_id'; + $values = array($queueId); + Horde::logMessage( + sprintf('Whups_Driver_sql::getTypeIds(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + return $this->_db->getAll($query, $values, DB_FETCHMODE_ASSOC); + } + + function getAllTypes() + { + $query = 'SELECT type_id, type_name FROM whups_types ORDER BY type_name'; + Horde::logMessage(sprintf('Whups_Driver_sql::getAllTypes(): query="%s"', + $query), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $types = $this->_db->getAssoc($query); + if (is_a($types, 'PEAR_Error')) { + Horde::logMessage($types, __FILE__, __LINE__, PEAR_LOG_ERR); + return array(); + } + + return Horde_String::convertCharset($types, $this->_params['charset']); + } + + function getAllTypeInfo() + { + $query = 'SELECT type_id, type_name, type_description ' + . 'FROM whups_types ORDER BY type_id'; + Horde::logMessage( + sprintf('Whups_Driver_sql::getAllTypeInfo(): query="%s"', $query), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + + $info = $this->_db->getAll($query, null, DB_FETCHMODE_ASSOC); + if (is_a($info, 'PEAR_Error')) { + Horde::logMessage($info, __FILE__, __LINE__, PEAR_LOG_ERR); + return $info; + } + + return Horde_String::convertCharset($info, $this->_params['charset']); + } + + function getTypeName($type) + { + $query = 'SELECT type_name FROM whups_types WHERE type_id = ?'; + $values = array($type); + Horde::logMessage( + sprintf('Whups_Driver_sql::getTypeName(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + + $name = $this->_db->getOne($query, $values); + if (is_a($name, 'PEAR_Error')) { + Horde::logMessage($name, __FILE__, __LINE__, PEAR_LOG_ERR); + return $name; + } + + return Horde_String::convertCharset($name, $this->_params['charset']); + } + + function updateType($typeId, $name, $description) + { + $query = 'UPDATE whups_types' . + ' SET type_name = ?, type_description = ? WHERE type_id = ?'; + $values = array(Horde_String::convertCharset($name, Horde_Nls::getCharset(), + $this->_params['charset']), + Horde_String::convertCharset($description, Horde_Nls::getCharset(), + $this->_params['charset']), + $typeId); + Horde::logMessage( + sprintf('Whups_Driver_sql::updateType(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + return $this->_write_db->query($query, $values); + } + + function deleteType($typeId) + { + $values = array((int)$typeId); + + $query = 'DELETE FROM whups_states WHERE type_id = ?'; + Horde::logMessage( + sprintf('Whups_Driver_sql::deleteType(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $this->_write_db->query($query, $values); + + $query = 'DELETE FROM whups_priorities WHERE type_id = ?'; + Horde::logMessage( + sprintf('Whups_Driver_sql::deleteType(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $this->_write_db->query($query, $values); + + $query = 'DELETE FROM whups_attributes_desc WHERE type_id = ?'; + Horde::logMessage( + sprintf('Whups_Driver_sql::deleteType(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $this->_write_db->query($query, $values); + + $query = 'DELETE FROM whups_types WHERE type_id = ?'; + Horde::logMessage( + sprintf('Whups_Driver_sql::deleteType(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + return $this->_write_db->query($query, $values); + } + + function getStates($type = null, $category = '', $notcategory = '') + { + $fields = 'state_id, state_name'; + $from = 'whups_states'; + $order = 'state_category, state_name'; + if (empty($type)) { + $fields .= ', whups_types.type_id, type_name'; + $from .= ' LEFT JOIN whups_types ON whups_states.type_id = whups_types.type_id'; + $where = ''; + $order = 'type_name, ' . $order; + } else { + $where = 'type_id = ' . $type; + } + + if (!is_array($category)) { + $where = $this->_addWhere($where, $category, 'state_category = ' . $this->_write_db->quote($category)); + } else { + $clauses = array(); + foreach ($category as $cat) { + $clauses[] = 'state_category = ' . $this->_write_db->quote($cat); + } + if (count($clauses)) + $where = $this->_addWhere($where, $cat, implode(' OR ', $clauses)); + } + + if (!is_array($notcategory)) { + $where = $this->_addWhere($where, $notcategory, 'state_category <> ' . $this->_write_db->quote($notcategory)); + } else { + $clauses = array(); + foreach ($notcategory as $notcat) { + $clauses[] = 'state_category <> ' . $this->_write_db->quote($notcat); + } + if (count($clauses)) { + $where = $this->_addWhere($where, $notcat, implode(' OR ', $clauses)); + } + } + if (!empty($where)) { + $where = ' WHERE ' . $where; + } + + $query = "SELECT $fields FROM $from$where ORDER BY $order"; + Horde::logMessage(sprintf('Whups_Driver_sql::getStates(): query="%s"', + $query), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + + $states = $this->_db->getAssoc($query); + if (is_a($states, 'PEAR_Error')) { + Horde::logMessage($states, __FILE__, __LINE__, PEAR_LOG_ERR); + return $states; + } + + if (empty($type)) { + foreach ($states as $id => $state) { + $states[$id] = $state[0] . ' (' . $state[2] . ')'; + } + } + + return Horde_String::convertCharset($states, $this->_params['charset']); + } + + function getState($stateId) + { + if (empty($stateId)) { + return false; + } + $query = 'SELECT state_id, state_name, state_description, ' + . 'state_category, type_id FROM whups_states WHERE state_id = ?'; + $values = array($stateId); + Horde::logMessage( + sprintf('Whups_Driver_sql::getState(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $state = $this->_db->getAssoc($query, false, $values); + if (is_a($state, 'PEAR_Error')) { + Horde::logMessage($state, __FILE__, __LINE__, PEAR_LOG_ERR); + return $state; + } + + $state = Horde_String::convertCharset($state, $this->_params['charset']); + return array( + 'id' => $stateId, + 'name' => isset($state[$stateId][0]) ? $state[$stateId][0] : '', + 'description' => isset($state[$stateId][1]) ? $state[$stateId][1] : '', + 'category' => isset($state[$stateId][2]) ? $state[$stateId][2] : '', + 'type' => isset($state[$stateId][3]) ? $state[$stateId][3] : ''); + } + + function getAllStateInfo($type) + { + $query = 'SELECT state_id, state_name, state_description, ' + . 'state_category FROM whups_states WHERE type_id = ? ' + . 'ORDER BY state_id'; + $values = array($type); + Horde::logMessage( + sprintf('Whups_Driver_sql::getAllStateInfo(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + + $info = $this->_db->getAll($query, $values, DB_FETCHMODE_ASSOC); + if (is_a($info, 'PEAR_Error')) { + Horde::logMessage($info, __FILE__, __LINE__, PEAR_LOG_ERR); + return $info; + } + + return Horde_String::convertCharset($info, $this->_params['charset']); + } + + function updateState($stateId, $name, $description, $category) + { + $query = 'UPDATE whups_states SET state_name = ?, ' + . 'state_description = ?, state_category = ? WHERE state_id = ?'; + $values = array(Horde_String::convertCharset($name, Horde_Nls::getCharset(), + $this->_params['charset']), + Horde_String::convertCharset($description, Horde_Nls::getCharset(), + $this->_params['charset']), + Horde_String::convertCharset($category, Horde_Nls::getCharset(), + $this->_params['charset']), + $stateId); + Horde::logMessage( + sprintf('Whups_Driver_sql::updateState(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + return $this->_write_db->query($query, $values); + } + + function getDefaultState($type) + { + $query = 'SELECT state_id FROM whups_states ' + . 'WHERE state_default = 1 AND type_id = ?'; + $values = array($type); + Horde::logMessage( + sprintf('Whups_Driver_sql::getDefaultState(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + return $this->_db->getOne($query, $values); + } + + function setDefaultState($type, $state) + { + $query = 'UPDATE whups_states SET state_default = 0 WHERE type_id = ?'; + $values = array($type); + Horde::logMessage( + sprintf('Whups_Driver_sql::setDefaultState(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $result = $this->_write_db->query($query, $values); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + return $result; + } + $query = 'UPDATE whups_states SET state_default = 1 WHERE state_id = ?'; + $values = array($state); + Horde::logMessage( + sprintf('Whups_Driver_sql::setDefaultState(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + return $this->_write_db->query($query, $values); + } + + function deleteState($state_id) + { + $query = 'DELETE FROM whups_states WHERE state_id = ?'; + $values = array((int)$state_id); + Horde::logMessage( + sprintf('Whups_Driver_sql::deleteState(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + return $this->_write_db->query($query, $values); + } + + /** + * Retrieve query details. + * + * @param integer $queryId + * + * @return array + */ + function getQuery($queryId) + { + if (empty($queryId)) { + return false; + } + $query = 'SELECT query_parameters, query_object FROM whups_queries ' + . 'WHERE query_id = ?'; + $values = array((int)$queryId); + Horde::logMessage( + sprintf('Whups_Driver_sql::getQuery(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $query = $this->_db->getRow($query, $values, DB_FETCHMODE_ASSOC); + if (is_a($query, 'PEAR_Error')) { + Horde::logMessage($query, __FILE__, __LINE__, PEAR_LOG_ERR); + return $query; + } + + return Horde_String::convertCharset($query, $this->_params['charset']); + } + + /** + * Save query details, inserting a new query row if necessary. + * + * @param Whups_Query $query + */ + function saveQuery($query) + { + $exists = $this->_db->getOne('SELECT 1 FROM whups_queries ' + . 'WHERE query_id = ' . (int)$query->id); + if (is_a($exists, 'PEAR_Error')) { + return $exists; + } + + if ($exists) { + $q = 'UPDATE whups_queries SET query_parameters = ?, ' + . 'query_object = ? WHERE query_id = ?'; + $values = array(serialize($query->parameters), + serialize($query->query), + $query->id); + } else { + + $q = 'INSERT INTO whups_queries (query_id, query_parameters, ' + . 'query_object) VALUES (?, ?, ?)'; + $values = array($query->id, serialize($query->parameters), + serialize($query->query)); + } + $values = Horde_String::convertCharset($values, Horde_Nls::getCharset(), + $this->_params['charset']); + Horde::logMessage( + sprintf('Whups_Driver_sql::saveQuery(): query="%s"; values="%s"', + $q, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + return $this->_write_db->query($q, $values); + } + + /** + * Delete query details. + * + * @param integer $queryId + */ + function deleteQuery($queryId) + { + $query = 'DELETE FROM whups_queries WHERE query_id = ?'; + $values = array((int)$queryId); + Horde::logMessage( + sprintf('Whups_Driver_sql::deleteQuery(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + return $this->_write_db->query($query, $values); + } + + function isCategory($category, $state_id) + { + $query = 'SELECT 1 FROM whups_states ' + . 'WHERE state_id = ? AND state_category = ?'; + $values = array((int)$state_id, $category); + Horde::logMessage( + sprintf('Whups_Driver_sql::isCategory(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + return $this->_db->getOne($query, $values); + } + + function getAllPriorityInfo($type) + { + $query = 'SELECT priority_id, priority_name, priority_description ' + . 'FROM whups_priorities WHERE type_id = ? ORDER BY priority_id'; + $values = array((int)$type); + Horde::logMessage( + sprintf('Whups_Driver_sql::getAllPriorityInfo(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + + $info = $this->_db->getAll($query, $values, DB_FETCHMODE_ASSOC); + if (is_a($info, 'PEAR_Error')) { + Horde::logMessage($info, __FILE__, __LINE__, PEAR_LOG_ERR); + return $info; + } + + return Horde_String::convertCharset($info, $this->_params['charset']); + } + + function getPriorities($type = null) + { + $fields = 'priority_id, priority_name'; + $from = 'whups_priorities'; + $order = 'priority_name'; + if (empty($type)) { + $fields .= ', whups_types.type_id, type_name'; + $from .= ' LEFT JOIN whups_types ON whups_priorities.type_id = whups_types.type_id'; + $where = ''; + $order = 'type_name, ' . $order; + } else { + $where = ' WHERE type_id = ' . $type; + } + + $query = "SELECT $fields FROM $from$where ORDER BY $order"; + Horde::logMessage( + sprintf('SQL Query by Whups_Driver_sql::getPriorities(): query="%s"', + $query), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + + $priorities = $this->_db->getAssoc($query); + if (is_a($priorities, 'PEAR_Error')) { + Horde::logMessage($priorities, __FILE__, __LINE__, PEAR_LOG_ERR); + return $priorities; + } + + if (empty($type)) { + foreach ($priorities as $id => $priority) { + $priorities[$id] = $priority[0] . ' (' . $priority[2] . ')'; + } + } + + return Horde_String::convertCharset($priorities, $this->_params['charset']); + } + + function getPriority($priorityId) + { + if (empty($priorityId)) { + return false; + } + $query = 'SELECT priority_id, priority_name, priority_description, ' + . 'type_id FROM whups_priorities WHERE priority_id = ?'; + $values = array((int)$priorityId); + Horde::logMessage( + sprintf('Whups_Driver_sql::getPriority(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $priority = $this->_db->getAssoc($query, false, $values); + if (is_a($priority, 'PEAR_Error')) { + Horde::logMessage($priority, __FILE__, __LINE__, PEAR_LOG_ERR); + return $priority; + } + + $priority = Horde_String::convertCharset($priority, $this->_params['charset']); + return array('id' => $priorityId, + 'name' => isset($priority[$priorityId][0]) + ? $priority[$priorityId][0] : '', + 'description' => isset($priority[$priorityId][1]) + ? $priority[$priorityId][1] : '', + 'type' => isset($priority[$priorityId][2]) + ? $priority[$priorityId][2] : ''); + } + + function updatePriority($priorityId, $name, $description) + { + $query = 'UPDATE whups_priorities' . + ' SET priority_name = ?, priority_description = ?' . + ' WHERE priority_id = ?'; + $values = array(Horde_String::convertCharset($name, Horde_Nls::getCharset(), + $this->_params['charset']), + Horde_String::convertCharset($description, Horde_Nls::getCharset(), + $this->_params['charset']), + $priorityId); + Horde::logMessage( + sprintf('Whups_Driver_sql::updatePriority(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + return $this->_write_db->query($query, $values); + } + + function getDefaultPriority($type) + { + $query = 'SELECT priority_id FROM whups_priorities ' + . 'WHERE priority_default = 1 AND type_id = ?'; + $values = array($type); + Horde::logMessage( + sprintf('Whups_Driver_sql::getDefaultPriority(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + return $this->_db->getOne($query, $values); + } + + function setDefaultPriority($type, $priority) + { + $query = 'UPDATE whups_priorities SET priority_default = 0 ' + . 'WHERE type_id = ?'; + $values = array($type); + Horde::logMessage( + sprintf('Whups_Driver_sql::setDefaultPriority(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $result = $this->_write_db->query($query, $values); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + return $result; + } + $query = 'UPDATE whups_priorities SET priority_default = 1 ' + . 'WHERE priority_id = ?'; + $values = array($priority); + Horde::logMessage( + sprintf('Whups_Driver_sql::setDefaultPriority(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + return $this->_write_db->query($query, $values); + } + + function deletePriority($priorityId) + { + $query = 'DELETE FROM whups_priorities WHERE priority_id = ?'; + $values = array($priorityId); + Horde::logMessage( + sprintf('Whups_Driver_sql::deletePriority(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + return $this->_write_db->query($query, $values); + } + + function getVersionInfoInternal($queue) + { + $query = 'SELECT version_id, version_name, version_description, version_active ' + . 'FROM whups_versions WHERE queue_id = ?' + . ' ORDER BY version_id'; + $values = array($queue); + Horde::logMessage( + sprintf('Whups_Driver_sql::getVersionInfoInternal(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + + $info = $this->_db->getAll($query, $values, DB_FETCHMODE_ASSOC); + if (is_a($info, 'PEAR_Error')) { + Horde::logMessage($info, __FILE__, __LINE__, PEAR_LOG_ERR); + return $info; + } + + return Horde_String::convertCharset($info, $this->_params['charset']); + } + + function getVersionInternal($versionId) + { + if (empty($versionId)) { + return false; + } + $query = 'SELECT version_id, version_name, version_description, version_active'. + ' FROM whups_versions WHERE version_id = ?'; + $values = array($versionId); + Horde::logMessage( + sprintf('Whups_Driver_sql::getVersionInternal(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $version = $this->_db->getAssoc($query, false, $values); + if (is_a($version, 'PEAR_Error')) { + Horde::logMessage($version, __FILE__, __LINE__, PEAR_LOG_ERR); + return $version; + } + + $version = Horde_String::convertCharset($version, $this->_params['charset']); + return array('id' => $versionId, + 'name' => isset($version[$versionId][0]) + ? $version[$versionId][0] : '', + 'description' => isset($version[$versionId][1]) + ? $version[$versionId][1] : '', + 'active' => !empty($version[$versionId][2])); + } + + function updateVersion($versionId, $name, $description, $active) + { + $query = 'UPDATE whups_versions SET version_name = ?, ' + . 'version_description = ?, version_active = ? ' + . 'WHERE version_id = ?'; + $values = array(Horde_String::convertCharset($name, Horde_Nls::getCharset(), + $this->_params['charset']), + Horde_String::convertCharset($description, Horde_Nls::getCharset(), + $this->_params['charset']), + (int)$active, + (int)$versionId); + Horde::logMessage( + sprintf('Whups_Driver_sql::updateVersion(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + return $this->_write_db->query($query, $values); + } + + function deleteVersion($versionId) + { + $query = 'DELETE FROM whups_versions WHERE version_id = ?'; + $values = array($versionId); + Horde::logMessage( + sprintf('Whups_Driver_sql::deleteVersion(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + return $this->_write_db->query($query, $values); + } + + /** + * Returns all available form replies for a ticket type. + * + * @param integer $type A type id. + * + * @return array A hash with reply ids as keys and reply hashes as values. + */ + function getReplies($type) + { + $query = 'SELECT reply_id, reply_name, reply_text ' + . 'FROM whups_replies WHERE type_id = ? ORDER BY reply_name'; + $values = array((int)$type); + Horde::logMessage( + sprintf('Whups_Driver_sql::getReplies(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + + $info = $this->_db->getAssoc($query, false, $values, DB_FETCHMODE_ASSOC); + if (is_a($info, 'PEAR_Error')) { + Horde::logMessage($info, __FILE__, __LINE__, PEAR_LOG_ERR); + return $info; + } + + return Horde_String::convertCharset($info, $this->_params['charset']); + } + + /** + * Returns a form reply information hash. + * + * @param integer $reply_id A form reply id. + * + * @return array A hash with all form reply information. + */ + function getReply($reply_id) + { + $query = 'SELECT reply_name, reply_text, type_id ' + . 'FROM whups_replies WHERE reply_id = ?'; + $values = array((int)$reply_id); + Horde::logMessage( + sprintf('Whups_Driver_sql::getReply(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $reply = $this->_db->getRow($query, $values, DB_FETCHMODE_ASSOC); + if (is_a($reply, 'PEAR_Error')) { + Horde::logMessage($reply, __FILE__, __LINE__, PEAR_LOG_ERR); + return $reply; + } + + return Horde_String::convertCharset($reply, $this->_params['charset']); + } + + /** + * Updates a form reply in the backend. + * + * @param integer $reply A reply id. + * @param string $name The new reply name. + * @param string $text The new reply text. + */ + function updateReply($reply, $name, $text) + { + $query = 'UPDATE whups_replies SET reply_name = ?, ' + . 'reply_text = ? WHERE reply_id = ?'; + $values = array(Horde_String::convertCharset($name, Horde_Nls::getCharset(), + $this->_params['charset']), + Horde_String::convertCharset($text, Horde_Nls::getCharset(), + $this->_params['charset']), + $reply); + Horde::logMessage( + sprintf('Whups_Driver_sql::updateReply(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $result = $this->_write_db->query($query, $values); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + } + return $result; + } + + /** + * Deletes a form reply from the backend. + * + * @param integer $reply A reply id. + */ + function deleteReply($reply) + { + $query = 'DELETE FROM whups_replies WHERE reply_id = ?'; + $values = array((int)$reply); + Horde::logMessage( + sprintf('Whups_Driver_sql::deleteReply(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $result = $this->_write_db->query($query, $values); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + return $result; + } + return parent::deleteReply($reply); + } + + function addListener($ticket, $user) + { + $query = 'INSERT INTO whups_ticket_listeners (ticket_id, user_uid)' . + ' VALUES (?, ?)'; + $values = array($ticket, $user); + Horde::logMessage( + sprintf('Whups_Driver_sql::addListener(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + + $result = $this->_write_db->query($query, $values); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + return $result; + } + + return true; + } + + function deleteListener($ticket, $user) + { + $query = 'DELETE FROM whups_ticket_listeners WHERE ticket_id = ?' . + ' AND user_uid = ?'; + $values = array($ticket, $user); + Horde::logMessage( + sprintf('Whups_Driver_sql::deleteListener(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + + $result = $this->_write_db->query($query, $values); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + return $result; + } + + return true; + } + + function getListeners($ticket, $withowners = true, $withrequester = true, + $withresponsible = false) + { + $query = 'SELECT DISTINCT l.user_uid' . + ' FROM whups_ticket_listeners l, whups_tickets t' . + ' WHERE (l.ticket_id = ?)'; + $values = array($ticket); + Horde::logMessage( + sprintf('Whups_Driver_sql::getListeners(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $users = $this->_db->getCol($query, 0, $values); + if (is_a($users, 'PEAR_Error')) { + Horde::logMessage($users, __FILE__, __LINE__, PEAR_LOG_ERR); + return array(); + } + $tinfo = $this->getTicketDetails($ticket); + if (is_a($tinfo, 'PEAR_Error')) { + Horde::logMessage($tinfo, __FILE__, __LINE__, PEAR_LOG_ERR); + return array(); + } + $requester = $tinfo['user_id_requester']; + if ($withresponsible) { + $users = array_merge($users, $this->getQueueUsers($tinfo['queue'])); + } + + // Tricky - handle case where owner = requester. + $owner_is_requester = false; + if (isset($tinfo['owners'])) { + foreach ($tinfo['owners'] as $owner) { + $owner = str_replace('user:', '', $owner); + if ($owner == $requester) { + $owner_is_requester = true; + } + if ($withowners) { + $users[$owner] = $owner; + } else { + if (isset($users[$owner])) { + unset($users[$owner]); + } + } + } + } + + if (!$withrequester) { + if (isset($users[$requester]) && (!$withowners || $owner_is_requester)) { + unset($users[$requester]); + } + } elseif (!empty($requester)) { + $users[$requester] = $requester; + } + + return $users; + } + + function addAttributeDesc($type_id, $name, $desc, $type, $params, $required) + { + // TODO: Make sure we're not adding a duplicate here (can be + // done in the db schema). + + // FIXME: This assumes that $type_id is a valid type id. + $new_id = $this->_write_db->nextId('whups_attributes_desc'); + if (is_a($new_id, 'PEAR_Error')) { + Horde::logMessage($new_id, __FILE__, __LINE__, PEAR_LOG_ERR); + return $new_id; + } + + $query = 'INSERT INTO whups_attributes_desc ' + . '(attribute_id, type_id, attribute_name, attribute_description, ' + . 'attribute_type, attribute_params, attribute_required)' + . ' VALUES (?, ?, ?, ?, ?, ?, ?)'; + $values = array($new_id, + $type_id, + Horde_String::convertCharset($name, Horde_Nls::getCharset(), + $this->_params['charset']), + Horde_String::convertCharset($desc, Horde_Nls::getCharset(), + $this->_params['charset']), + $type, + serialize( + Horde_String::convertCharset($params, Horde_Nls::getCharset(), + $this->_params['charset'])), + (int)($required == 'on')); + + Horde::logMessage( + sprintf('Whups_Driver_sql::addAttributeDesc(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $result = $this->_write_db->query($query, $values); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + return $result; + } + + return $new_id; + } + + function updateAttributeDesc($attribute_id, $newname, $newdesc, $newtype, + $newparams, $newrequired) + { + $query = 'UPDATE whups_attributes_desc ' + . 'SET attribute_name = ?, attribute_description = ?, ' + . 'attribute_type = ?, attribute_params = ?, ' + . 'attribute_required = ? WHERE attribute_id = ?'; + $values = array(Horde_String::convertCharset($newname, Horde_Nls::getCharset(), + $this->_params['charset']), + Horde_String::convertCharset($newdesc, Horde_Nls::getCharset(), + $this->_params['charset']), + $newtype, + serialize( + Horde_String::convertCharset($newparams, + Horde_Nls::getCharset(), + $this->_params['charset'])), + (int)($newrequired == 'on'), + $attribute_id); + Horde::logMessage( + sprintf('Whups_Driver_sql::updateAttributeDesc(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + return $this->_write_db->query($query, $values); + } + + function deleteAttributeDesc($attribute_id) + { + // FIXME: Which one of these returns the error, or do we have to check + // all of them for errors? + $this->_write_db->autoCommit(false); + $query = 'DELETE FROM whups_attributes_desc WHERE attribute_id = ?'; + $values = array($attribute_id); + Horde::logMessage( + sprintf('Whups_Driver_sql::deleteAttributeDesc(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $this->_write_db->query($query, $values); + $query = 'DELETE FROM whups_attributes WHERE attribute_id = ?'; + $values = array($attribute_id); + Horde::logMessage( + sprintf('Whups_Driver_sql::deleteAttributeDesc(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $this->_write_db->query($query, $values); + $this->_write_db->commit(); + $this->_write_db->autoCommit(true); + + return true; + } + + function getAllAttributes() + { + $query = 'SELECT attribute_id, attribute_name, attribute_description, ' + . 'type_id FROM whups_attributes_desc'; + Horde::logMessage( + sprintf('Whups_Driver_sql::getAllAttributes(): query="%s"', $query), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + + $attributes = $this->_db->getAssoc($query, false, array(), + DB_FETCHMODE_ASSOC); + if (is_a($attributes, 'PEAR_Error')) { + Horde::logMessage($attributes, __FILE__, __LINE__, PEAR_LOG_ERR); + return $attributes; + } + + return Horde_String::convertCharset($attributes, $this->_params['charset']); + } + + function getAttributeDesc($attribute_id) + { + if (empty($attribute_id)) { + return false; + } + + $query = 'SELECT attribute_id, attribute_name, attribute_description, ' + . 'attribute_type, attribute_params, attribute_required ' + . 'FROM whups_attributes_desc WHERE attribute_id = ?'; + $values = array($attribute_id); + Horde::logMessage( + sprintf('Whups_Driver_sql::getAttributeDesc(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $attribute = $this->_db->getRow($query, $values, DB_FETCHMODE_ASSOC); + if (is_a($attribute, 'PEAR_Error')) { + Horde::logMessage($attribute, __FILE__, __LINE__, PEAR_LOG_ERR); + return $attribute; + } + + return array( + 'id' => $attribute_id, + 'attribute_name' => Horde_String::convertCharset( + $attribute['attribute_name'], $this->_params['charset']), + 'attribute_description' => Horde_String::convertCharset( + $attribute['attribute_description'], $this->_params['charset']), + 'attribute_type' => empty($attribute['attribute_type']) + ? 'text' : $attribute['attribute_type'], + 'attribute_params' => Horde_String::convertCharset( + @unserialize($attribute['attribute_params']), + $this->_params['charset']), + 'attribute_required' => (bool)$attribute['attribute_required']); + } + + function getAttributeName($attribute_id) + { + $query = 'SELECT attribute_name FROM whups_attributes_desc ' + . 'WHERE attribute_id = ?'; + $values = array($attribute_id); + Horde::logMessage( + sprintf('Whups_Driver_sql::getAttributeName(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + + $name = $this->_db->getOne($query, $values); + if (is_a($name, 'PEAR_Error')) { + Horde::logMessage($name, __FILE__, __LINE__, PEAR_LOG_ERR); + return $name; + } + + return Horde_String::convertCharset($name, $this->_params['charset']); + } + + function _getAttributesForType($type = null, $raw = false) + { + $fields = 'attribute_id, attribute_name, attribute_description, ' + . 'attribute_type, attribute_params, attribute_required'; + $from = 'whups_attributes_desc'; + $order = 'attribute_name'; + if (empty($type)) { + $fields .= ', whups_types.type_id, type_name'; + $from .= ' LEFT JOIN whups_types ON ' + . 'whups_attributes_desc.type_id = whups_types.type_id'; + $where = ''; + $order = 'type_name, ' . $order; + } else { + $where = ' WHERE type_id = ' . (int)$type; + } + + $query = "SELECT $fields FROM $from$where ORDER BY $order"; + Horde::logMessage( + sprintf('Whups_Driver_sql::getAttributesForType(): query="%s"', + $query), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + + $attributes = $this->_db->getAssoc($query, false, null, + DB_FETCHMODE_ASSOC); + if (is_a($attributes, 'PEAR_Error')) { + Horde::logMessage($attributes, __FILE__, __LINE__, PEAR_LOG_ERR); + return $attributes; + } + + foreach ($attributes as $id => $attribute) { + if (empty($type) && !$raw) { + $attributes[$id]['attribute_name'] = + $attribute['attribute_name'] + . ' (' . $attribute['type_name'] . ')'; + } + $attributes[$id]['attribute_name'] = Horde_String::convertCharset( + $attribute['attribute_name'], $this->_params['charset']); + $attributes[$id]['attribute_description'] = Horde_String::convertCharset( + $attribute['attribute_description'], $this->_params['charset']); + $attributes[$id]['attribute_type'] = + empty($attribute['attribute_type']) + ? 'text' : $attribute['attribute_type']; + $attributes[$id]['attribute_params'] = Horde_String::convertCharset( + @unserialize($attribute['attribute_params']), + $this->_params['charset']); + $attributes[$id]['attribute_required'] = + (bool)$attribute['attribute_required']; + } + + return $attributes; + } + + function getAttributeNamesForType($type_id) + { + if (empty($type_id)) { + return array(); + } + $query = 'SELECT attribute_name FROM whups_attributes_desc ' + .'WHERE type_id = ? ORDER BY attribute_name'; + $values = array((int)$type_id); + Horde::logMessage( + sprintf('Whups_Driver_sql::getAttributeNamesForType(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + + $names = $this->_db->getAll($query, $values, DB_FETCHMODE_ASSOC); + if (is_a($names, 'PEAR_Error')) { + Horde::logMessage($names, __FILE__, __LINE__, PEAR_LOG_ERR); + return $names; + } + + return Horde_String::convertCharset($names, $this->_params['charset']); + } + + function getAttributeInfoForType($type_id) + { + $query = 'SELECT attribute_id, attribute_name, attribute_description ' + . 'FROM whups_attributes_desc WHERE type_id = ? ' + . 'ORDER BY attribute_id'; + $values = array((int)$type_id); + Horde::logMessage( + sprintf('Whups_Driver_sql::getAttributeNamesForType(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + + $info = $this->_db->getAll($query, $values, DB_FETCHMODE_ASSOC); + if (is_a($info, 'PEAR_Error')) { + Horde::logMessage($info, __FILE__, __LINE__, PEAR_LOG_ERR); + return $info; + } + + return Horde_String::convertCharset($info, $this->_params['charset']); + } + + function _setAttributeValue($ticket_id, $attribute_id, $attribute_value) + { + $db_attribute_value = Horde_String::convertCharset((string)$attribute_value, + Horde_Nls::getCharset(), + $this->_params['charset']); + + $this->_write_db->autoCommit(false); + $query = 'DELETE FROM whups_attributes ' + . 'WHERE ticket_id = ? AND attribute_id = ?'; + $values = array($ticket_id, $attribute_id); + Horde::logMessage( + sprintf('Whups_Driver_sql::_setAttributeValue(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $this->_write_db->query($query, $values); + + if (!empty($attribute_value)) { + $query = 'INSERT INTO whups_attributes' + . '(ticket_id, attribute_id, attribute_value)' + . ' VALUES (?, ?, ?)'; + $values = array($ticket_id, $attribute_id, $db_attribute_value); + Horde::logMessage( + sprintf('Whups_Driver_sql::_setAttributeValue(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $inserted = $this->_write_db->query($query, $values); + if (is_a($inserted, 'PEAR_Error')) { + Horde::logMessage($inserted, __FILE__, __LINE__, PEAR_LOG_ERR); + $this->_write_db->rollback(); + $this->_write_db->autoCommit(true); + return $inserted; + } + } + + $this->_write_db->commit(); + $this->_write_db->autoCommit(true); + } + + function getTicketAttributes($ticket_id) + { + if (is_array($ticket_id)) { + // No need to run a query for an empty array, and it would result + // in an invalid SQL query anyway. + if (!count($ticket_id)) { + return array(); + } + + $query = 'SELECT ticket_id AS id, attribute_id, attribute_value ' + . 'FROM whups_attributes WHERE ticket_id IN (' + . str_repeat('?, ', count($ticket_id) - 1) . '?)'; + Horde::logMessage( + sprintf('Whups_Driver_sql::getAttributes(): query="%s"', $query), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $attributes = $this->_db->getAll($query, $ticket_id, + DB_FETCHMODE_ASSOC); + } else { + $query = 'SELECT attribute_id, attribute_value' . + ' FROM whups_attributes WHERE ticket_id = ?'; + $values = array((int)$ticket_id); + Horde::logMessage( + sprintf('Whups_Driver_sql::getTicketAttributes(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + + $attributes = $this->_db->getAssoc($query, false, $values); + } + + if (is_a($attributes, 'PEAR_Error')) { + Horde::logMessage($attributes, __FILE__, __LINE__, PEAR_LOG_ERR); + return $attributes; + } + + return Horde_String::convertCharset($attributes, $this->_params['charset']); + } + + function getTicketAttributesWithNames($ticket_id) + { + if (is_array($ticket_id)) { + // No need to run a query for an empty array, and it would result + // in an invalid SQL query anyway. + if (!count($ticket_id)) { + return array(); + } + + $query = 'SELECT ticket_id AS id, d.attribute_name, ' + . 'a.attribute_id, a.attribute_value ' + . 'FROM whups_attributes a INNER JOIN whups_attributes_desc d ' + . 'ON (d.attribute_id = a.attribute_id)' + . 'WHERE a.ticket_id IN (' + . str_repeat('?, ', count($ticket_id) - 1) . '?)'; + Horde::logMessage( + sprintf('SQL Query by Whups_Driver_sql::getAttributes(): query="%s"', + $query), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $attributes = $this->_db->getAll($query, $ticket_id, + DB_FETCHMODE_ASSOC); + } else { + $query = 'SELECT d.attribute_name, a.attribute_value ' + . 'FROM whups_attributes a INNER JOIN whups_attributes_desc d ' + . 'ON (d.attribute_id = a.attribute_id)' + . 'WHERE a.ticket_id = ? ORDER BY d.attribute_name'; + $values = array((int)$ticket_id); + Horde::logMessage( + sprintf('Whups_Driver_sql::getTicketAttributesWithNames(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + + $attributes = $this->_db->getAssoc($query, false, $values); + } + if (is_a($attributes, 'PEAR_Error')) { + Horde::logMessage($attributes, __FILE__, __LINE__, PEAR_LOG_ERR); + return $attributes; + } + + return Horde_String::convertCharset($attributes, $this->_params['charset']); + } + + function _getAllTicketAttributesWithNames($ticket_id) + { + $query = 'SELECT d.attribute_id, d.attribute_name, ' + . 'd.attribute_description, d.attribute_type, d.attribute_params, ' + . 'd.attribute_required, a.attribute_value ' + . 'FROM whups_attributes_desc d ' + . 'LEFT JOIN whups_tickets t ON (t.ticket_id = ?) ' + . 'LEFT OUTER JOIN whups_attributes a ' + . 'ON (d.attribute_id = a.attribute_id AND a.ticket_id = ?) ' + . 'WHERE d.type_id = t.type_id ORDER BY d.attribute_name'; + $values = array($ticket_id, $ticket_id); + Horde::logMessage( + sprintf('Whups_Driver_sql::getAllTicketAttributesWithNames(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + + $attributes = $this->_db->getAll($query, $values, DB_FETCHMODE_ASSOC); + if (is_a($attributes, 'PEAR_Error')) { + Horde::logMessage($attributes, __FILE__, __LINE__, PEAR_LOG_ERR); + return $attributes; + } + + foreach ($attributes as $id => $attribute) { + $attributes[$id]['attribute_name'] = Horde_String::convertCharset( + $attribute['attribute_name'], $this->_params['charset']); + $attributes[$id]['attribute_description'] = Horde_String::convertCharset( + $attribute['attribute_description'], $this->_params['charset']); + $attributes[$id]['attribute_type'] = + empty($attribute['attribute_type']) + ? 'text' : $attribute['attribute_type']; + $attributes[$id]['attribute_params'] = Horde_String::convertCharset( + @unserialize($attribute['attribute_params']), + $this->_params['charset']); + $attributes[$id]['attribute_required'] = + (bool)$attribute['attribute_required']; + } + + return $attributes; + } + + function getOwners($ticketId) + { + if (is_array($ticketId)) { + // No need to run a query for an empty array, and it would + // result in an invalid SQL query anyway. + if (!count($ticketId)) { + return array(); + } + + $query = 'SELECT ticket_id AS id, ticket_owner AS owner ' + . 'FROM whups_ticket_owners WHERE ticket_id ' + . 'IN (' . str_repeat('?, ', count($ticketId) - 1) . '?)'; + $values = $ticketId; + Horde::logMessage( + sprintf('Whups_Driver_sql::getOwners(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + return $this->_db->getAll($query, $values, DB_FETCHMODE_ASSOC); + } else { + $query = 'SELECT ticket_owner, ticket_owner ' + . 'FROM whups_ticket_owners WHERE ticket_id = ?'; + $values = array((int)$ticketId); + Horde::logMessage( + sprintf('Whups_Driver_sql::getOwners(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + return $this->_db->getAssoc($query, false, $values); + } + } + + function updateLog($ticket_id, $user, $changes = array(), + $transactionId = null) + { + if (is_null($transactionId)) { + $transactionId = $this->newTransaction($user); + if (is_a($transactionId, 'PEAR_Error')) { + return $transactionId; + } + } + + foreach ($changes as $type => $value) { + $log_id = $this->_write_db->nextId('whups_logs'); + if (is_a($log_id, 'PEAR_Error')) { + return $log_id; + } + + $query = 'INSERT INTO whups_logs (log_id, transaction_id, ' + . 'ticket_id, log_timestamp, user_id, log_type, log_value, ' + . 'log_value_num) VALUES (?, ?, ?, ?, ?, ?, ?, ?)'; + $values = array( + (int)$log_id, + (int)$transactionId, + (int)$ticket_id, + time(), + (string)$user, + $type, + Horde_String::convertCharset((string)$value, Horde_Nls::getCharset(), + $this->_params['charset']), + (int)$value); + Horde::logMessage( + sprintf('Whups_Driver_sql::updateLog(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $result = $this->_write_db->query($query, $values); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + return $result; + } + } + + return $transactionId; + } + + /** + * Create a new transaction id for associating related entries in + * the whups_logs table. + * + * @return integer New transaction id. + */ + function newTransaction($creator, $creator_email = null) + { + $transactionId = $this->_write_db->nextId('whups_transactions'); + if (is_a($transactionId, 'PEAR_Error')) { + return $transactionId; + } + + if ((empty($creator) || $creator < 0) && !empty($creator_email)) { + $creator = '-' . $transactionId . '_transaction'; + $query = 'INSERT INTO whups_guests (guest_id, guest_email)' + . ' VALUES (?, ?)'; + $values = array((string)$creator, $creator_email); + Horde::logMessage( + sprintf('Whups_Driver_sql::newTransaction(): query="%s"; values="%s"', + $query, implode(',', $values)), + __FILE__, __LINE__, PEAR_LOG_DEBUG); + $result = $this->_write_db->query($query, $values); + if (is_a($result, 'PEAR_Error')) { + Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR); + return $result; + } + } + + return $transactionId; + } + + /** + * Return the db object we're using. + * + * return DB Database object. + */ + function getDb() + { + return $this->_db; + } + + /** + */ + function initialise() + { + Horde::assertDriverConfig($this->_params, 'tickets', + array('phptype')); + + if (!isset($this->_params['database'])) { + $this->_params['database'] = ''; + } + if (!isset($this->_params['username'])) { + $this->_params['username'] = ''; + } + if (!isset($this->_params['hostspec'])) { + $this->_params['hostspec'] = ''; + } + + /* Connect to the SQL server using the supplied parameters. */ + require_once 'DB.php'; + $this->_write_db = &DB::connect($this->_params, + array('persistent' => !empty($this->_params['persistent']))); + if (is_a($this->_write_db, 'PEAR_Error')) { + Horde::fatal($this->_write_db, __FILE__, __LINE__); + } + + // Set DB portability options. + switch ($this->_write_db->phptype) { + case 'mssql': + $this->_write_db->setOption('portability', DB_PORTABILITY_LOWERCASE | DB_PORTABILITY_ERRORS | DB_PORTABILITY_RTRIM); + break; + default: + $this->_write_db->setOption('portability', DB_PORTABILITY_LOWERCASE | DB_PORTABILITY_ERRORS); + } + + /* Check if we need to set up the read DB connection + * seperately. */ + if (!empty($this->_params['splitread'])) { + $params = array_merge($this->_params, $this->_params['read']); + $this->_db = &DB::connect($params, + array('persistent' => !empty($params['persistent']))); + if (is_a($this->_db, 'PEAR_Error')) { + Horde::fatal($this->_db, __FILE__, __LINE__); + } + + // Set DB portability options. + switch ($this->_db->phptype) { + case 'mssql': + $this->_db->setOption('portability', DB_PORTABILITY_LOWERCASE | DB_PORTABILITY_ERRORS | DB_PORTABILITY_RTRIM); + break; + default: + $this->_db->setOption('portability', DB_PORTABILITY_LOWERCASE | DB_PORTABILITY_ERRORS); + } + } else { + /* Default to the same DB handle for reads. */ + $this->_db =& $this->_write_db; + } + + return true; + } + + function _generateWhere($table, $fields, &$info, $type) + { + $where = ''; + $this->_mapFields($info); + + foreach ($fields as $field) { + if (isset($info[$field])) { + $prop = $info[$field]; + if (is_array($info[$field])) { + $clauses = array(); + foreach ($prop as $pprop) { + if (@settype($pprop, $type)) { + $clauses[] = "$table.$field = " . $this->_write_db->quote($pprop); + } + } + if (count($clauses)) { + $where = $this->_addWhere($where, true, implode(' OR ', $clauses)); + } + } else { + $success = @settype($prop, $type); + $where = $this->_addWhere($where, !is_null($prop) && $success, "$table.$field = " . $this->_write_db->quote($prop)); + } + } + } + + foreach ($fields as $field) { + if (isset($info["not$field"])) { + $prop = $info["not$field"]; + + if (strpos($prop, ',') === false) { + $success = @settype($prop, $type); + $where = $this->_addWhere($where, $prop && $success, "$table.$field <> " . $this->_write_db->quote($prop)); + } else { + $set = explode(',', $prop); + + foreach ($set as $prop) { + $success = @settype($prop, $type); + $where = $this->_addWhere($where, $prop && $success, "$table.$field <> " . $this->_write_db->quote($prop)); + } + } + } + } + + return $where; + } + + function _mapFields(&$info) + { + foreach ($info as $key => $val) { + if ($key === 'id') { + $info['ticket_id'] = $info['id']; + unset($info['id']); + } elseif ($key === 'state' || + $key === 'type' || + $key === 'queue' || + $key === 'priority') { + $info[$key . '_id'] = $info[$key]; + unset($info[$key]); + } elseif ($key === 'requester') { + $info['user_id_' . $key] = $info[$key]; + unset($info[$key]); + } + } + } + + function _addWhere($where, $condition, $clause, $conjunction = 'AND') + { + if (!empty($condition)) { + if (!empty($where)) { + $where .= " $conjunction "; + } + + $where .= "($clause)"; + } + + return $where; + } + + function _addDateWhere($where, $data, $type) + { + if (is_array($data)) { + if (!empty($data['from'])) { + $where = $this->_addWhere($where, true, + $type . ' >= ' . (int)$data['from']); + } + if (!empty($data['to'])) { + $where = $this->_addWhere($where, true, + $type . ' <= ' . (int)$data['to']); + } + return $where; + } + + return $this->_addWhere($where, true, $type . ' = ' . (int)$data); + } + + function _prefixTableToColumns($table, $columns) + { + $join = ""; + + $clause = ''; + foreach ($columns as $column) { + $clause .= "$join$table.$column"; + $join = ', '; + } + + return $clause; + } + +} diff --git a/whups/lib/Forms/Action.php b/whups/lib/Forms/Action.php new file mode 100644 index 000000000..fa4bafadf --- /dev/null +++ b/whups/lib/Forms/Action.php @@ -0,0 +1,36 @@ + + * @package Horde_Form + */ +class Horde_Form_Action_whups_reload extends Horde_Form_Action { + + var $_trigger = array('onchange'); + + function getActionScript($form, $renderer, $varname) + { + Horde::addScriptFile('prototype.js', 'horde', true); + Horde::addScriptFile('effects.js', 'horde', true); + Horde::addScriptFile('redbox.js', 'horde', true); + return 'if (this.value) { document.' . $form->getName() + . '.formname.value=\'' . $this->_params['formname'] + . '\'; RedBox.loading(); document.' . $form->getName() + . '.submit() }'; + } + +} diff --git a/whups/lib/Forms/AddComment.php b/whups/lib/Forms/AddComment.php new file mode 100644 index 000000000..6157e5ef1 --- /dev/null +++ b/whups/lib/Forms/AddComment.php @@ -0,0 +1,59 @@ +addHidden('', 'id', 'int', true, true); + + if (!Horde_Auth::getAuth()) { + $this->addVariable(_("Your Email Address"), 'user_email', 'email', true); + if (!empty($conf['guests']['captcha'])) { + $this->addVariable(_("Spam protection"), 'captcha', 'figlet', true, null, null, array(Whups::getCAPTCHA(!$this->isSubmitted()), $conf['guests']['figlet_font'])); + } + } + $this->addVariable(_("Comment"), 'newcomment', 'longtext', false); + $this->addVariable(_("Attachment"), 'newattachment', 'file', false); + $this->addVariable(_("Watch this ticket"), 'add_watch', 'boolean', false); + + /* Group restrictions. */ + if (Horde_Auth::isAdmin('whups:admin') || + $GLOBALS['perms']->hasPermission('whups:hiddenComments', Horde_Auth::getAuth(), Horde_Perms::EDIT)) { + $groups = &Group::singleton(); + $mygroups = $groups->getGroupMemberships(Horde_Auth::getAuth()); + if ($mygroups) { + foreach (array_keys($mygroups) as $gid) { + $grouplist[$gid] = $groups->getGroupName($gid, true); + } + asort($grouplist); + $grouplist = array_merge(array(0 => _("This comment is visible to everyone")), $grouplist); + $this->addVariable(_("Make this comment visible only to members of a group?"), 'group', 'enum', true, false, null, array($grouplist)); + } + } + } + + function validate(&$vars, $canAutoFill = false) + { + global $conf; + + if (!parent::validate($vars, $canAutoFill)) { + if (!Horde_Auth::getAuth() && !empty($conf['guests']['captcha'])) { + $vars->remove('captcha'); + $this->removeVariable($varname = 'captcha'); + $this->insertVariableBefore('newcomment', _("Spam protection"), 'captcha', 'figlet', true, null, null, array(Whups::getCAPTCHA(true), $conf['guests']['figlet_font'])); + } + return false; + } + + return true; + } + +} diff --git a/whups/lib/Forms/Admin.php b/whups/lib/Forms/Admin.php new file mode 100644 index 000000000..baaa443f6 --- /dev/null +++ b/whups/lib/Forms/Admin.php @@ -0,0 +1,45 @@ + + * @package Whups + */ + +class SendReminderForm extends Horde_Form { + + function SendReminderForm(&$vars) + { + global $whups_driver; + + parent::Horde_Form($vars, _("Send Reminders")); + + $queues = Whups::permissionsFilter($whups_driver->getQueues(), 'queue', Horde_Perms::EDIT); + if (count($queues)) { + $modtype = 'enum'; + $type_params = array($queues); + } else { + $modtype = 'invalid'; + $type_params = array(_("There are no queues available.")); + } + + $this->addVariable(_("Send only for this list of ticket ids"), 'id', 'intlist', false); + $this->addVariable(_("For tickets from these queues"), 'queue', $modtype, false, false, null, $type_params); + + $cats = $whups_driver->getCategories(); + unset($cats['resolved']); + $categories = &$this->addVariable(_("For tickets which are"), 'category', 'multienum', false, false, null, array($cats, 3)); + $categories->setDefault(array('assigned')); + + $this->addVariable(_("Unassigned tickets"), 'unassigned', 'email', false, false, _("If you select any tickets that do not have an owner, who should we send email to?")); + } + +} diff --git a/whups/lib/Forms/Admin/Attribute.php b/whups/lib/Forms/Admin/Attribute.php new file mode 100644 index 000000000..db19595e7 --- /dev/null +++ b/whups/lib/Forms/Admin/Attribute.php @@ -0,0 +1,152 @@ + + * @package Whups + */ + +class AddAttributeDescForm extends Horde_Form { + + function AddAttributeDescForm(&$vars) + { + require_once dirname(__FILE__) . '/../Action.php'; + + parent::Horde_Form($vars, _("Add Attribute")); + + $this->addHidden('', 'type', 'int', true, true); + $this->addVariable(_("Attribute Name"), 'attribute_name', 'text', true); + $this->addVariable(_("Attribute Description"), 'attribute_description', + 'text', true); + $this->addVariable(_("Required Attribute?"), 'attribute_required', + 'boolean', false); + + $v = &$this->addVariable(_("Attribute Type"), 'attribute_type', 'enum', + true, false, null, + array(Whups::fieldTypeNames())); + $v->setDefault('text'); + $v->setAction(Horde_Form_Action::factory( + 'whups_reload', + array('formname' => 'addattributedescform_reload'))); + + $type = $vars->get('attribute_type'); + if (empty($type)) { + $type = 'text'; + } + foreach (Whups::fieldTypeParams($type) as $param => $info) { + $this->addVariable($info['label'], + 'attribute_params[' . $param . ']', + $info['type'], false); + } + } + +} + +class EditAttributeDescStep1Form extends Horde_Form { + + function EditAttributeDescStep1Form(&$vars) + { + parent::Horde_Form($vars, _("Edit or Delete Attributes")); + $this->setButtons(array(_("Edit Attribute"), _("Delete Attribute"))); + + $attributes = $GLOBALS['whups_driver']->getAttributesForType( + $vars->get('type')); + if ($attributes) { + $params = array(); + foreach ($attributes as $key => $attribute) { + $params[$key] = $attribute['human_name']; + } + $stype = 'enum'; + $type_params = array($params); + } else { + $stype = 'invalid'; + $type_params = array(_("There are no attribute types to edit")); + } + + $this->addHidden('', 'type', 'int', true, true); + $this->addVariable(_("Attribute Name"), 'attribute', $stype, true, + false, null, $type_params); + } + +} + +class EditAttributeDescStep2Form extends Horde_Form { + + function EditAttributeDescStep2Form(&$vars) + { + require_once dirname(__FILE__) . '/../Action.php'; + + parent::Horde_Form($vars, _("Edit Attribute")); + + $attribute = $vars->get('attribute'); + $info = $GLOBALS['whups_driver']->getAttributeDesc($attribute); + + $this->addHidden('', 'type', 'int', true, true); + $this->addHidden('', 'attribute', 'int', true, true); + $pname = &$this->addVariable(_("Attribute Name"), 'attribute_name', + 'text', true); + $pname->setDefault($info['attribute_name']); + $pdesc = &$this->addVariable(_("Attribute Description"), + 'attribute_description', 'text', true); + $pdesc->setDefault($info['attribute_description']); + $preq = &$this->addVariable(_("Required Attribute?"), + 'attribute_required', 'boolean', false); + $preq->setDefault($info['attribute_required']); + + $ptype = &$this->addVariable(_("Attribute Type"), 'attribute_type', + 'enum', true, false, null, + array(Whups::fieldTypeNames())); + $ptype->setAction( + Horde_Form_Action::factory( + 'whups_reload', + array('formname' => 'editattributedescstep2form_reload'))); + $ptype->setDefault($info['attribute_type']); + + $type = $vars->get('attribute_type'); + if (empty($type)) { + $type = $info['attribute_type']; + } + foreach (Whups::fieldTypeParams($type) as $param => $param_info) { + $pparam = &$this->addVariable($param_info['label'], + 'attribute_params[' . $param . ']', + $param_info['type'], false); + if (isset($info['attribute_params'][$param])) { + $pparam->setDefault($info['attribute_params'][$param]); + } + } + } + +} + +class DeleteAttributeDescForm extends Horde_Form { + + function DeleteAttributeDescForm(&$vars) + { + parent::Horde_Form($vars, _("Delete Attribute Confirmation")); + + $attribute = $vars->get('attribute'); + $info = $GLOBALS['whups_driver']->getAttributeDesc($attribute); + + $this->addHidden('', 'type', 'int', true, true); + $this->addHidden('', 'attribute', 'int', true, true); + $pname = &$this->addVariable(_("Attribute Name"), 'attribute_name', + 'text', false, true); + $pname->setDefault($info['attribute_name']); + $pdesc = &$this->addVariable(_("Attribute Description"), + 'attribute_description', 'text', false, + true); + $pdesc->setDefault($info['attribute_description']); + $this->addVariable( + _("Really delete this attribute? This may cause data problems!"), + 'yesno', 'enum', true, false, null, + array(array(0 => _("No"), 1 => _("Yes")))); + } + +} diff --git a/whups/lib/Forms/Admin/Priority.php b/whups/lib/Forms/Admin/Priority.php new file mode 100644 index 000000000..b925e84bb --- /dev/null +++ b/whups/lib/Forms/Admin/Priority.php @@ -0,0 +1,125 @@ + + * @package Whups + */ + +class AddPriorityForm extends Horde_Form { + + function AddPriorityForm(&$vars) + { + parent::Horde_Form($vars, _("Add Priority")); + + $this->addHidden('', 'type', 'int', true, true); + $this->addVariable(_("Priority Name"), 'name', 'text', true); + $this->addVariable(_("Priority Description"), 'description', 'text', true); + } + +} + +class EditPriorityStep1Form extends Horde_Form { + + function EditPriorityStep1Form(&$vars) + { + global $whups_driver; + + parent::Horde_Form($vars, _("Edit or Delete Priorities")); + $this->setButtons(array(_("Edit Priority"), _("Delete Priority"))); + + $priorities = $whups_driver->getPriorities($vars->get('type')); + if ($priorities) { + $stype = 'enum'; + $type_params = array($priorities); + } else { + $stype = 'invalid'; + $type_params = array(_("There are no priorities to edit")); + } + + $this->addHidden('', 'type', 'int', true, true); + $this->addVariable(_("Priority Name"), 'priority', $stype, true, false, null, $type_params); + } + +} + +class EditPriorityStep2Form extends Horde_Form { + + function EditPriorityStep2Form(&$vars) + { + global $whups_driver; + + parent::Horde_Form($vars, _("Edit Priority")); + + $priority = $vars->get('priority'); + $info = $whups_driver->getPriority($priority); + + $this->addHidden('', 'type', 'int', true, true); + $this->addHidden('', 'priority', 'int', true, true); + + $pname = &$this->addVariable(_("Priority Name"), 'name', 'text', true); + $pname->setDefault($info['name']); + + $pdesc = &$this->addVariable(_("Priority Description"), 'description', 'text', true); + $pdesc->setDefault($info['description']); + } + +} + +class DefaultPriorityForm extends Horde_Form { + + function DefaultPriorityForm(&$vars) + { + parent::Horde_Form($vars, _("Set Default Priority")); + + $this->setButtons(array(_("Set Default Priority"))); + + $priorities = $GLOBALS['whups_driver']->getPriorities($vars->get('type')); + if ($priorities) { + $stype = 'enum'; + $type_params = array($priorities); + } else { + $stype = 'invalid'; + $type_params = array(_("There are no priorities to edit")); + } + + $this->addHidden('', 'type', 'int', true, true); + $var = &$this->addVariable(_("Priority Name"), 'priority', $stype, false, + false, null, $type_params); + $var->setDefault($GLOBALS['whups_driver']->getDefaultPriority($vars->get('type'))); + } + +} + +class DeletePriorityForm extends Horde_Form { + + function DeletePriorityForm(&$vars) + { + global $whups_driver; + + parent::Horde_Form($vars, _("Delete Priority Confirmation")); + + $priority = $vars->get('priority'); + $info = $whups_driver->getPriority($priority); + + $this->addHidden('', 'type', 'int', true, true); + $this->addHidden('', 'priority', 'int', true, true); + + $pname = &$this->addVariable(_("Priority Name"), 'name', 'text', false, true); + $pname->setDefault($info['name']); + + $pdesc = &$this->addVariable(_("Priority Description"), 'description', 'text', false, true); + $pdesc->setDefault($info['description']); + + $yesno = array(array(0 => _("No"), 1 => _("Yes"))); + $this->addVariable(_("Really delete this priority? This may cause data problems!"), 'yesno', 'enum', true, false, null, $yesno); + } + +} diff --git a/whups/lib/Forms/Admin/Queue.php b/whups/lib/Forms/Admin/Queue.php new file mode 100644 index 000000000..b5b108653 --- /dev/null +++ b/whups/lib/Forms/Admin/Queue.php @@ -0,0 +1,180 @@ + + * @package Whups + */ + +class AddQueueForm extends Horde_Form { + + function AddQueueForm(&$vars) + { + parent::Horde_Form($vars, _("Add Queue")); + $this->appendButtons(_("Add Queue")); + + $this->addVariable(_("Queue Name"), 'name', 'text', true); + $this->addVariable(_("Queue Description"), 'description', 'text', true); + $this->addVariable( + _("Queue Slug"), 'slug', 'text', false, false, + sprintf(_("Slugs allows direct access to this queue's open tickets by visiting: %s.
Slug names may contain only letters, numbers or the _ (underscore) character."), + Horde::applicationUrl('queue/slugname', true)), + array('/^[a-zA-Z1-9_]*$/')); + $this->addVariable(_("Queue Email"), 'email', 'email', false, false, + _("This email address will be used when sending notifications for any queue tickets.")); + } + +} + +class EditQueueStep1Form extends Horde_Form { + + function EditQueueStep1Form(&$vars) + { + global $whups_driver, $registry; + + if ($registry->hasMethod('tickets/listQueues') == $registry->getApp()) { + parent::Horde_Form($vars, _("Edit or Delete Queues")); + $this->setButtons(array(_("Edit Queue"), _("Delete Queue"))); + } else { + parent::Horde_Form($vars, _("Edit Queues")); + $this->setButtons(array(_("Edit Queue"))); + } + + $queues = Whups::permissionsFilter($whups_driver->getQueues(), 'queue', + Horde_Perms::EDIT); + if ($queues) { + $modtype = 'enum'; + $type_params = array($queues); + } else { + $modtype = 'invalid'; + $type_params = array(_("There are no queues to edit")); + } + + $this->addVariable(_("Queue Name"), 'queue', $modtype, true, false, + null, $type_params); + } + +} + +class EditQueueStep2Form extends Horde_Form { + + function EditQueueStep2Form(&$vars) + { + global $whups_driver, $registry; + + parent::Horde_Form($vars); + + $queue = $vars->get('queue'); + $info = $whups_driver->getQueue($queue); + if (is_a($info, 'PEAR_Error')) { + $this->addVariable(_("Invalid Queue"), 'invalid', 'invalid', true, + false, null, array(_("Invalid Queue"))); + return; + } + + $this->setTitle(sprintf(_("Edit %s"), $info['name'])); + $this->addHidden('', 'queue', 'int', true, true); + + $mname = &$this->addVariable(_("Queue Name"), 'name', 'text', true, + $info['readonly']); + $mname->setDefault($info['name']); + + $mdesc = &$this->addVariable(_("Queue Description"), 'description', + 'text', true, $info['readonly']); + $mdesc->setDefault($info['description']); + + $mslug = &$this->addVariable(_("Queue Slug"), 'slug', 'text', false, + $info['readonly']); + $mslug->setDefault($info['slug']); + + $memail = &$this->addVariable(_("Queue Email"), 'email', 'email', + false, $info['readonly']); + $memail->setDefault($info['email']); + + $types = $whups_driver->getAllTypes(); + $mtypes = &$this->addVariable( + _("Ticket Types associated with this Queue"), 'types', 'set', true, + false, null, array($types)); + $mtypes->setDefault(array_keys($whups_driver->getTypes($queue))); + $mdefaults = &$this->addVariable(_("Default Ticket Type"), 'default', + 'enum', false, false, null, + array($types)); + $mdefaults->setDefault($whups_driver->getDefaultType($queue)); + + /* Versioned and version link. */ + $mversioned = &$this->addVariable( + _("Keep a set of versions for this queue?"), 'versioned', + 'boolean', false, $info['readonly']); + $mversioned->setDefault($info['versioned']); + if ($registry->hasMethod('tickets/listVersions') == $registry->getApp()) { + $versionlink = array( + 'text' => _("Edit the versions for this queue"), + 'url' => Horde_Util::addParameter(Horde::applicationUrl('admin/?formname=editversionstep1form'), 'queue', $queue)); + $this->addVariable('', 'link', 'link', false, true, null, + array($versionlink)); + } + + /* Usertype and usertype link. */ + $users = $whups_driver->getQueueUsers($queue); + $f_users = array(); + foreach ($users as $user) { + $f_users[$user] = Whups::formatUser($user); + } + asort($f_users); + $musers = &$this->addVariable(_("Users responsible for this Queue"), + 'users', 'set', false, true, null, + array($f_users)); + $musers->setDefault($whups_driver->getQueueUsers($queue)); + $userlink = array( + 'text' => _("Edit the users responsible for this queue"), + 'url' => Horde_Util::addParameter(Horde::applicationUrl('admin/?formname=edituserform'), 'queue', $queue)); + $this->addVariable('', 'link', 'link', false, true, null, + array($userlink)); + + /* Perms link. */ + if (Horde_Auth::isAdmin('whups:admin', Horde_Perms::EDIT)) { + $permslink = array( + 'text' => _("Edit the permissions on this queue"), + 'url' => Horde_Util::addParameter(Horde_Util::addParameter(Horde::url($GLOBALS['registry']->get('webroot', 'horde') . '/admin/perms/edit.php'), 'category', "whups:queues:$queue"), 'autocreate', '1')); + $this->addVariable('', 'link', 'link', false, true, null, + array($permslink)); + } + } + +} + +class DeleteQueueForm extends Horde_Form { + + function DeleteQueueForm(&$vars) + { + global $whups_driver; + + parent::Horde_Form($vars, _("Delete Queue Confirmation")); + + $queue = $vars->get('queue'); + $info = $whups_driver->getQueue($queue); + + $this->addHidden('', 'queue', 'int', true, true); + + $mname = &$this->addVariable(_("Queue Name"), 'name', 'text', false, + true); + $mname->setDefault($info['name']); + + $mdesc = &$this->addVariable(_("Queue Description"), 'description', + 'text', false, true); + $mdesc->setDefault($info['description']); + + $yesno = array(array(0 => _("No"), 1 => _("Yes"))); + $this->addVariable( + _("Really delete this queue? This may cause data problems!"), + 'yesno', 'enum', true, false, null, $yesno); + } + +} diff --git a/whups/lib/Forms/Admin/Reply.php b/whups/lib/Forms/Admin/Reply.php new file mode 100644 index 000000000..e8d9cce39 --- /dev/null +++ b/whups/lib/Forms/Admin/Reply.php @@ -0,0 +1,113 @@ + + * @package Whups + */ + +class AddReplyForm extends Horde_Form { + + function AddReplyForm(&$vars) + { + require_once dirname(__FILE__) . '/../Action.php'; + + parent::Horde_Form($vars, _("Add Form Reply")); + + $this->addHidden('', 'type', 'int', true, true); + $this->addVariable(_("Form Reply Name"), 'reply_name', 'text', true); + $this->addVariable(_("Form Reply Text"), 'reply_text', 'longtext', true); + } + +} + +class EditReplyStep1Form extends Horde_Form { + + function EditReplyStep1Form(&$vars) + { + parent::Horde_Form($vars, _("Edit or Delete Form Replies")); + $this->setButtons(array(_("Edit Form Reply"), _("Delete Form Reply"))); + + $replies = $GLOBALS['whups_driver']->getReplies($vars->get('type')); + if ($replies) { + $params = array(); + foreach ($replies as $key => $reply) { + $params[$key] = $reply['reply_name']; + } + $stype = 'enum'; + $type_params = array($params); + } else { + $stype = 'invalid'; + $type_params = array(_("There are no form replies to edit")); + } + + $this->addHidden('', 'type', 'int', true, true); + $this->addVariable(_("Form Reply Name"), 'reply', $stype, true, + false, null, $type_params); + } + +} + +class EditReplyStep2Form extends Horde_Form { + + function EditReplyStep2Form(&$vars) + { + require_once dirname(__FILE__) . '/../Action.php'; + + parent::Horde_Form($vars, _("Edit Form Reply")); + + $reply = $vars->get('reply'); + $info = $GLOBALS['whups_driver']->getReply($reply); + + $this->addHidden('', 'type', 'int', true, true); + $this->addHidden('', 'reply', 'int', true, true); + $pname = &$this->addVariable(_("Form Reply Name"), 'reply_name', + 'text', true); + $pname->setDefault($info['reply_name']); + $ptext = &$this->addVariable(_("Form Reply Text"), 'reply_text', + 'longtext', true); + $ptext->setDefault($info['reply_text']); + + /* Perms link. */ + if (Horde_Auth::isAdmin('whups:admin', Horde_Perms::EDIT)) { + $permslink = array( + 'text' => _("Edit the permissions on this form reply"), + 'url' => Horde_Util::addParameter(Horde_Util::addParameter(Horde::url($GLOBALS['registry']->get('webroot', 'horde') . '/admin/perms/edit.php'), 'category', "whups:replies:$reply"), 'autocreate', '1')); + $this->addVariable('', 'link', 'link', false, true, null, + array($permslink)); + } + } + +} + +class DeleteReplyForm extends Horde_Form { + + function DeleteReplyForm(&$vars) + { + parent::Horde_Form($vars, _("Delete Form Reply Confirmation")); + + $reply = $vars->get('reply'); + $info = $GLOBALS['whups_driver']->getReply($reply); + + $this->addHidden('', 'type', 'int', true, true); + $this->addHidden('', 'reply', 'int', true, true); + $pname = &$this->addVariable(_("Form Reply Name"), 'reply_name', + 'text', false, true); + $pname->setDefault($info['reply_name']); + $ptext = &$this->addVariable(_("Form Reply Text"), + 'reply_text', 'text', false, + true); + $ptext->setDefault($info['reply_text']); + $this->addVariable(_("Really delete this form reply?"), 'yesno', 'enum', + true, false, null, + array(array(0 => _("No"), 1 => _("Yes")))); + } + +} diff --git a/whups/lib/Forms/Admin/State.php b/whups/lib/Forms/Admin/State.php new file mode 100644 index 000000000..ad0d4d461 --- /dev/null +++ b/whups/lib/Forms/Admin/State.php @@ -0,0 +1,125 @@ + + * @package Whups + */ + +class AddStateForm extends Horde_Form { + + function AddStateForm(&$vars) + { + parent::Horde_Form($vars, _("Add State")); + + $this->addHidden('', 'type', 'int', true, true); + $this->addVariable(_("State Name"), 'name', 'text', true); + $this->addVariable(_("State Description"), 'description', 'text', true); + $this->addVariable(_("State Category"), 'category', 'enum', false, false, null, array($GLOBALS['whups_driver']->getCategories())); + } + +} + +class EditStateStep1Form extends Horde_Form { + + function EditStateStep1Form(&$vars) + { + parent::Horde_Form($vars, _("Edit or Delete States")); + $this->setButtons(array(_("Edit State"), _("Delete State"))); + + $states = $GLOBALS['whups_driver']->getStates($vars->get('type')); + if ($states) { + $stype = 'enum'; + $type_params = array($states); + } else { + $stype = 'invalid'; + $type_params = array(_("There are no states to edit")); + } + + $this->addHidden('', 'type', 'int', true, true); + $this->addVariable(_("State Name"), 'state', $stype, false, false, null, $type_params); + } + +} + +class EditStateStep2Form extends Horde_Form { + + function EditStateStep2Form(&$vars) + { + parent::Horde_Form($vars, _("Edit State")); + + $state = $vars->get('state'); + $info = $GLOBALS['whups_driver']->getState($state); + + $this->addHidden('', 'type', 'int', true, true); + $this->addHidden('', 'state', 'int', true, true); + + $sname = &$this->addVariable(_("State Name"), 'name', 'text', true); + $sname->setDefault($info['name']); + + $sdesc = &$this->addVariable(_("State Description"), 'description', 'text', true); + $sdesc->setDefault($info['description']); + + $scat = &$this->addVariable(_("State Category"), 'category', 'enum', true, false, null, array($GLOBALS['whups_driver']->getCategories())); + $scat->setDefault($info['category']); + } + +} + +class DefaultStateForm extends Horde_Form { + + function DefaultStateForm(&$vars) + { + parent::Horde_Form($vars, _("Set Default State")); + + $this->setButtons(array(_("Set Default State"))); + + $states = $GLOBALS['whups_driver']->getStates( + $vars->get('type'), + array('unconfirmed', 'new', 'assigned')); + if ($states) { + $stype = 'enum'; + $type_params = array($states); + } else { + $stype = 'invalid'; + $type_params = array(_("There are no states to edit")); + } + + $this->addHidden('', 'type', 'int', true, true); + $var = &$this->addVariable(_("State Name"), 'state', $stype, false, + false, null, $type_params); + $var->setDefault($GLOBALS['whups_driver']->getDefaultState($vars->get('type'))); + } + +} + +class DeleteStateForm extends Horde_Form { + + function DeleteStateForm(&$vars) + { + parent::Horde_Form($vars, _("Delete State Confirmation")); + + $state = $vars->get('state'); + $info = $GLOBALS['whups_driver']->getState($state); + + $this->addHidden('', 'type', 'int', true, true); + $this->addHidden('', 'state', 'int', true, true); + + $sname = &$this->addVariable(_("State Name"), 'name', 'text', false, true); + $sname->setDefault($info['name']); + + $sdesc = &$this->addVariable(_("State Description"), 'description', 'text', false, true); + $sdesc->setDefault($info['description']); + + $yesno = array(array(0 => _("No"), 1 => _("Yes"))); + $this->addVariable(_("Really delete this state? This may cause data problems!"), 'yesno', 'enum', true, false, null, $yesno); + } + +} diff --git a/whups/lib/Forms/Admin/Type.php b/whups/lib/Forms/Admin/Type.php new file mode 100644 index 000000000..621f3b29e --- /dev/null +++ b/whups/lib/Forms/Admin/Type.php @@ -0,0 +1,207 @@ + + * @package Whups + */ + +class AddTypeStep1Form extends Horde_Form { + + function AddTypeStep1Form(&$vars) + { + parent::Horde_Form($vars, _("Add Type")); + $this->appendButtons(_("Add Type")); + $this->addVariable(_("Type Name"), 'name', 'text', true); + $this->addVariable(_("Type Description"), 'description', 'text', true); + } + +} + +class EditTypeStep1Form extends Horde_Form { + + function EditTypeStep1Form(&$vars) + { + global $whups_driver; + + parent::Horde_Form($vars, _("Edit or Delete Types")); + $this->setButtons(array(_("Edit Type"), + _("Clone Type"), + _("Delete Type"))); + + $types = $whups_driver->getAllTypes(); + if ($types) { + $ttype = 'enum'; + $type_params = array($types); + } else { + $ttype = 'invalid'; + $type_params = array(_("There are no types to edit")); + } + + $this->addVariable(_("Type Name"), 'type', $ttype, true, false, null, + $type_params); + } + +} + +class EditTypeStep2Form extends Horde_Form { + + function EditTypeStep2Form(&$vars) + { + global $whups_driver; + + $type = $vars->get('type'); + $info = $whups_driver->getType($type); + + parent::Horde_Form($vars, sprintf(_("Edit %s"), $info['name'])); + + $this->addHidden('', 'type', 'int', true, true); + + $tname = &$this->addVariable(_("Type Name"), 'name', 'text', true); + $tname->setDefault($info['name']); + + $tdesc = &$this->addVariable(_("Type Description"), 'description', + 'text', true); + $tdesc->setDefault($info['description']); + + /* States. */ + $states = $whups_driver->getStates($type); + $tstates = &$this->addVariable(_("States for this Type"), 'state', + 'set', false, true, null, + array($states)); + $tstates->setDefault(array_keys($states)); + $statelink = array( + array('text' => _("Edit States"), + 'url' => Horde::applicationUrl('admin/?formname=editstatestep1form&type=' . $type))); + if (!count($states)) { + $statelink[] = array( + 'text' => _("Create Default States"), + 'url' => Horde::applicationUrl('admin/?formname=createdefaultstates&type=' . $type)); + } + $this->addVariable('', 'link', 'link', false, true, null, + array($statelink)); + + /* Priorities. */ + $priorities = $whups_driver->getPriorities($type); + $tpriorities = &$this->addVariable(_("Priorities for this Type"), + 'priority', 'set', false, true, null, + array($priorities)); + $tpriorities->setDefault(array_keys($priorities)); + $prioritylink = array( + array('text' => _("Edit Priorities"), + 'url' => Horde::applicationUrl('admin/?formname=editprioritystep1form&type=' . $type))); + if (!count($priorities)) { + $prioritylink[] = array( + 'text' => _("Create Default Priorities"), + 'url' => Horde::applicationUrl('admin/?formname=createdefaultpriorities&type=' . $type)); + } + $this->addVariable('', 'link', 'link', false, true, null, + array($prioritylink)); + + /* Attributes. */ + $attributes = $whups_driver->getAttributesForType($type); + $params = array(); + foreach ($attributes as $key => $attribute) { + $params[$key] = $attribute['human_name']; + } + $tattributes = &$this->addVariable(_("Attributes for this Type"), + 'attribute', 'set', false, true, + null, array($params)); + $tattributes->setDefault(array_keys($attributes)); + $attributelink = array( + 'text' => _("Edit Attributes"), + 'url' => Horde::applicationUrl('admin/?formname=editattributedescstep1form&type=' . $type)); + $this->addVariable('', 'link', 'link', false, true, null, + array($attributelink)); + + /* Form replies. */ + $replies = $whups_driver->getReplies($type); + $params = array(); + foreach ($replies as $key => $reply) { + $params[$key] = $reply['reply_name']; + } + $treplies = &$this->addVariable(_("Form Replies for this Type"), + 'reply', 'set', false, true, null, + array($params)); + $treplies->setDefault(array_keys($replies)); + $replylink = array( + 'text' => _("Edit Form Replies"), + 'url' => Horde::applicationUrl('admin/?formname=editreplystep1form&type=' . $type)); + $this->addVariable('', 'link', 'link', false, true, null, + array($replylink)); + } + +} + +class DeleteTypeForm extends Horde_Form { + + function DeleteTypeForm(&$vars) + { + global $whups_driver; + + parent::Horde_Form($vars, _("Delete Type Confirmation")); + + $type = $vars->get('type'); + $info = $whups_driver->getType($type); + + $this->addHidden('', 'type', 'int', true, true); + + $tname = &$this->addVariable(_("Type Name"), 'name', 'text', false, + true); + $tname->setDefault($info['name']); + + $tdesc = &$this->addVariable(_("Type Description"), 'description', + 'text', false, true); + $tdesc->setDefault($info['description']); + + $states = $whups_driver->getStates($type); + $tstates = &$this->addVariable(_("States for this Type"), 'state', + 'set', false, true, null, + array($states)); + $tstates->setDefault(array_keys($states)); + + $priorities = $whups_driver->getPriorities($type); + $tpriorities = &$this->addVariable(_("Priorities for this Type"), + 'priority', 'set', false, true, null, + array($priorities)); + $tpriorities->setDefault(array_keys($priorities)); + + $yesno = array(array(0 => _("No"), 1 => _("Yes"))); + $this->addVariable( + _("Really delete this type? This may cause data problems!"), + 'yesno', 'enum', true, false, null, $yesno); + } + +} + +class CloneTypeForm extends Horde_Form { + + function CloneTypeForm(&$vars) + { + global $whups_driver; + + $type = $vars->get('type'); + $info = $whups_driver->getType($type); + parent::Horde_Form($vars, + sprintf(_("Make a clone of %s"), $info['name'])); + + $this->setButtons(_("Clone")); + $this->addHidden('', 'type', 'int', true, true); + + $tname = &$this->addVariable(_("Name of the cloned copy"), 'name', + 'text', true); + $tname->setDefault(sprintf(_("Copy of %s"), $info['name'])); + + $tdesc = &$this->addVariable(_("Clone Description"), 'description', + 'text', true); + $tdesc->setDefault($info['description']); + } + +} diff --git a/whups/lib/Forms/Admin/User.php b/whups/lib/Forms/Admin/User.php new file mode 100644 index 000000000..a56c6abcb --- /dev/null +++ b/whups/lib/Forms/Admin/User.php @@ -0,0 +1,82 @@ + + * @package Whups + */ + +class AddUserForm extends Horde_Form { + + function AddUserForm(&$vars) + { + parent::Horde_Form($vars, _("Add Users")); + + $this->addHidden('', 'queue', 'int', true, true); + + global $conf, $whups_driver; + + $auth = Horde_Auth::singleton($conf['auth']['driver']); + if ($auth->hasCapability('list')) { + $queue = $vars->get('queue'); + $current = $whups_driver->getQueueUsers($queue); + + $list = $auth->listUsers(); + if (is_a($list, 'PEAR_Error')) { + $this->addVariable(_("User"), 'user', 'invalid', true, false, null, + array(sprintf(_("There was an error listing users: %s; %s"), $list->getMessage(), $list->getUserInfo()))); + } else { + sort($list); + $users = array(); + foreach ($list as $user) { + if (!isset($current[$user])) { + $users[$user] = Horde_Auth::removeHook($user); + } + } + $this->addVariable(_("User"), 'user', 'multienum', true, false, null, array($users)); + } + } else { + $this->addVariable(_("User"), 'user', 'text', true); + } + } + +} + +class EditUserStep1Form extends Horde_Form { + + function EditUserStep1Form(&$vars) + { + global $whups_driver; + + $this->appendButtons(_("Remove User")); + + parent::Horde_Form($vars, _("Responsible Users")); + + $queue = $vars->get('queue'); + $users = $whups_driver->getQueueUsers($queue); + $f_users = array(); + foreach ($users as $user) { + $f_users[$user] = Whups::formatUser($user); + } + if ($f_users) { + asort($f_users); + $usertype = 'enum'; + $type_params = array($f_users); + } else { + $usertype = 'invalid'; + $type_params = array(_("There are no users responsible for this queue.")); + } + + $this->addHidden('', 'queue', 'int', true, true); + $this->addVariable(_("Users responsible for this queue"), 'user', $usertype, true, false, null, $type_params); + } + +} diff --git a/whups/lib/Forms/Admin/Version.php b/whups/lib/Forms/Admin/Version.php new file mode 100644 index 000000000..87b4e0468 --- /dev/null +++ b/whups/lib/Forms/Admin/Version.php @@ -0,0 +1,104 @@ + + * @package Whups + */ + +class AddVersionForm extends Horde_Form { + + function AddVersionForm(&$vars) + { + parent::Horde_Form($vars, _("Add Version")); + + $this->addHidden('', 'queue', 'int', true, true); + $this->addVariable(_("Version Name"), 'name', 'text', true); + $this->addVariable(_("Version Description"), 'description', 'text', true); + $vactive = &$this->addVariable(_("Version Active?"), 'active', 'boolean', false); + $vactive->setDefault(true); + } + +} + +class EditVersionStep1Form extends Horde_Form { + + function EditVersionStep1Form(&$vars) + { + global $whups_driver; + + parent::Horde_Form($vars, _("Edit or Delete Versions")); + $this->setButtons(array(_("Edit Version"), _("Delete Version"))); + + $versions = $whups_driver->getVersions($vars->get('queue'), true); + if ($versions) { + $vtype = 'enum'; + $type_params = array($versions); + } else { + $vtype = 'invalid'; + $type_params = array(_("There are no versions to edit")); + } + + $this->addHidden('', 'queue', 'int', true, true); + $this->addVariable(_("Version Name"), 'version', $vtype, true, false, null, $type_params); + } + +} + +class EditVersionStep2Form extends Horde_Form { + + function EditVersionStep2Form(&$vars) + { + global $whups_driver; + + parent::Horde_Form($vars, _("Edit Version")); + + $version = $vars->get('version'); + $info = $whups_driver->getVersion($version); + + $this->addHidden('', 'queue', 'int', true, true); + $this->addHidden('', 'version', 'int', true, true); + + $vname = &$this->addVariable(_("Version Name"), 'name', 'text', true); + $vname->setDefault($info['name']); + + $vdesc = &$this->addVariable(_("Version Description"), 'description', 'text', true); + $vdesc->setDefault($info['description']); + $vactive = &$this->addVariable(_("Version Active?"), 'active', 'boolean', false); + $vactive->setDefault($info['active']); + } + +} + +class DeleteVersionForm extends Horde_Form { + + function DeleteVersionForm(&$vars) + { + global $whups_driver; + + parent::Horde_Form($vars, _("Delete Version Confirmation")); + + $version = $vars->get('version'); + $info = $whups_driver->getVersion($version); + + $this->addHidden('', 'queue', 'int', true, true); + $this->addHidden('', 'version', 'int', true, true); + + $vname = &$this->addVariable(_("Version Name"), 'name', 'text', false, true); + $vname->setDefault($info['name']); + + $vdesc = &$this->addVariable(_("Version Description"), 'description', 'text', false, true); + $vdesc->setDefault($info['description']); + + $yesno = array(array(0 => _("No"), 1 => _("Yes"))); + $this->addVariable(_("Really delete this version? This may cause data problems!"), 'yesno', 'enum', true, false, null, $yesno); + } + +} diff --git a/whups/lib/Forms/CreateTicket.php b/whups/lib/Forms/CreateTicket.php new file mode 100644 index 000000000..e2ae1ae79 --- /dev/null +++ b/whups/lib/Forms/CreateTicket.php @@ -0,0 +1,266 @@ + + * Copyright 2001-2009 The Horde Project (http://www.horde.org/) + * + * See the enclosed file LICENSE for license information (BSD). If you + * did not receive this file, see http://www.horde.org/licenses/bsdl.php. + * + * @author Robert E. Coyle + * @package Whups + */ + +/** + * @package Whups + */ +class CreateStep1Form extends Horde_Form { + + var $_useFormToken = false; + + function CreateStep1Form(&$vars) + { + global $whups_driver; + + parent::Horde_Form($vars, _("Create Ticket - Step 1")); + + $queues = Whups::permissionsFilter($whups_driver->getQueues(), 'queue', + Horde_Perms::EDIT); + if (!$queues) { + $this->addVariable( + _("Queue Name"), 'queue', 'invalid', true, false, null, + array(_("There are no queues which you can create tickets in."))); + } else { + foreach (array_keys($queues) as $queue_id) { + $info = $whups_driver->getQueue($queue_id); + if (!empty($info['description'])) { + $queues[$queue_id] .= ' [' . $info['description'] . ']'; + } + } + + // Auto-select the only queue if only one option is available + if (count($queues) == 1) { + $vars->set('queue', array_pop(array_keys($queues))); + } + + require_once 'Horde/Form/Action.php'; + $queues = &$this->addVariable(_("Queue Name"), 'queue', 'enum', + true, false, null, + array($queues, _("Choose:"))); + $queues->setAction(Horde_Form_Action::factory('submit')); + } + } + +} + +/** + * @package Whups + */ +class CreateStep2Form extends Horde_Form { + + var $_useFormToken = false; + + function CreateStep2Form(&$vars) + { + global $whups_driver; + + parent::Horde_Form($vars, _("Create Ticket - Step 2")); + + $types = $whups_driver->getTypes($vars->get('queue')); + $info = $whups_driver->getQueue($vars->get('queue')); + $type = $whups_driver->getDefaultType($vars->get('queue')); + if (count($types) == 0) { + $typetype = 'invalid'; + $type_params = array(_("There are no ticket types associated with this queue; until there are, you cannot create any tickets in this queue.")); + } else { + $typetype = 'enum'; + $type_params = array($types); + if (empty($type) || !isset($types[$type])) { + $type_params[] = _("Choose:"); + } + } + $types = &$this->addVariable(_("Ticket Type"), 'type', $typetype, true, + false, null, $type_params); + $types->setDefault($type); + + if (!empty($info['versioned'])) { + $versions = $whups_driver->getVersions($vars->get('queue')); + if (count($versions) == 0) { + $vtype = 'invalid'; + $v_params = array(_("This queue requires that you specify a version, but there are no versions associated with it. Until versions are created for this queue, you will not be able to create tickets.")); + } else { + $vtype = 'enum'; + $v_params = array($versions); + } + $this->addVariable(_("Queue Version"), 'version', $vtype, true, + false, null, $v_params); + } else { + require_once 'Horde/Form/Action.php'; + $types->setAction(Horde_Form_Action::factory('submit')); + } + } + +} + +/** + * @package Whups + */ +class CreateStep3Form extends Horde_Form { + + function CreateStep3Form(&$vars) + { + global $whups_driver, $conf; + + parent::Horde_Form($vars, _("Create Ticket - Step 3")); + + $states = $whups_driver->getStates($vars->get('type'), 'unconfirmed'); + $attributes = $whups_driver->getAttributesForType($vars->get('type')); + + $queue = $vars->get('queue'); + $info = $whups_driver->getQueue($queue); + + if (Horde_Auth::getAuth()) { + $states2 = $whups_driver->getStates($vars->get('type'), + array('new', 'assigned')); + if (is_array($states2)) { + $states = $states + $states2; + } + } + + if (Whups::hasPermission($queue, 'queue', 'requester')) { + $this->addVariable(_("The Requester's Email Address"), 'user_email', + 'whups_email', false); + } elseif (!Horde_Auth::getAuth()) { + $this->addVariable(_("Your Email Address"), 'user_email', 'email', + true); + if (!empty($conf['guests']['captcha'])) { + $this->addVariable( + _("Spam protection"), 'captcha', 'figlet', true, null, null, + array(Whups::getCAPTCHA(!$this->isSubmitted()), + $conf['guests']['figlet_font'])); + } + } + + // Silently default the state if there is only one choice + if (count($states) == 1) { + $vars->set('state', reset(array_keys($states))); + $f_state = &$this->addHidden(_("Ticket State"), 'state', 'enum', + true, false, null, array($states)); + } else { + $f_state = &$this->addVariable(_("Ticket State"), 'state', 'enum', + true, false, null, array($states)); + $f_state->setDefault( + $whups_driver->getDefaultState($vars->get('type'))); + } + + $f_priority = &$this->addVariable( + _("Priority"), 'priority', 'enum', true, false, null, + array($whups_driver->getPriorities($vars->get('type')))); + $f_priority->setDefault( + $whups_driver->getDefaultPriority($vars->get('type'))); + $this->addVariable(_("Due Date"), 'due', 'datetime', false, false); + $this->addVariable(_("Summary"), 'summary', 'text', true, false); + $this->addVariable(_("Attachment"), 'newattachment', 'file', false); + $this->addVariable(_("Description"), 'comment', 'longtext', true); + foreach ($attributes as $attribute_id => $attribute_value) { + $this->addVariable($attribute_value['human_name'], + 'attributes[' . $attribute_id . ']', + $attribute_value['type'], + $attribute_value['required'], + $attribute_value['readonly'], + $attribute_value['desc'], + $attribute_value['params']); + } + } + + function validate(&$vars, $canAutoFill = false) + { + global $conf; + + if (!parent::validate($vars, $canAutoFill)) { + if (!Horde_Auth::getAuth() && !empty($conf['guests']['captcha'])) { + $vars->remove('captcha'); + $this->removeVariable($varname = 'captcha'); + $this->insertVariableBefore( + 'state', _("Spam protection"), 'captcha', 'figlet', true, + null, null, + array(Whups::getCAPTCHA(true), + $conf['guests']['figlet_font'])); + } + return false; + } + + return true; + } + +} + +/** + * @package Whups + */ +class CreateStep4Form extends Horde_Form { + + function CreateStep4Form(&$vars) + { + global $whups_driver, $conf; + + parent::Horde_Form($vars, _("Create Ticket - Step 4")); + + /* Preserve previously uploaded attachments. */ + $this->addHidden('', 'deferred_attachment', 'text', false); + + /* Groups. */ + $groups = &Group::singleton(); + if ($conf['prefs']['assign_all_groups']) { + $mygroups = $groups->listGroups(); + } else { + $mygroups = $groups->getGroupMemberships(Horde_Auth::getAuth()); + } + + $users = $whups_driver->getQueueUsers($vars->get('queue')); + $f_users = array(); + foreach ($users as $user) { + $f_users['user:' . $user] = Whups::formatUser($user); + } + + $f_groups = array(); + if (count($mygroups)) { + foreach ($mygroups as $id => $group) { + $f_groups['group:' . $id] = $group; + } + } + + if (count($f_users)) { + asort($f_users); + $owners = &$this->addVariable(_("Owners"), 'owners', 'multienum', + false, false, null, array($f_users)); + $owners->setDefault($whups_driver->getOwners($vars->get('id'))); + } + + if (count($f_groups)) { + asort($f_groups); + $group_owners = &$this->addVariable(_("Group Owners"), + 'group_owners', 'multienum', + false, false, null, + array($f_groups)); + $group_owners->setDefault( + $whups_driver->getOwners($vars->get('id'))); + } + + if (!count($f_users) && !count($f_groups)) { + $owner_params = array( + _("There are no users to which this ticket can be assigned.")); + $this->addVariable(_("Owners"), 'owners', 'invalid', false, false, + null, $owner_params); + } + } + +} + +/** + * @package Horde_Form + */ +class Horde_Form_Type_whups_email extends Horde_Form_Type_email {} diff --git a/whups/lib/Forms/EditTicket.php b/whups/lib/Forms/EditTicket.php new file mode 100644 index 000000000..6785c506c --- /dev/null +++ b/whups/lib/Forms/EditTicket.php @@ -0,0 +1,221 @@ + + * @package Whups + */ +class EditTicketForm extends Horde_Form { + + function EditTicketForm(&$vars, &$ticket, $title = '') + { + global $whups_driver; + + parent::Horde_Form($vars, $title); + $type = $vars->get('type'); + + $start_year = date('Y'); + if (is_numeric($d = $vars->get('due'))) { + $start_year = min($start_year, date('Y', $d)); + } + + $fields = array('summary'); + + $qinfo = $whups_driver->getQueue($vars->get('queue')); + if (!empty($qinfo['versioned'])) { + $fields[] = 'version'; + } + + $fields = array_merge($fields, array('state', 'priority', 'due')); + + $attributes = $ticket->addAttributes(); + if (is_a($attributes, 'PEAR_Error')) { + $attributes = array(); + } + foreach ($attributes as $attribute) { + $fields[] = 'attribute_' . $attribute['id']; + } + $fields = array_merge($fields, array('owner', 'attachments', 'comment')); + + $grouped_fields = array($fields); + $grouped_hook = false; + try { + $grouped_fields = Horde::callHook('group_fields', + array($ticket->get('type'), $fields), + 'whups'); + $grouped_hook = true; + } catch (Horde_Exception_HookNotSet $e) { + } catch (Horde_Exception $e) { + Horde::logMessage($e, __FILE__, __LINE__, PEAR_LOG_ERR); + } + + $this->addHidden('', 'id', 'int', true, true); + $this->addHidden('', 'type', 'int', true, true); + + foreach ($grouped_fields as $header => $fields) { + if ($grouped_hook) { + $this->addVariable($header, null, 'header', false); + } + foreach ($fields as $field) { + switch ($field) { + case 'summary': + $this->addVariable(_("Summary"), 'summary', 'text', true); + break; + + case 'version': + $versions = $whups_driver->getVersions($vars->get('queue')); + if (count($versions) == 0) { + $vtype = 'invalid'; + $v_params = array(_("This queue requires that you specify a version, but there are no versions associated with it. Until versions are created for this queue, you will not be able to create tickets.")); + } else { + $vtype = 'enum'; + $v_params = array($versions); + } + $this->addVariable(_("Queue Version"), 'version', $vtype, true, false, null, $v_params); + break; + + case 'state': + $this->addVariable(_("State"), 'state', 'enum', true, + false, null, + array($whups_driver->getStates($type))); + break; + + case 'priority': + $this->addVariable(_("Priority"), 'priority', 'enum', true, + false, null, + array($whups_driver->getPriorities($type))); + break; + + case 'due': + $this->addVariable(_("Due Date"), 'due', 'datetime', false, + false, null, + array($start_year)); + break; + + case 'owner': + if (Whups::hasPermission($vars->get('queue'), 'queue', + 'assign')) { + $groups = &Group::singleton(); + if ($GLOBALS['conf']['prefs']['assign_all_groups']) { + $mygroups = $groups->listGroups(); + } else { + $mygroups = $groups->getGroupMemberships(Horde_Auth::getAuth()); + } + + $f_users = array(); + $users = $whups_driver->getQueueUsers($vars->get('queue')); + foreach ($users as $user) { + $f_users['user:' . $user] = Whups::formatUser($user); + } + + $f_groups = array(); + if ($mygroups) { + foreach (array_keys($mygroups) as $id) { + $f_groups['group:' . $id] = $groups->getGroupName($id); + } + } + + if (count($f_users)) { + asort($f_users); + $owners = &$this->addVariable(_("Owners"), + 'owners', + 'multienum', + false, false, null, + array($f_users)); + $owners->setDefault($whups_driver->getOwners($vars->get('id'))); + } + + if (count($f_groups)) { + asort($f_groups); + $group_owners = &$this->addVariable(_("Group Owners"), + 'group_owners', + 'multienum', + false, false, + null, + array($f_groups)); + $group_owners->setDefault($whups_driver->getOwners($vars->get('id'))); + } + } + break; + + case 'attachments': + $this->addVariable(_("Attachment"), 'newattachment', + 'file', false); + break; + + case 'comment': + $cvar = &$this->addVariable(_("Comment"), 'newcomment', + 'longtext', false); + + /* Form replies. */ + $replies = Whups::permissionsFilter( + $whups_driver->getReplies($type), 'reply'); + if (count($replies) && !is_a($replies, 'PEAR_Error')) { + require_once 'Horde/Form/Action.php'; + $params = array(); + foreach ($replies as $key => $reply) { + $params[$key] = $reply['reply_name']; + } + $rvar = &$this->addVariable(_("Form Reply:"), 'reply', + 'enum', false, false, null, + array($params, true)); + $rvar->setAction(Horde_Form_Action::factory('reload')); + if ($vars->get('reply')) { + $reply = $vars->get('newcomment'); + if (strlen($reply)) { + $reply .= "\n\n"; + } + $reply .= $replies[$vars->get('reply')]['reply_text']; + $vars->set('newcomment', $reply); + $vars->remove('reply'); + } + } + + /* Comment permissions. */ + $groups = &Group::singleton(); + $mygroups = $groups->getGroupMemberships(Horde_Auth::getAuth()); + if ($mygroups) { + foreach (array_keys($mygroups) as $gid) { + $grouplist[$gid] = $groups->getGroupName($gid, true); + } + asort($grouplist); + $grouplist = array(0 => _("This comment is visible to everyone")) + $grouplist; + $this->addVariable(_("Make this comment visible only to members of a group?"), 'group', + 'enum', false, false, null, + array($grouplist)); + } + break; + + default: + /* Ticket attributes. */ + if ($ticket && + substr($field, 0, 10) == 'attribute_' && + isset($attributes[substr($field, 10)])) { + $attribute = $attributes[substr($field, 10)]; + $var = &$this->addVariable( + $attribute['human_name'], + 'attribute_' . $attribute['id'], + $attribute['type'], + $attribute['required'], + $attribute['readonly'], + $attribute['desc'], + $attribute['params']); + $var->setDefault($attribute['value']); + } + } + } + } + } + + function validate(&$vars) + { + if (!Horde_Auth::getAuth()) { + $this->setError('_auth', _("Permission Denied.")); + } + + return parent::validate($vars); + } + +} diff --git a/whups/lib/Forms/Query.php b/whups/lib/Forms/Query.php new file mode 100644 index 000000000..5102cb364 --- /dev/null +++ b/whups/lib/Forms/Query.php @@ -0,0 +1,476 @@ + + * Copyright 2001-2009 The Horde Project (http://www.horde.org/) + * + * See the enclosed file LICENSE for license information (BSD). If you + * did not receive this file, see http://www.horde.org/licenses/bsdl.php. + * + * @author Robert E. Coyle + * @author Jan Schneider + * @package Whups + */ +class InsertBranchForm extends Horde_Form { + + function InsertBranchForm(&$vars) + { + parent::Horde_Form($vars, _("Insert Branch")); + + $branchtypes = array( + QUERY_TYPE_AND => _("And"), + QUERY_TYPE_OR => _("Or"), + QUERY_TYPE_NOT => _("Not")); + + $this->addHidden(null, 'path', 'text', false, true); + $this->addVariable(_("Branch Type"), 'type', 'enum', true, false, null, array($branchtypes)); + } + +} + +/** + * @package Whups + */ +class UserCriterionForm extends Horde_Form { + + function UserCriterionForm(&$vars) + { + parent::Horde_Form($vars, $vars->get('edit') ? _("Edit User Criterion") : _("Add User Criterion")); + + $this->addHidden('', 'edit', 'boolean', false); + $this->addVariable(_("User ID"), 'user', 'text', true); + $this->addVariable(_("Match Operator"), 'operator', 'enum', true, false, null, array(Whups_Query::textOperators())); + $this->addVariable(_("Search Owners"), 'owners', 'boolean', false); + $this->addVariable(_("Search Requester"), 'requester', 'boolean', false); + $this->addVariable(_("Search Comments"), 'comments', 'boolean', false); + } + + function execute(&$vars) + { + $path = $vars->get('path'); + $user = $vars->get('user'); + $operator = $vars->get('operator'); + $owners = $vars->get('owners'); + $requester = $vars->get('requester'); + $comments = $vars->get('comments'); + + // If we're adding more than one criterion, put them all under an OR + // node (which should be what is wanted in the general case). + if ((bool)$owners + (bool)$requester + (bool)$comments > 1) { + $path = $GLOBALS['whups_query']->insertBranch($path, QUERY_TYPE_OR); + } + + if ($owners) { + $GLOBALS['whups_query']->insertCriterion($path, CRITERION_OWNERS, null, $operator, $user); + } + + if ($requester) { + $GLOBALS['whups_query']->insertCriterion($path, CRITERION_REQUESTER, null, $operator, $user); + } + + if ($comments) { + $GLOBALS['whups_query']->insertCriterion($path, CRITERION_ADDED_COMMENT, null, $operator, $user); + } + + $this->unsetVars($vars); + } + +} + +/** + * @package Whups + */ +class GroupCriterionForm extends Horde_Form { + + function GroupCriterionForm(&$vars) + { + parent::Horde_Form($vars, $vars->get('edit') ? _("Edit Group Criterion") : _("Add Group Criterion")); + + $this->addHidden('', 'edit', 'boolean', false); + + $groups = &Group::singleton(); + $grouplist = $groups->listGroups(); + if (is_a($grouplist, 'PEAR_Error') || !count($grouplist)) { + $type_params = array(_("Could not find any groups.")); + $this->addVariable(_("Groups"), 'groups', 'invalid', false, false, null, $type_params); + } else { + $this->addVariable(_("Groups"), 'groups', 'enum', true, false, null, array($grouplist)); + } + } + + function execute(&$vars) + { + $path = $vars->get('path'); + $groups = $vars->get('groups'); + + if ($groups) { + $GLOBALS['whups_query']->insertCriterion($path, CRITERION_GROUPS, null, OPERATOR_EQUAL, $groups); + } + + $this->unsetVars($vars); + } + +} + +/** + * @package Whups + */ +class TextCriterionForm extends Horde_Form { + + function TextCriterionForm(&$vars) + { + parent::Horde_Form($vars, $vars->get('edit') ? _("Edit Text Criterion") : _("Add Text Criterion")); + + $this->addHidden('', 'edit', 'boolean', false); + $this->addVariable(_("Text"), 'text', 'text', true); + $this->addVariable(_("Match Operator"), 'operator', 'enum', true, false, null, array(Whups_Query::textOperators())); + $this->addVariable(_("Search Summary"), 'summary', 'boolean', false); + $this->addVariable(_("Search Comments"), 'comments', 'boolean', false); + } + + function execute(&$vars) + { + $path = $vars->get('path'); + $text = $vars->get('text'); + $operator = $vars->get('operator'); + $summary = $vars->get('summary'); + $comments = $vars->get('comments'); + + if ($summary && $comments) { + $path = $GLOBALS['whups_query']->insertBranch($path, QUERY_TYPE_OR); + } + + if ($summary) { + $GLOBALS['whups_query']->insertCriterion($path, CRITERION_SUMMARY, null, $operator, $text); + } + + if ($comments) { + $GLOBALS['whups_query']->insertCriterion($path, CRITERION_COMMENT, null, $operator, $text); + } + + $this->unsetVars($vars); + } + +} + +/** + * @package Whups + */ +class PropertyCriterionForm extends Horde_Form { + + function PropertyCriterionForm(&$vars) + { + global $whups_driver; + + parent::Horde_Form($vars, $vars->get('edit') ? _("Edit Property Criterion") : _("Add Property Criterion")); + + $this->addHidden('', 'edit', 'boolean', false); + $this->addVariable(_("Id"), 'id', 'intlist', false); + + /* Types. */ + $this->addVariable(_("Type"), 'ttype', 'enum', false, false, null, + array($whups_driver->getAllTypes(), _("Any"))); + + + /* Queues. */ + $queues = Whups::permissionsFilter($whups_driver->getQueues(), 'queue', Horde_Perms::READ); + if (count($queues)) { + $v = &$this->addVariable(_("Queue"), 'queue', 'enum', false, false, + null, array($queues, _("Any"))); + $v->setAction(Horde_Form_Action::factory('reload')); + if ($vars->get('queue')) { + $this->addVariable(_("Version"), 'version', 'enum', false, + false, null, + array($whups_driver->getVersions($vars->get('queue')), _("Any"))); + } + } + + /* States. */ + $states = $whups_driver->getStates(); + $this->addVariable(_("State"), 'state', 'enum', false, false, null, + array($states, _("Any"))); + + /* Priorities. */ + $priorities = $whups_driver->getPriorities(); + $this->addVariable(_("Priority"), 'priority', 'enum', false, false, + null, array($priorities, _("Any"))); + } + + function execute(&$vars) + { + $path = $vars->get('path'); + + $id = $vars->get('id'); + if (strlen(trim($id))) { + $newpath = $path; + $ids = split("[\\t\\n ,]+", $id); + + if (count($ids) > 1) { + $newpath = $GLOBALS['whups_query']->insertBranch($path, QUERY_TYPE_OR); + } + + foreach ($ids as $id) { + $GLOBALS['whups_query']->insertCriterion($newpath, CRITERION_ID, null, OPERATOR_EQUAL, $id); + } + } + + $queue = $vars->get('queue'); + if ($queue) { + $version = $vars->get('version'); + if ($version) { + $path = $GLOBALS['whups_query']->insertBranch($path, QUERY_TYPE_AND); + } + $GLOBALS['whups_query']->insertCriterion($path, CRITERION_QUEUE, null, OPERATOR_EQUAL, $queue); + if ($version) { + $GLOBALS['whups_query']->insertCriterion($path, CRITERION_VERSION, null, OPERATOR_EQUAL, $version); + } + } + + $type = $vars->get('ttype'); + if ($type) { + $GLOBALS['whups_query']->insertCriterion($path, CRITERION_TYPE, null, OPERATOR_EQUAL, $type); + } + + $state = $vars->get('state'); + if ($state) { + $GLOBALS['whups_query']->insertCriterion($path, CRITERION_STATE, null, OPERATOR_EQUAL, $state); + } + + $priority = $vars->get('priority'); + if ($priority) { + $GLOBALS['whups_query']->insertCriterion($path, CRITERION_PRIORITY, null, OPERATOR_EQUAL, $priority); + } + + $this->unsetVars($vars); + } + +} + +/** + * @package Whups + */ +class AttributeCriterionForm extends Horde_Form { + + /** + * List of all available attributes. + */ + var $attribs = array(); + + function AttributeCriterionForm(&$vars) + { + global $whups_driver; + + parent::Horde_Form($vars, $vars->get('edit') ? _("Edit Attribute Criterion") : _("Add Attribute Criterion")); + + $this->addHidden('', 'edit', 'boolean', false); + + $this->attribs = $whups_driver->getAttributesForType(); + if (is_a($this->attribs, 'PEAR_Error')) { + $this->addVariable(_("Search Attribute"), 'attribute', 'invalid', true, false, null, array($this->attribs->getMessage())); + } elseif ($this->attribs) { + $this->addVariable(_("Match"), 'text', 'text', true); + $this->addVariable(_("Match Operator"), 'operator', 'enum', true, false, null, array(Whups_Query::textOperators())); + + foreach ($this->attribs as $id => $attribute) { + $this->addVariable(sprintf(_("Search %s Attribute"), $attribute['human_name']), "a$id", 'boolean', false); + } + } else { + $this->addVariable(_("Search Attribute"), 'attribute', 'invalid', true, false, null, array(_("There are no attributes defined."))); + } + } + + function execute(&$vars) + { + $path = $vars->get('path'); + $text = $vars->get('text'); + $operator = $vars->get('operator'); + + $count = 0; + + $keys = array_keys($this->attribs); + foreach ($keys as $id) { + $count += $vars->exists("a$id") ? 1 : 0; + } + + if ($count > 1) { + $path = $GLOBALS['whups_query']->insertBranch($path, QUERY_TYPE_OR); + } + + foreach ($keys as $id) { + if ($vars->get("a$id")) { + $GLOBALS['whups_query']->insertCriterion($path, CRITERION_ATTRIBUTE, $id, $operator, $text); + } + } + + $this->unsetVars($vars); + } + +} + +/** + * @package Whups + */ +class DateCriterionForm extends Horde_Form { + + function DateCriterionForm(&$vars) + { + parent::Horde_Form($vars, $vars->get('edit') ? _("Edit Date Criterion") : _("Add Date Criterion")); + + $this->addHidden('', 'edit', 'boolean', false); + + $this->addVariable(_("Created from"), 'ticket_timestamp[from]', 'monthdayyear', false, false, null, array(date('Y') - 10)); + $this->addVariable(_("Created to"), 'ticket_timestamp[to]', 'monthdayyear', false, false, null, array(date('Y') - 10)); + + $this->addVariable(_("Updated from"), 'date_updated[from]', 'monthdayyear', false, false, null, array(date('Y') - 10)); + $this->addVariable(_("Updated to"), 'date_updated[to]', 'monthdayyear', false, false, null, array(date('Y') - 10)); + + $this->addVariable(_("Resolved from"), 'date_resolved[from]', 'monthdayyear', false, false, null, array(date('Y') - 10)); + $this->addVariable(_("Resolved to"), 'date_resolved[to]', 'monthdayyear', false, false, null, array(date('Y') - 10)); + + $this->addVariable(_("Assigned from"), 'date_assigned[from]', 'monthdayyear', false, false, null, array(date('Y') - 10)); + $this->addVariable(_("Assigned to"), 'date_assigned[to]', 'monthdayyear', false, false, null, array(date('Y') - 10)); + + $this->addVariable(_("Due from"), 'ticket_due[from]', 'monthdayyear', false, false, null, array(date('Y') - 10)); + $this->addVariable(_("Due to"), 'ticket_due[to]', 'monthdayyear', false, false, null, array(date('Y') - 10)); + } + + function execute(&$vars) + { + $path = $vars->get('path'); + $parent = false; + + $keys = array(CRITERION_TIMESTAMP => 'ticket_timestamp', + CRITERION_UPDATED => 'date_updated', + CRITERION_RESOLVED => 'date_resolved', + CRITERION_ASSIGNED => 'date_assigned', + CRITERION_DUE => 'ticket_due'); + + foreach ($keys as $key_id => $key_name) { + $date = $vars->get($key_name . '[from]'); + if (!empty($date['month'])) { + if (!$parent) { + $path = $GLOBALS['whups_query']->insertBranch($path, QUERY_TYPE_AND); + $parent = true; + } + $date = mktime(0, 0, 0, $date['month'], $date['day'], $date['year']); + $GLOBALS['whups_query']->insertCriterion($path, $key_id, null, OPERATOR_GREATER, $date); + } + $date = $vars->get($key_name . '[to]'); + if (!empty($date['month'])) { + if (!$parent) { + $path = $GLOBALS['whups_query']->insertBranch($path, QUERY_TYPE_AND); + $parent = true; + } + $date = mktime(0, 0, 0, $date['month'], $date['day'], $date['year']); + $GLOBALS['whups_query']->insertCriterion($path, $key_id, null, OPERATOR_LESS, $date); + } + } + + $this->unsetVars($vars); + } + +} + +/** + * @package Whups + */ +class ChooseQueryNameForSaveForm extends Horde_Form { + + function ChooseQueryNameForSaveForm(&$vars) + { + parent::Horde_Form($vars, _("Save Query")); + $this->setButtons(_("Save")); + + $v = &$this->addVariable(_("Query Name"), 'name', 'text', true); + $v->setDefault($GLOBALS['whups_query']->name); + $v = &$this->addVariable(_("Query Slug"), 'slug', 'text', false); + $v->setDefault($GLOBALS['whups_query']->slug); + } + + function execute(&$vars) + { + $GLOBALS['whups_query']->name = $vars->get('name'); + $GLOBALS['whups_query']->slug = $vars->get('slug'); + $result = $GLOBALS['whups_query']->save(); + + $this->unsetVars($vars); + } + +} + +/** + * @package Whups + */ +class ChooseQueryNameForLoadForm extends Horde_Form { + + function ChooseQueryNameForLoadForm(&$vars) + { + parent::Horde_Form($vars, _("Load Query")); + + $qManager = new Whups_QueryManager(); + $qParams = $qManager->listQueries(Horde_Auth::getAuth()); + if (count($qParams)) { + $qType = 'enum'; + } else { + $qType = 'invalid'; + $qParams = _("You have no saved queries."); + } + + $this->addVariable(_("Name"), 'name', $qType, true, false, null, array($qParams)); + } + + function execute(&$vars) + { + $qManager = new Whups_QueryManager(); + $query = $qManager->getQuery($vars->get('name')); + if (is_a($query, 'PEAR_Error')) { + $GLOBALS['notification']->push(sprintf(_("The query couldn't be loaded:"), $query->getMessage()), 'horde.error'); + } else { + $GLOBALS['whups_query'] = $query; + } + + $this->unsetVars($vars); + } + +} + +/** + * @package Whups + */ +class DeleteQueryForm extends Horde_Form { + + function DeleteQueryForm(&$vars) + { + parent::Horde_Form($vars, _("Delete Query?")); + + $yesno = array(array(0 => _("No"), 1 => _("Yes"))); + $this->addVariable(_("Really delete this query? This operation is not undoable."), 'yesno', 'enum', true, false, null, $yesno); + } + + function execute(&$vars) + { + global $notification; + + if ($vars->get('yesno')) { + if (!$GLOBALS['whups_query']->hasPermission(Horde_Auth::getAuth(), Horde_Perms::DELETE)) { + $notifications->push(sprintf(_("Permission denied.")), 'horde.error'); + } else { + $result = $GLOBALS['whups_query']->delete(); + if (is_a($result, 'PEAR_Error')) { + $notification->push(sprintf(_("The query \"%s\" couldn't be deleted: %s"), $GLOBALS['whups_query']->name, $result->getMessage()), 'horde.error'); + } else { + $notification->push(sprintf(_("The query \"%s\" has been deleted."), $GLOBALS['whups_query']->name), 'horde.success'); + $qManager = new Whups_QueryManager(); + unset($GLOBALS['whups_query']); + $GLOBALS['whups_query'] = $qManager->newQuery(); + } + } + } + + $this->unsetVars($vars); + } + +} diff --git a/whups/lib/Forms/QueryParameterForm.php b/whups/lib/Forms/QueryParameterForm.php new file mode 100644 index 000000000..dd3703f17 --- /dev/null +++ b/whups/lib/Forms/QueryParameterForm.php @@ -0,0 +1,26 @@ +parameters as $name) { + $this->addVariable($name, $name, 'text', true); + } + } + +} diff --git a/whups/lib/Forms/Search.php b/whups/lib/Forms/Search.php new file mode 100644 index 000000000..65a5ddd0b --- /dev/null +++ b/whups/lib/Forms/Search.php @@ -0,0 +1,101 @@ + + * @package Whups + */ +class SearchForm extends Horde_Form { + + var $_useFormToken = false; + + function SearchForm(&$vars) + { + parent::Horde_Form($vars); + + $this->setButtons(true); + $this->appendButtons(_("Save as Query")); + $this->setSection('attributes', _("Attributes")); + + $queues = Whups::permissionsFilter($GLOBALS['whups_driver']->getQueues(), 'queue', Horde_Perms::READ); + $queue_count = count($queues); + $types = array(); + if ($queue_count == 1) { + $types = $GLOBALS['whups_driver']->getTypes(key($queues)); + $this->addHidden('', 'queue', 'int', false, true); + $vars->set('queue', key($queues)); + } else { + if ($queue_count > 0) { + $modtype = 'enum'; + $queue_params = array(array('0' => _("Any")) + $queues); + foreach ($queues as $queueID => $name) { + $types = $types + $GLOBALS['whups_driver']->getTypes($queueID); + } + } else { + $modtype = 'invalid'; + $queue_params = array(_("There are no queues which you can search.")); + } + $this->addVariable(_("Queue"), 'queue', $modtype, false, false, null, $queue_params); + } + + $this->addVariable(_("Summary like"), 'summary', 'text', false); + + $states = array(); + foreach ($types as $typeID => $typeName) { + $states = $GLOBALS['whups_driver']->getAllStateInfo($typeID); + $list = array(); + foreach ($states as $state) { + $list[$state['state_id']] = $state['state_name']; + } + $this->addVariable($typeName, "states[$typeID]", 'multienum', false, false, null, array ($list, 4)); + } + + $this->setSection('dates', _("Dates")); + $this->addVariable(_("Created from"), 'ticket_timestamp[from]', 'monthdayyear', false, false, null, array(date('Y') - 10)); + $this->addVariable(_("to"), 'ticket_timestamp[to]', 'monthdayyear', false, false, null, array(date('Y') - 10)); + $this->addVariable(_("Updated from"), 'date_updated[from]', 'monthdayyear', false, false, null, array(date('Y') - 10)); + $this->addVariable(_("to"), 'date_updated[to]', 'monthdayyear', false, false, null, array(date('Y') - 10)); + $this->addVariable(_("Resolved from"), 'date_resolved[from]', 'monthdayyear', false, false, null, array(date('Y') - 10)); + $this->addVariable(_("to"), 'date_resolved[to]', 'monthdayyear', false, false, null, array(date('Y') - 10)); + $this->addVariable(_("Assigned from"), 'date_assigned[from]', 'monthdayyear', false, false, null, array(date('Y') - 10)); + $this->addVariable(_("to"), 'date_assigned[to]', 'monthdayyear', false, false, null, array(date('Y') - 10)); + $this->addVariable(_("Due from"), 'ticket_due[from]', 'monthdayyear', false, false, null, array(date('Y') - 10)); + $this->addVariable(_("to"), 'ticket_due[to]', 'monthdayyear', false, false, null, array(date('Y') - 10)); + } + + /** + * Fetch the field values of the submitted form. + * + * @param Horde_Variables $vars A Horde_Variables instance, optional since Horde 3.2. + * @param array $info Array to be filled with the submitted field + * values. + */ + function getInfo($vars, &$info) + { + parent::getInfo($vars, $info); + + if (empty($info['queue'])) { + $info['queue'] = array_keys(Whups::permissionsFilter($GLOBALS['whups_driver']->getQueues(), 'queue', Horde_Perms::READ, Horde_Auth::getAuth(), Horde_Auth::getAuth())); + } + + if (empty($info['states'])) { + unset($info['states']); + } + + // ... if we were given a set of states + if (isset($info['states'])) { + // collect them into a list of state_id + $info['state_id'] = array(); + foreach ($info['states'] as $states) { + if (isset($states)) { + // because null === array_merge(array, null) + $info['state_id'] = array_merge($info['state_id'], $states); + } + } + unset($info['states']); + } + } + +} diff --git a/whups/lib/Forms/VarRenderer.php b/whups/lib/Forms/VarRenderer.php new file mode 100644 index 000000000..7823e8291 --- /dev/null +++ b/whups/lib/Forms/VarRenderer.php @@ -0,0 +1,43 @@ + + * @package Horde_UI + */ + +/** + * The Horde_UI_VarRenderer_whups class provides additional methods for + * rendering Horde_Form_Type_whups_email fields. + * + * @author Jan Schneider + * @package Horde_UI + */ +class Horde_Ui_VarRenderer_whups extends Horde_Ui_VarRenderer_Html { + + function _renderVarInput_whups_email($form, &$var, &$vars) + { + $name = $var->getVarName(); + + $imple = Horde_Ajax_Imple::factory(array('whups', 'ContactAutoCompleter'), array('triggerId' => $name)); + $imple->attach(); + return sprintf('', + $name, + $name, + @htmlspecialchars($var->getValue($vars)), + $this->_getActionScripts($form, $var)) + . ''; + } + +} diff --git a/whups/lib/MIME/Viewer/Zip.php b/whups/lib/MIME/Viewer/Zip.php new file mode 100644 index 000000000..7477ce38a --- /dev/null +++ b/whups/lib/MIME/Viewer/Zip.php @@ -0,0 +1,96 @@ + + * @author Michael Slusarz + * @author Jan Schneider + * @package Horde_MIME_Viewer + */ +class Whups_Horde_Mime_Viewer_zip extends Horde_Mime_Viewer_Zip +{ + /** + * Return the full rendered version of the Horde_Mime_Part object. + * + * URL parameters used by this function: + *
+     * 'zip_attachment' - (integer) The ZIP attachment to download.
+     * 
+ * + * @return array See Horde_Mime_Viewer_Driver::render(). + */ + protected function _render() + { + if (!Horde_Util::getFormData('zip_attachment')) { + $this->_callback = array(&$this, '_WhupsCallback'); + return parent::_render(); + } + + /* Send the requested file. Its position in the zip archive is located + * in 'zip_attachment'. */ + $data = $this->_mimepart->getContents(); + $zip = Horde_Compress::factory('zip'); + $fileKey = Horde_Util::getFormData('zip_attachment') - 1; + $zipInfo = $zip->decompress($data, array('action' => Horde_Compress_Zip::ZIP_LIST)); + + /* Verify that the requested file exists. */ + if (isset($zipInfo[$fileKey])) { + $text = $zip->decompress($data, array('action' => Horde_Compress_Zip::ZIP_DATA, 'info' => &$zipInfo, 'key' => $fileKey)); + if (!empty($text)) { + return array( + $this->_mimepart->getMimeId() => array( + 'data' => $text, + 'name' => basename($zipInfo[$fileKey]['name']), + 'status' => array(), + 'type' => 'application/octet-stream' + ) + ); + } + } + // TODO: Error reporting + return array(); + } + + /** + * Return the rendered inline version of the Horde_Mime_Part object. + * + * @return array See Horde_Mime_Viewer_Driver::render(). + */ + protected function _renderInline() + { + $this->_callback = array(&$this, '_WhupsCallback'); + return parent::_renderInline(); + } + + /** + * The function to use as a callback to _toHTML(). + * + * @param integer $key The position of the file in the zip archive. + * @param array $val The information array for the archived file. + * + * @return string The content-type of the output. + */ + protected function _WhupsCallback($key, $val) + { + $name = preg_replace('/( )+$/', '', $val['name']); + + if (!empty($val['size']) && (strstr($val['attr'], 'D') === false) && + ((($val['method'] == 0x8) && Horde_Util::extensionExists('zlib')) || + ($val['method'] == 0x0))) { + $mime_part = $this->_mimepart; + $mime_part->setName(basename($name)); + $val['name'] = str_replace($name, Horde::link(Horde_Util::addParameter(Horde::applicationUrl('view.php'), array('actionID' => 'view_file', 'type' => Horde_Util::getFormData('type'), 'file' => Horde_Util::getFormData('file'), 'ticket' => Horde_Util::getFormData('ticket'), 'zip_attachment' => $key + 1))) . $name . '', $val['name']); + } + + return $val; + } + +} diff --git a/whups/lib/Mail.php b/whups/lib/Mail.php new file mode 100644 index 000000000..3b4ed685c --- /dev/null +++ b/whups/lib/Mail.php @@ -0,0 +1,235 @@ + + * @author Jan Schneider + * @package Whups + */ +class Whups_Mail { + + /** + * Parse a MIME message and create a new ticket. + * + * @param string $text This is the full text of the MIME message. + * @param array $info An array of information for the new ticket. + * This should include: + * - 'queue' => queue id + * - 'type' => type id + * - 'state' => state id + * - 'priority' => priority id + * - 'ticket' => ticket id (prevents creation + * of new tickets) + * @param string $auth_user This will be the Horde user that creates the + * ticket. If null, we will try to deduce from + * the message's From: header. We do NOT default + * to Horde_Auth::getAuth(). + * + * @return Whups_Ticket | PEAR_Error Ticket or Error object. + */ + static public function processMail($text, $info, $auth_user = null) + { + global $conf; + + $message = Horde_Mime_Part::parseMessage($text); + + if (preg_match("/^(.*?)\r?\n\r?\n/s", $text, $matches)) { + $hdrText = $matches[1]; + } else { + $hdrText = $text; + } + $headers = Horde_Mime_Headers::parseHeaders($hdrText); + + // If this message was generated by Whups, don't process it. + if ($headers->getValue('X-Whups-Generated')) { + return true; + } + + // Use the message subject as the ticket summary. + $info['summary'] = $headers->getValue('subject'); + $from = $headers->getValue('from'); + + // Format the message into a comment. + $comment = _("Received message:") . "\n\n"; + if (!empty($GLOBALS['conf']['mail']['include_headers'])) { + foreach ($headers->toArray(array('nowrap' => true)) as $name => $vals) { + if (!in_array(strtolower($name), array('subject', 'from', 'to', 'cc', 'date'))) { + if (is_array($vals)) { + foreach ($vals as $val) { + $comment .= $name . ': ' . $val . "\n"; + } + } else { + $comment .= $name . ': ' . $vals . "\n"; + } + } + } + + $comment .= "\n"; + } + + // Look for the body part. + $body_id = $message->findBody(); + if ($body_id) { + $part = $message->getPart($body_id); + $comment .= Horde_String::convertCharset($part->transferDecode(), $part->getCharset()); + } else { + $comment .= _("[ Could not render body of message. ]"); + } + + $info['comment'] = $comment . "\n"; + + // Try to determine the Horde user for creating the ticket. + if (empty($auth_user)) { + $auth_user = self::_findAuthUser(Horde_Mime_Address::bareAddress($from)); + } + $author = $auth_user; + + if (empty($auth_user) && !empty($info['default_auth'])) { + $auth_user = $info['default_auth']; + if (!empty($from)) { + $info['user_email'] = $from; + } + } + + if (empty($auth_user) && !empty($conf['mail']['username'])) { + $auth_user = $conf['mail']['username']; + if (!empty($from)) { + $info['user_email'] = $from; + } + } + + // Authenticate as the correct Horde user. + if (!empty($auth_user) && $auth_user != Horde_Auth::getAuth()) { + Horde_Auth::setAuth($auth_user, array()); + } + + // See if we can match this message to an existing ticket. + if ($ticket = self::_findTicket($info)) { + $ticket->change('comment', $info['comment']); + $ticket->change('comment-email', $from); + $result = $ticket->commit($author); + if (is_a($result, 'PEAR_Error')) { + $result->addUserInfo(_("current user:") . ' ' . $auth_user); + return $result; + } + } elseif (!empty($info['ticket'])) { + // Didn't match an existing ticket though a ticket number had been + // specified. + return PEAR::raiseError(sprintf(_("Could not find ticket \"%s\"."), + $info['ticket'])); + } else { + if (!empty($info['guess-queue'])) { + // Try to guess the queue name for the new ticket from the + // message subject. + $queues = $GLOBALS['whups_driver']->getQueues(); + foreach ($queues as $queueId => $queueName) { + if (preg_match('/\b' . preg_quote($queueName, '/') . '\b/i', + $info['summary'])) { + $info['queue'] = $queueId; + break; + } + } + } + // Create a new ticket. + $ticket = Whups_Ticket::newTicket($info, $author); + if (is_a($ticket, 'PEAR_Error')) { + $ticket->addUserInfo(_("current user:") . ' ' . $auth_user); + return $ticket; + } + } + + // Extract attachments. + $dl_list = array_slice(array_keys($message->contentTypeMap()), 1); + foreach ($dl_list as $key) { + if (strpos($key, '.', 1) === false) { + $part = $message->getPart($key); + $part->transferDecodeContents(); + $tmp_name = Horde::getTempFile('whups'); + $fp = @fopen($tmp_name, 'wb'); + if (!$fp) { + Horde::logMessage(sprintf('Cannot open file %s for writing.', + $tmp_name), + __FILE__, __LINE__, PEAR_LOG_ERR); + return $ticket; + } + fwrite($fp, $part->getContents()); + fclose($fp); + $part_name = $part->getName(true); + $ticket->change('attachment', array('name' => $part_name, + 'tmp_name' => $tmp_name)); + $result = $ticket->commit(); + if (is_a($result, 'PEAR_Error')) { + $result->addUserInfo(_("current user:") . ' ' . $auth_user); + return $result; + } + } + } + } + + /** + * Returns the ticket number matching the provided information. + * + * @param array $info A hash with ticket information. + * + * @return integer The ticket number if has been passed in the subject, + * false otherwise. + */ + static protected function _findTicket($info) + { + if (!empty($info['ticket'])) { + $ticketnum = $info['ticket']; + } elseif (preg_match('/\[[\w\s]*#(\d+)\]/', $info['summary'], $matches)) { + $ticketnum = $matches[1]; + } else { + return false; + } + + $ticket = Whups_Ticket::makeTicket($ticketnum); + if (is_a($ticket, 'PEAR_Error')) { + return false; + } + + return $ticket; + } + + /** + * Searches the From: header for an email address contained in one + * of our users' identities. + * + * @param string $from The From address. + * + * @return string The Horde user name that matches the headers' From: + * address or null if the users can't be listed or no + * match has been found. + */ + static protected function _findAuthUser($from) + { + global $conf; + + require_once 'Horde/Identity.php'; + + $params = Horde::getDriverConfig('auth', $conf['auth']['driver']); + $auth = Horde_Auth::singleton($conf['auth']['driver'], $params); + if ($auth->hasCapability('list')) { + foreach ($auth->listUsers() as $user) { + $identity = &Identity::singleton('none', $user); + $addrs = $identity->getAll('from_addr'); + foreach ($addrs as $addr) { + if (strcasecmp($from, $addr) == 0) { + return $user; + } + } + } + } + + return false; + } + +} diff --git a/whups/lib/Query.php b/whups/lib/Query.php new file mode 100644 index 000000000..733bedc3e --- /dev/null +++ b/whups/lib/Query.php @@ -0,0 +1,1058 @@ + + * Copyright 2001-2009 The Horde Project (http://www.horde.org/) + * + * See the enclosed file LICENSE for license information (BSD). If you + * did not receive this file, see http://www.horde.org/licenses/bsdl.php. + * + * @author Robert E. Coyle + * @author Jan Schneider + * @package Whups + */ + +/** Horde_Share */ +require_once 'Horde/Share.php'; + +/** Horde_Form_Action */ +require_once 'Horde/Form/Action.php'; + +/** Mode types. */ +define('QUERY_TYPE_AND', 1); +define('QUERY_TYPE_OR', 2); +define('QUERY_TYPE_NOT', 3); +define('QUERY_TYPE_CRITERION', 4); + +/** Criterion types. */ +define('CRITERION_ID', 1); +define('CRITERION_QUEUE', 2); +define('CRITERION_TYPE', 3); +define('CRITERION_STATE', 4); +define('CRITERION_PRIORITY', 5); +define('CRITERION_OWNERS', 7); +define('CRITERION_REQUESTER', 8); +define('CRITERION_GROUPS', 9); +define('CRITERION_ADDED_COMMENT', 11); +define('CRITERION_COMMENT', 12); +define('CRITERION_SUMMARY', 13); +define('CRITERION_ATTRIBUTE', 14); +define('CRITERION_VERSION', 15); +define('CRITERION_TIMESTAMP', 16); +define('CRITERION_UPDATED', 17); +define('CRITERION_RESOLVED', 18); +define('CRITERION_ASSIGNED', 19); +define('CRITERION_DUE', 20); + +/** Operators for integer fields. */ +define('OPERATOR_GREATER', 1); +define('OPERATOR_LESS', 2); +define('OPERATOR_EQUAL', 3); + +/** Operators for text fields. */ +define('OPERATOR_CI_SUBSTRING', 4); +define('OPERATOR_CS_SUBSTRING', 5); +define('OPERATOR_WORD', 6); +define('OPERATOR_PATTERN', 7); + +/** + * array( + * 'type' => QUERY_TYPE_... + * 'children' => array(...) unless type == QUERY_TYPE_CRITERION + * 'criterion' => CRITERION_... if type == QUERY_TYPE_CRITERION + * 'operator' => OPERATOR_... if type == QUERY_TYPE_CRITERION + * 'value' => other argument to operator of criterion + */ + +/** + * @package Whups + */ +class Whups_Query { + + /** + * @var Whups_QueryManager + */ + var $_qManager; + + /** + * Query id. + * + * @var integer + */ + var $id; + + /** + * The full name of the query. + * + * @var string + */ + var $name; + + /** + * The query slug (short name). + * + * @var string + */ + var $slug; + + /** + * @var array + */ + var $query = array('type' => QUERY_TYPE_AND, + 'children' => array()); + + /** + * @var array + */ + var $parameters = array(); + + /** + * Constructor + */ + function Whups_Query(&$qManager, $qDetails = array()) + { + $this->_qManager = &$qManager; + if (isset($qDetails['query_id'])) { + $this->id = $qDetails['query_id']; + } + if (isset($qDetails['query_name'])) { + $this->name = $qDetails['query_name']; + } + if (isset($qDetails['query_slug'])) { + $this->slug = $qDetails['query_slug']; + } + if (isset($qDetails['query_object'])) { + $this->query = @unserialize($qDetails['query_object']); + } + if (isset($qDetails['query_parameters'])) { + $this->parameters = @unserialize($qDetails['query_parameters']); + } + } + + /** + * @static + */ + function pathToString(&$path) + { + return implode(',', $path); + } + + /** + * @static + */ + function stringToPath($pathstring) + { + if (!strlen($pathstring)) { + return array(); + } + + return explode(',', $pathstring); + } + + /** + * Returns human readable descriptions of all operator types. + * + * @static + * + * @return array Hash with operator types and descriptions. + */ + function textOperators() + { + return array( + OPERATOR_EQUAL => _("Exact Match"), + OPERATOR_CI_SUBSTRING => _("Case Insensitive Substring"), + // OPERATOR_CS_SUBSTRING => _("Case Sensitive Substring"), + OPERATOR_WORD => _("Match Word"), + OPERATOR_PATTERN => _("Match Pattern")); + } + + /** + * Checks to see if a user has a given permission. + * + * @param string $userid The userid of the user. + * @param integer $permission A Horde_Perms::* constant to test for. + * @param string $creator The creator of the event. + * + * @return boolean Whether or not $userid has $permission. + */ + function hasPermission($userid, $permission, $creator = null) + { + return $this->_qManager->hasPermission($this->id, $userid, $permission, $creator); + } + + /** + * Saves any changes to this object to the backend + * permanently. New objects are added instead. + * + * @return boolean|PEAR_Error PEAR_Error on failure. + */ + function save() + { + return $this->_qManager->save($this); + } + + /** + * Delete this object from the backend permanently. + * + * @return boolean|PEAR_Error PEAR_Error on failure. + */ + function delete() + { + return $this->_qManager->delete($this); + } + + /** + * Tab operations for this query. + */ + function getTabs($vars) + { + // Create a few variables that are reused. + $queryurl = Horde::applicationUrl('query/index.php'); + $edit = $this->hasPermission(Horde_Auth::getAuth(), Horde_Perms::EDIT); + $delete = $this->hasPermission(Horde_Auth::getAuth(), Horde_Perms::DELETE); + + $tabs = new Horde_Ui_Tabs('action', $vars); + $tabs->addTab(_("Ne_w Query"), $queryurl, 'new'); + if (!$this->id || $edit) { + $tabs->addTab(_("_Edit Query"), $queryurl, 'edit'); + } + if ($this->id && $edit && empty($GLOBALS['conf']['share']['no_sharing'])) { + Horde::addScriptFile('popup.js', 'horde', true); + + $permsurl = $GLOBALS['registry']->get('webroot', 'horde') . '/services/shares/edit.php'; + $permsurl = Horde_Util::addParameter($permsurl, array('app' => 'whups', + 'cid' => $this->id)); + $tabs->addTab(_("Edit _Permissions"), $permsurl, array('tabname' => 'perms', + 'onclick' => 'popup(\'' . $permsurl . '\'); return false;', + 'target' => '_blank')); + } + $tabs->addTab(_("E_xecute Query"), Horde::applicationUrl('query/run.php'), 'run'); + $tabs->addTab(_("_Load Query"), $queryurl, 'load'); + if ((!$this->id && Horde_Auth::getAuth()) || + ($this->id && $edit)) { + $tabs->addTab(_("Sa_ve Query"), $queryurl, 'save'); + } + if ($this->id && $delete) { + $tabs->addTab(_("_Delete Query"), $queryurl, 'delete'); + } + + return $tabs; + } + + /** + * Operations. + */ + + function pathToForm(&$vars) + { + $path = Whups_Query::stringToPath($vars->get('path')); + $parent = null; + $qobj = $this->query; + + for ($i = 0, $c = count($path); $i < $c; $i++) { + $parent = $qobj; + $qobj = $qobj['children'][$path[$i]]; + } + + if ($qobj['type'] != QUERY_TYPE_CRITERION) { + // Search for any criteria that have been combined automatically + // with an AND or OR. + switch ($qobj['type']) { + case QUERY_TYPE_OR: + // Search for multiple ids. + $criteria = array(); + foreach ($qobj['children'] as $child) { + if ($child['type'] != QUERY_TYPE_CRITERION || + $child['criterion'] != CRITERION_ID) { + $criteria = false; + break; + } + $criteria[] = $child['value']; + } + if ($criteria) { + $vars->set('id', implode(',', $criteria)); + return 'props'; + } + + // Search for user criteria. + $criteria = array(); + $operator = $value = null; + foreach ($qobj['children'] as $child) { + if ($child['type'] != QUERY_TYPE_CRITERION || + ($child['criterion'] != CRITERION_OWNERS && + $child['criterion'] != CRITERION_REQUESTER && + $child['criterion'] != CRITERION_ADDED_COMMENT) || + (isset($operator) && $operator != $child['operator']) || + (isset($value) && $value != $child['value'])) { + $criteria = false; + break; + } + $criteria[] = $child['criterion']; + $operator = $child['operator']; + $value = $child['value']; + } + if ($criteria) { + $vars->set('user', $value); + $vars->set('operator', $operator); + foreach ($criteria as $criterion) { + switch ($criterion) { + case CRITERION_OWNERS: + $vars->set('owners', true); + break; + case CRITERION_REQUESTER: + $vars->set('requester', true); + break; + case CRITERION_ADDED_COMMENT: + $vars->set('comments', true); + break; + } + } + return 'user'; + } + + // Search for text criteria. + $criteria = array(); + $operator = $value = null; + foreach ($qobj['children'] as $child) { + if ($child['type'] != QUERY_TYPE_CRITERION || + ($child['criterion'] != CRITERION_COMMENT && + $child['criterion'] != CRITERION_SUMMARY) || + (isset($operator) && $operator != $child['operator']) || + (isset($value) && $value != $child['value'])) { + $criteria = false; + break; + } + $criteria[] = $child['criterion']; + $operator = $child['operator']; + $value = $child['value']; + } + if ($criteria) { + $vars->set('text', $value); + $vars->set('operator', $operator); + foreach ($criteria as $criterion) { + if ($criterion == CRITERION_COMMENT) { + $vars->set('comments', true); + } elseif ($criterion == CRITERION_SUMMARY) { + $vars->set('summary', true); + } + } + return 'text'; + } + + // Search for attributes. + $attribs = array_keys($GLOBALS['whups_driver']->getAttributesForType()); + $criteria = array(); + $operator = $value = null; + foreach ($qobj['children'] as $child) { + if ($child['type'] != QUERY_TYPE_CRITERION || + $child['criterion'] != CRITERION_ATTRIBUTE || + (isset($operator) && $operator != $child['operator']) || + (isset($value) && $value != $child['value']) || + !in_array($child['cvalue'], $attribs)) { + $criteria = false; + break; + } + $criteria[] = $child['cvalue']; + $operator = $child['operator']; + $value = $child['value']; + } + if ($criteria) { + $vars->set('text', $value); + $vars->set('operator', $operator); + foreach ($criteria as $criterion) { + $vars->set('a' . $criterion, true); + } + return 'attribs'; + } + break; + + case QUERY_TYPE_AND: + // Search for date criteria. + $criteria = false; + foreach ($qobj['children'] as $child) { + if ($child['type'] != QUERY_TYPE_CRITERION || + ($child['criterion'] != CRITERION_TIMESTAMP && + $child['criterion'] != CRITERION_UPDATED && + $child['criterion'] != CRITERION_RESOLVED && + $child['criterion'] != CRITERION_ASSIGNED && + $child['criterion'] != CRITERION_DUE)) { + $criteria = false; + break; + } + $criteria = true; + } + if ($criteria) { + foreach ($qobj['children'] as $child) { + switch ($child['criterion'] . $child['operator']) { + case CRITERION_TIMESTAMP . OPERATOR_GREATER: + $vars->set('ticket_timestamp[from]', $child['value']); + break; + case CRITERION_TIMESTAMP . OPERATOR_LESS: + $vars->set('ticket_timestamp[to]', $child['value']); + break; + case CRITERION_UPDATED . OPERATOR_GREATER: + $vars->set('date_updated[from]', $child['value']); + break; + case CRITERION_UPDATED . OPERATOR_LESS: + $vars->set('date_updated[to]', $child['value']); + break; + case CRITERION_RESOLVED . OPERATOR_GREATER: + $vars->set('date_resolved[from]', $child['value']); + break; + case CRITERION_RESOLVED . OPERATOR_LESS: + $vars->set('date_resolved[to]', $child['value']); + break; + case CRITERION_ASSIGNED . OPERATOR_GREATER: + $vars->set('date_assigned[from]', $child['value']); + break; + case CRITERION_ASSIGNED . OPERATOR_LESS: + $vars->set('date_assigned[to]', $child['value']); + break; + case CRITERION_DUE . OPERATOR_GREATER: + $vars->set('ticket_due[from]', $child['value']); + break; + case CRITERION_DUE . OPERATOR_LESS: + $vars->set('ticket_due[to]', $child['value']); + break; + } + } + return 'date'; + } + + // Search for version criterion. + if (count($qobj['children']) == 2 && + $qobj['children'][0]['type'] == QUERY_TYPE_CRITERION && + $qobj['children'][0]['criterion'] == CRITERION_QUEUE && + $qobj['children'][1]['type'] == QUERY_TYPE_CRITERION && + $qobj['children'][1]['criterion'] == CRITERION_VERSION) { + $vars->set('queue', $qobj['children'][0]['value']); + $vars->set('version', $qobj['children'][1]['value']); + return 'props'; + } + break; + } + return PEAR::raiseError(_("This query element cannot be edited.")); + } + + switch ($qobj['criterion']) { + case CRITERION_ID: + $multiple = false; + if ($parent && $parent['type'] == QUERY_TYPE_OR) { + $multiple = array(); + foreach ($parent['children'] as $child) { + if ($child['type'] != QUERY_TYPE_CRITERION || + $child['criterion'] != CRITERION_ID) { + $multiple = false; + break; + } + $multiple[] = $child['value']; + } + } + if ($multiple) { + array_pop($path); + $vars->set('path', Whups_Query::pathToString($path)); + $vars->set('id', implode(',', $multiple)); + } else { + $vars->set('id', $qobj['value']); + } + return 'props'; + + case CRITERION_QUEUE: + if ($parent && $parent['type'] == QUERY_TYPE_AND && + count($parent['children']) == 2 && + $parent['children'][1]['type'] == QUERY_TYPE_CRITERION && + $parent['children'][1]['criterion'] == CRITERION_VERSION) { + array_pop($path); + $vars->set('path', Whups_Query::pathToString($path)); + $vars->set('version', $parent['children'][1]['value']); + } + $vars->set('queue', $qobj['value']); + return 'props'; + + case CRITERION_VERSION: + array_pop($path); + $vars->set('path', Whups_Query::pathToString($path)); + $vars->set('queue', $parent['children'][0]['value']); + $vars->set('version', $qobj['value']); + return 'props'; + + case CRITERION_TYPE: + $vars->set('ttype', $qobj['value']); + return 'props'; + + case CRITERION_STATE: + $vars->set('state', $qobj['value']); + return 'props'; + + case CRITERION_PRIORITY: + $vars->set('priority', $qobj['value']); + return 'props'; + + case CRITERION_TIMESTAMP: + case CRITERION_UPDATED: + case CRITERION_RESOLVED: + case CRITERION_ASSIGNED: + case CRITERION_DUE: + $criteria = false; + if ($parent && $parent['type'] == QUERY_TYPE_AND) { + foreach ($parent['children'] as $child) { + if ($child['type'] != QUERY_TYPE_CRITERION || + ($child['criterion'] != CRITERION_TIMESTAMP && + $child['criterion'] != CRITERION_UPDATED && + $child['criterion'] != CRITERION_RESOLVED && + $child['criterion'] != CRITERION_ASSIGNED && + $child['criterion'] != CRITERION_DUE)) { + $criteria = false; + break; + } + $criteria = true; + } + } + if ($criteria) { + array_pop($path); + $vars->set('path', Whups_Query::pathToString($path)); + foreach ($parent['children'] as $child) { + switch ($child['criterion'] . $child['operator']) { + case CRITERION_TIMESTAMP . OPERATOR_GREATER: + $vars->set('ticket_timestamp[from]', $child['value']); + break; + case CRITERION_TIMESTAMP . OPERATOR_LESS: + $vars->set('ticket_timestamp[to]', $child['value']); + break; + case CRITERION_UPDATED . OPERATOR_GREATER: + $vars->set('date_updated[from]', $child['value']); + break; + case CRITERION_UPDATED . OPERATOR_LESS: + $vars->set('date_updated[to]', $child['value']); + break; + case CRITERION_RESOLVED . OPERATOR_GREATER: + $vars->set('date_resolved[from]', $child['value']); + break; + case CRITERION_RESOLVED . OPERATOR_LESS: + $vars->set('date_resolved[to]', $child['value']); + break; + case CRITERION_ASSIGNED . OPERATOR_GREATER: + $vars->set('date_assigned[from]', $child['value']); + break; + case CRITERION_ASSIGNED . OPERATOR_LESS: + $vars->set('date_assigned[to]', $child['value']); + break; + case CRITERION_DUE . OPERATOR_GREATER: + $vars->set('ticket_due[from]', $child['value']); + break; + case CRITERION_DUE . OPERATOR_LESS: + $vars->set('ticket_due[to]', $child['value']); + break; + } + } + } + return 'date'; + + case CRITERION_OWNERS: + case CRITERION_REQUESTER: + case CRITERION_ADDED_COMMENT: + $criteria = false; + if ($parent && $parent['type'] == QUERY_TYPE_OR) { + $criteria = array(); + foreach ($parent['children'] as $child) { + if ($child['type'] != QUERY_TYPE_CRITERION || + !in_array($child['criterion'], array(CRITERION_OWNERS, CRITERION_REQUESTER, CRITERION_ADDED_COMMENT))) { + $criteria = false; + break; + } + $criteria[] = $child['criterion']; + } + if ($criteria) { + array_pop($path); + $vars->set('path', Whups_Query::pathToString($path)); + } + } + if (!$criteria) { + $criteria = array($qobj['criterion']); + } + $vars->set('user', $qobj['value']); + $vars->set('operator', $qobj['operator']); + foreach ($criteria as $criterion) { + switch ($criterion) { + case CRITERION_OWNERS: + $vars->set('owners', true); + break; + case CRITERION_REQUESTER: + $vars->set('requester', true); + break; + case CRITERION_ADDED_COMMENT: + $vars->set('comments', true); + break; + } + } + return 'user'; + + case CRITERION_GROUPS: + $vars->set('groups', $qobj['value']); + return 'group'; + + case CRITERION_COMMENT: + case CRITERION_SUMMARY: + $criteria = false; + if ($parent && $parent['type'] == QUERY_TYPE_OR) { + $criteria = array(); + $operator = $value = null; + foreach ($parent['children'] as $child) { + if ($child['type'] != QUERY_TYPE_CRITERION || + ($child['criterion'] != CRITERION_COMMENT && + $child['criterion'] != CRITERION_SUMMARY) || + (isset($operator) && $operator != $child['operator']) || + (isset($value) && $value != $child['value'])) { + $criteria = false; + break; + } + $criteria[] = $child['criterion']; + $operator = $child['operator']; + $value = $child['value']; + } + if ($criteria) { + array_pop($path); + $vars->set('path', Whups_Query::pathToString($path)); + } + } + if (!$criteria) { + $criteria = array($qobj['criterion']); + } + $vars->set('text', $value); + $vars->set('operator', $operator); + foreach ($criteria as $criterion) { + if ($criterion == CRITERION_COMMENT) { + $vars->set('comments', true); + } elseif ($criterion == CRITERION_SUMMARY) { + $vars->set('summary', true); + } + } + return 'text'; + + case CRITERION_ATTRIBUTE: + $attribs = array_keys($GLOBALS['whups_driver']->getAttributesForType()); + $criteria = false; + if ($parent && $parent['type'] == QUERY_TYPE_OR) { + $criteria = array(); + $operator = $value = null; + foreach ($parent['children'] as $child) { + if ($child['type'] != QUERY_TYPE_CRITERION || + $child['criterion'] != CRITERION_ATTRIBUTE || + (isset($operator) && $operator != $child['operator']) || + (isset($value) && $value != $child['value']) || + !in_array($child['cvalue'], $attribs)) { + $criteria = false; + break; + } + $criteria[] = $child['cvalue']; + $operator = $child['operator']; + $value = $child['value']; + } + if ($criteria) { + array_pop($path); + $vars->set('path', Whups_Query::pathToString($path)); + } + } + if (!$criteria) { + $criteria = array($qobj['cvalue']); + } + $vars->set('text', $value); + $vars->set('operator', $operator); + foreach ($criteria as $criterion) { + $vars->set('a' . $criterion, true); + } + return 'attribs'; + } + + return PEAR::raiseError(_("This query element cannot be edited.")); + } + + function deleteNode($pathstring) + { + $path = Whups_Query::stringToPath($pathstring); + $qobj = &$this->query; + + if (!strlen($pathstring)) { + // Deleting the root node isn't supported. + $GLOBALS['notification']->push(_("Choose New Query instead of deleting the root node."), 'horde.warning'); + return false; + } else { + $count = count($path) - 1; + for ($i = 0; $i < $count; $i++) { + $qobj = &$qobj['children'][$path[$i]]; + } + + if (!empty($qobj['children'][$path[$count]]['value']) && + $this->_getParameterName($qobj['children'][$path[$count]]['value']) !== null) { + unset($this->parameters[array_search($pn, $this->parameters)]); + } + + array_splice($qobj['children'], $path[$count], 1); + } + } + + function hoist($pathstring) + { + $path = Whups_Query::stringToPath($pathstring); + $qobj = &$this->query; + + if (!strlen($pathstring)) { + // Can't hoist the root node. + } else { + $count = count($path) - 1; + + for ($i = 0; $i < $count; $i++) { + $qobj = &$qobj['children'][$path[$i]]; + } + + $cobj = &$qobj['children'][$path[$count]]; + + // TODO: make sure we're hoisting a branch. + array_splice($qobj['children'], $path[$count], 0, $cobj['children']); + array_splice($cobj['children'], 0, count($cobj['children'])); + } + } + + function insertBranch($pathstring, $type) + { + $path = Whups_Query::stringToPath($pathstring); + $qobj = &$this->query; + + $newbranch = array( + 'type' => $type, + 'children' => array()); + + $count = count($path); + + for ($i = 0; $i < $count; $i++) { + $qobj = &$qobj['children'][$path[$i]]; + } + + if (!isset($qobj['children']) || + !is_array($qobj['children'])) { + $qobj['children'] = array(); + } + + $qobj['children'][] = $newbranch; + $path[] = count($qobj['children']) - 1; + + return Whups_Query::pathToString($path); + } + + function insertCriterion($pathstring, $criterion, $cvalue, $operator, $value) + { + $path = Whups_Query::stringToPath($pathstring); + $qobj = &$this->query; + + $value = trim($value); + if ($value[0] == '"') { + // FIXME: The last character should be '"' as well. + $value = substr($value, 1, -1); + } else { + $pn = $this->_getParameterName($value); + if ($pn !== null) { + $this->parameters[] = $pn; + } + } + + $newbranch = array( + 'type' => QUERY_TYPE_CRITERION, + 'criterion' => $criterion, + 'cvalue' => $cvalue, + 'operator' => $operator, + 'value' => $value); + + $count = count($path); + for ($i = 0; $i < $count; $i++) { + $qobj = &$qobj['children'][$path[$i]]; + } + + $qobj['children'][] = $newbranch; + } + + /** + * Top down traversal. + */ + function walk(&$obj, $method) + { + $path = array(); + $more = array(); + $this->_walk($this->query, $more, $path, $obj, $method); + } + + /** + * @access private + */ + function _walk(&$node, &$more, &$path, &$obj, $method) + { + if ($node['type'] == QUERY_TYPE_CRITERION) { + $obj->$method($more, $path, QUERY_TYPE_CRITERION, $node['criterion'], + $node['cvalue'], $node['operator'], $node['value']); + } else { + $obj->$method($more, $path, $node['type'], null, null, null, null); + } + + if (isset($node['children'])) { + $count = count($node['children']); + + for ($i = 0; $i < $count; $i++) { + $path[] = $i; + $more[] = ($i < $count - 1); + $this->_walk($node['children'][$i], $more, $path, $obj, $method); + array_pop($more); + array_pop($path); + } + } + } + + /** + * Bottom up traversal. + */ + function reduce(&$obj, $method, &$vars) + { + return $this->_reduce($this->query, $obj, $method, $vars); + } + + /** + * @access private + */ + function _reduce(&$node, &$obj, $method, &$vars) + { + $args = array(); + + if (isset($node['children'])) { + $count = count($node['children']); + + for ($i = 0; $i < $count; $i++) { + $result = $this->_reduce($node['children'][$i], $obj, $method, $vars); + $args[] = $result; + } + } + + if ($node['type'] == QUERY_TYPE_CRITERION) { + $value = $node['value']; + + $pn = $this->_getParameterName($value); + if ($pn !== null) { + $value = $vars->get($pn); + } + + $result = $obj->$method($args, QUERY_TYPE_CRITERION, $node['criterion'], + $node['cvalue'], $node['operator'], $value); + } else { + $result = $obj->$method($args, $node['type'], null, null, null, null); + } + + return $result; + } + + /** + * @access private + */ + function _getParameterName($value) + { + if (strcmp(substr($value, 0, 2), '${')) + return null; + + $pn = substr($value, 2, -1); + if (!is_string($pn)) + $pn = null; + + return $pn; + } + +} + +/** + * @package Whups + */ +class Whups_QueryManager { + + /** + * Horde_Share instance for managing shares. + * + * @var Horde_Share + */ + var $_shareManager; + + /** + * Constructor. + */ + function Whups_QueryManager() + { + $this->_shareManager = &Horde_Share::singleton('whups'); + } + + /** + * Returns a specific query identified by its id. + * + * @param integer $queryId A query id. + * + * @return Whups_Query The matching query or null if not found. + */ + function getQuery($queryId) + { + $share = $this->_shareManager->getShareById($queryId); + if (is_a($share, 'PEAR_Error')) { + return $share; + } + + return $this->_getQuery($share); + } + + /** + * Returns a specific query identified by its slug name. + * + * @param string $slug A query slug. + * + * @return Whups_Query The matching query or null if not found. + */ + function getQueryBySlug($slug) + { + $shares = $this->_shareManager->listShares(Horde_Auth::getAuth(), Horde_Perms::READ, + array('slug' => $slug)); + if (is_a($shares, 'PEAR_Error')) { + return $shares; + } + if (!count($shares)) { + return; + } + + return $this->_getQuery(reset($shares)); + } + + /** + * Builds a query object from a share object. + * + * @param Horde_Share_Object $share A share object representing a query. + * + * @return Whups_Query The query object built from the share. + */ + function _getQuery($share) + { + $queryDetails = $GLOBALS['whups_driver']->getQuery($share->getId()); + if (is_a($queryDetails, 'PEAR_Error')) { + return $queryDetails; + } + + $queryDetails['query_id'] = $share->getId(); + $queryDetails['query_name'] = $share->get('name'); + $queryDetails['query_slug'] = $share->get('slug'); + + return new Whups_Query($this, $queryDetails); + } + + /** + * Checks to see if a user has a given permission to $queryId. + * + * @param integer $queryId The query to check. + * @param string $userid The userid of the user. + * @param integer $permission A Horde_Perms::* constant to test for. + * @param string $creator The creator of the event. + * + * @return boolean Whether or not $userid has $permission. + */ + function hasPermission($queryId, $userid, $permission, $creator = null) + { + $share = $this->_shareManager->getShareById($queryId); + if (is_a($share, 'PEAR_Error')) { + // If the share doesn't exist yet, then it has open perms. + return true; + } + return $share->hasPermission($userid, $permission, $creator); + } + + /** + * List queries. + */ + function listQueries($user, $return_slugs = false) + { + $shares = $this->_shareManager->listShares($user); + if (is_a($shares, 'PEAR_Error')) { + return $shares; + } + + $queries = array(); + foreach ($shares as $share) { + $queries[$share->getId()] = $return_slugs + ? array('name' => $share->get('name'), + 'slug' => $share->get('slug')) + : $share->get('name'); + } + + return $queries; + } + + /** + */ + function newQuery() + { + return new Whups_Query($this); + } + + /** + * @param Whups_Query $query The query to save. + */ + function save($query) + { + if ($query->id) { + // Query already exists; get its share and update the name + // if necessary. + $share = $this->_shareManager->getShareById($query->id); + if (is_a($share, 'PEAR_Error')) { + // Share has an id but doesn't exist; just throw an + // error. + return $share; + } + if ($share->get('name') != $query->name || + $share->get('slug') != $query->slug) { + $share->set('name', $query->name); + $share->set('slug', $query->slug); + $share->save(); + } + } else { + // Create a new share for the query. + $share = $this->_shareManager->newShare(md5(microtime())); + $share->set('name', $query->name); + $share->set('slug', $query->slug); + $result = $this->_shareManager->addShare($share); + if (is_a($result, 'PEAR_Error')) { + return $result; + } + $query->id = $share->getId(); + } + + // Update the queries table. + $GLOBALS['whups_driver']->saveQuery($query); + } + + /** + * @param Whups_Query $query The query to delete. + */ + function delete($query) + { + if (!$query->id) { + // Queries that aren't saved yet shouldn't be able to be deleted. + return; + } + + $share = $this->_shareManager->getShareById($query->id); + if (is_a($share, 'PEAR_Error')) { + return $share; + } + + $result = $this->_shareManager->removeShare($share); + if (is_a($result, 'PEAR_Error')) { + return $result; + } + + $result = $GLOBALS['whups_driver']->deleteQuery($query->id); + if (is_a($result, 'PEAR_Error')) { + return $result; + } + + return true; + } + +} diff --git a/whups/lib/Renderer/Comment.php b/whups/lib/Renderer/Comment.php new file mode 100755 index 000000000..6f8e9279f --- /dev/null +++ b/whups/lib/Renderer/Comment.php @@ -0,0 +1,221 @@ + + * Copyright 2001-2009 The Horde Project (http://www.horde.org/) + * + * See the enclosed file LICENSE for license information (BSD). If you + * did not receive this file, see http://www.horde.org/licenses/bsdl.php. + * + * @package Whups + */ +class Horde_Form_Renderer_Comment extends Horde_Form_Renderer { + + var $queue = null; + var $type = null; + var $state = null; + var $priority = null; + var $due = null; + + function begin($title) + { + $this->_sectionHeader($title); + echo '
'; + } + +} diff --git a/whups/lib/Renderer/Query.php b/whups/lib/Renderer/Query.php new file mode 100644 index 000000000..6e7e3f2ef --- /dev/null +++ b/whups/lib/Renderer/Query.php @@ -0,0 +1,252 @@ + + * Copyright 2001-2009 The Horde Project (http://www.horde.org/) + * + * See the enclosed file LICENSE for license information (BSD). If you + * did not receive this file, see http://www.horde.org/licenses/bsdl.php. + * + * @package Whups + */ + +/*class Horde_Form_Renderer_QuerySetCurrentType extends Horde_Form_Renderer { + + function _renderForm(&$form, &$vars, $isActive) + { + global $whups_driver; + + $droptext = Horde_UI_VarRenderer_html::selectOptions($whups_driver->getAllTypes()); + include WHUPS_TEMPLATES . '/renderer/querysetcurrenttype.inc'; + } + + function submit() + { + // noop + } +}*/ + +class Horde_Form_Renderer_Query extends Horde_Form_Renderer { + + var $ticketTypes = null; + + var $attributes = null; + + function Horde_Form_Renderer_Query() + { + $this->ticketTypes = $GLOBALS['whups_driver']->getAllTypes(); + $this->attributes = $GLOBALS['whups_driver']->getAllAttributes(); + } + + function _renderBegin() + { + echo ''; + } + + function _renderForm(&$query, &$vars, $active) + { + $this->currentRow = 1; + $this->isActive = $active; + $this->currentPath = $vars->get('path'); + + $this->_renderBegin(); + $query->walk($this, '_renderRow'); + $this->_renderEnd(); + } + + function edit(&$operations, $formname, $id) + { + include WHUPS_TEMPLATES . '/renderer/query/edit.inc'; + } + + function _renderRow(&$more, &$path, $type, $criterion, $cvalue, $operator, $value) + { + global $whups_driver, $registry; + + $this->currentRow++; + + $pathstring = Whups_Query::pathToString($path); + + $depth = count($path); + $class = "item" . ($this->currentRow % 2); + + switch ($type) { + case QUERY_TYPE_AND: $text = _("And"); break; + case QUERY_TYPE_OR: $text = _("Or"); break; + case QUERY_TYPE_NOT: $text = _("Not"); break; + case QUERY_TYPE_CRITERION: + + switch ($criterion) { + case CRITERION_ID: $text = _("Id"); break; + case CRITERION_OWNERS: $text = _("Owners"); break; + case CRITERION_GROUPS: $text = _("Groups"); break; + case CRITERION_REQUESTER: $text = _("Requester"); break; + case CRITERION_ADDED_COMMENT: $text = _("Commentor"); break; + case CRITERION_COMMENT: $text = _("Comment"); break; + case CRITERION_SUMMARY: $text = _("Summary"); break; + + case CRITERION_QUEUE: + $queue = $whups_driver->getQueue($value); + if ($queue) { + $text = _("Queue"); + $value = $queue['name']; + } + break; + + case CRITERION_VERSION: + $version = $whups_driver->getVersion($value); + if ($version) { + $text = _("Version"); + $value = $version['name']; + } + break; + + case CRITERION_TYPE: + $text = _("Type"); + $value = $whups_driver->getTypeName($value); + break; + + case CRITERION_STATE: + // The value of the following depends on the type. + $state = $whups_driver->getState($value); + if ($state && isset($this->ticketTypes[$state['type']])) { + $text = '[' . $this->ticketTypes[$state['type']] . '] ' . + _("State"); + $value = $state['name']; + } + break; + + case CRITERION_PRIORITY: + $state = $whups_driver->getPriority($value); + $text = '[' . $this->ticketTypes[$state['type']] . '] ' . + _("Priority"); + $value = $state['name']; + break; + + case CRITERION_ATTRIBUTE: + // The value of the following depends on the type. + $aname = $whups_driver->getAttributeName($cvalue); + $type = $this->attributes[$cvalue]['type_id']; + $text = ''; + if (isset($this->ticketTypes[$type])) { + $text = '[' . $this->ticketTypes[$type] . '] '; + } + $text .= sprintf("Attribute \"%s\"", $aname); + break; + + case CRITERION_TIMESTAMP: + $text = _("Created"); + $value = strftime($GLOBALS['prefs']->getValue('report_time_format'), $value); + break; + + case CRITERION_UPDATED: + $text = _("Updated"); + $value = strftime($GLOBALS['prefs']->getValue('report_time_format'), $value); + break; + + case CRITERION_RESOLVED: + $text = _("Resolved"); + $value = strftime($GLOBALS['prefs']->getValue('report_time_format'), $value); + break; + + case CRITERION_ASSIGNED: + $text = _("Assigned"); + $value = strftime($GLOBALS['prefs']->getValue('report_time_format'), $value); + break; + + case CRITERION_DUE: + $text = _("Due"); + $value = strftime($GLOBALS['prefs']->getValue('report_time_format'), $value); + break; + } + + if (!isset($text)) { + $text = sprintf(_("Unknown node type %s"), $type); + break; + } + + $text .= ' '; + + switch ($operator) { + case OPERATOR_GREATER: + $text .= _("is greater than"); + break; + + case OPERATOR_LESS: + $text .= _("is less than"); + break; + + case OPERATOR_EQUAL: + $text .= _("is"); + break; + + case OPERATOR_CI_SUBSTRING: + $text .= _("contains (case insensitive) substring"); + break; + + case OPERATOR_CS_SUBSTRING: + $text .= _("contains (case sensitive) substring"); + break; + + case OPERATOR_WORD: + $text .= _("contains the word"); + break; + + case OPERATOR_PATTERN: + $text .= _("matches the pattern"); + break; + } + + $text .= " $value"; + break; + + default: + $text = sprintf(_("Unknown node type %s"), $type); + break; + } + + // Stick vertical-align: middle; on everything to make it look a + // little nicer. + $fimgattrs = 'height="20" width="0" style="vertical-align: middle;"'; + $imgattrs = 'height="20" width="20" style="vertical-align: middle;"'; + $imgdir = $registry->getImageDir('horde'); + + $space = ''; + $count = count($more); + + if ($count == 0) { + // Always have at least one image to make sure all rows are the + // same height. + $space = Horde::img('tree/blank.png', '', $fimgattrs, $imgdir) . "\n"; + } else { + for ($i = 0; $i < $count - 1; $i++) { + if ($more[$i] == 1) { + $space .= Horde::img('tree/line.png', '|', $imgattrs, $imgdir) . "\n"; + } else { + $space .= Horde::img('tree/blank.png', '', $imgattrs, $imgdir) . "\n"; + } + } + } + + if ($count > 0) { + if ($more[$count - 1] == 1) { + $space .= Horde::img('tree/join.png', '+', $imgattrs, $imgdir) . "\n"; + } else { + $space .= Horde::img('tree/joinbottom.png', '-', $imgattrs, $imgdir) . "\n"; + } + } + + $extra = ($this->isActive ? '' : ' disabled="disabled"'); + $extra .= ($pathstring == $this->currentPath ? ' checked="checked"' : ''); + include WHUPS_TEMPLATES . '/renderer/query/render.inc'; + } + + function _renderEnd() + { + echo '
'; + } + +} \ No newline at end of file diff --git a/whups/lib/Reports.php b/whups/lib/Reports.php new file mode 100644 index 000000000..64a4b9ab4 --- /dev/null +++ b/whups/lib/Reports.php @@ -0,0 +1,248 @@ + + * @package Whups + */ +class Whups_Reports { + + var $_backend; + + var $_opentickets; + + var $_closedtickets; + + var $_alltickets; + + function Whups_Reports($whups_driver) + { + $this->_backend = $whups_driver; + } + + function getDataSet($report) + { + $operation = 'inc'; + $state = null; + list($type, $field) = explode('|', $report); + if (substr($type, 0, 1) == '@') { + list($type, $operation, $state) = explode(':', substr($type, 1)); + } + $tickets = &$this->_getTicketSet($type, ($field == 'owner')); + + if (substr($field, 0, 7) == 'user_id' || $field == 'owner') { + $user = true; + } else { + $user = false; + } + + $dataset = array(); + foreach ($tickets as $info) { + switch ($state) { + case 'open': + require_once 'Date/Calc.php'; + + $date1 = getdate($info['date_resolved']); + $date2 = getdate($info['timestamp']); + $newdata = Date_Calc::dateDiff($date1['mday'], + $date1['mon'], + $date1['year'], + $date2['mday'], + $date2['mon'], + $date2['year']); + break; + + default: + $newdata = 1; + } + + if (empty($info[$field])) { + $this->_updateDataSet($dataset, _("None"), $newdata, $operation); + } else { + if ($user) { + $col = Whups::formatUser($info[$field], false); + } else { + $col = $info[$field]; + } + + $this->_updateDataSet($dataset, $col, $newdata, $operation); + } + } + + // Perform any necessary post-processing on the dataset - process + // averages, for example. + switch ($operation) { + case 'avg': + foreach ($dataset as $index => $data) { + $dataset[$index] = number_format(array_sum($data) / count($data), 2); + } + break; + } + + // Sort + ksort($dataset); + + // Return the final data. + return $dataset; + } + + function _updateDataSet(&$dataset, $index, $newdata, $operation) + { + if (isset($dataset[$index])) { + switch ($operation) { + case 'inc': + $dataset[$index] += $newdata; + break; + + case 'max': + case 'min': + $dataset[$index] = $operation($newdata, $dataset[$index]); + break; + + case 'avg': + $dataset[$index][] = $newdata; + break; + } + } else { + switch ($operation) { + case 'avg': + $dataset[$index] = array($newdata); + break; + + default: + $dataset[$index] = $newdata; + } + } + } + + /** + * Returns a time (max, min, avg) that tickets are in a particular state + * (open, assigned, etc.). + * + * @param string $operation One of 'max', 'min', or 'avg'. + * @param string $state The state to measure - 'open', etc. + * @param string $group_by A ticket property by which to group the + * results. + * + * @return integer|array The time value requested, or an array of values, + * if the $group_by parameter has been specified. + */ + function getTime($stat, $group_by = null) + { + list($operation, $state) = explode('|', $stat); + + $tickets = &$this->_getTicketSet('closed'); + if (!count($tickets)) { + return PEAR::raiseError(_("There is no data for this report.")); + } + + $dataset = array(); + if (empty($group_by)) { + $dataset[0] = array(); + } + foreach ($tickets as $info) { + if (is_null($info['date_resolved'])) { + continue; + } + + switch ($state) { + case 'open': + require_once 'Date/Calc.php'; + + $date1 = getdate($info['date_resolved']); + $date2 = getdate($info['timestamp']); + $diff = Date_Calc::dateDiff($date1['mday'], + $date1['mon'], + $date1['year'], + $date2['mday'], + $date2['mon'], + $date2['year']); + if (empty($group_by)) { + $dataset[0][] = $diff; + } else { + if (!isset($info[$group_by])) { + continue; + } + if (!isset($dataset[$info[$group_by]])) { + $dataset[$info[$group_by]] = array(); + } + $dataset[$info[$group_by]][] = $diff; + } + + break; + } + } + + if (!count($dataset) || (is_null($group_by) && !count($dataset[0]))) { + return 'N/A'; + } + + switch ($operation) { + case 'min': + case 'max': + foreach (array_keys($dataset) as $group) { + $dataset[$group] = $operation($dataset[$group]); + } + break; + + case 'avg': + foreach (array_keys($dataset) as $group) { + $dataset[$group] = round(array_sum($dataset[$group]) / count($dataset[$group]), 2); + } + break; + } + + if (empty($group_by)) { + $dataset = $dataset[0]; + } + + return $dataset; + } + + /** + * Loads a set of tickets, and cache the result inside the Whups_Reports:: + * object to save on database access. + * + * @access private + * + * @param string $type 'open', 'closed', or 'all' - the set of + * tickets to fetch. A previously cached set + * will be returned if it is available. + * @param boolean $expanded List tickets once for each owner of the + * ticket? + * + * @return array A reference to the cached ticket set. + */ + function &_getTicketSet($type, $expanded = false) + { + $queues = array_keys(Whups::permissionsFilter($this->_backend->getQueues(), 'queue')); + $expanded = (int)$expanded; + switch ($type) { + case 'open': + if (is_null($this->_opentickets[$expanded])) { + $this->_opentickets[$expanded] = $this->_backend->getTicketsByProperties(array('nores' => true, 'queue' => $queues), true, $expanded); + } + return $this->_opentickets[$expanded]; + + case 'closed': + if (is_null($this->_closedtickets[$expanded])) { + $this->_closedtickets[$expanded] = $this->_backend->getTicketsByProperties(array('res' => true, 'queue' => $queues), true, $expanded); + } + return $this->_closedtickets[$expanded]; + + case 'all': + if (is_null($this->_alltickets[$expanded])) { + $this->_alltickets[$expanded] = $this->_backend->getTicketsByProperties(array('queue' => $queues), true, $expanded); + } + return $this->_alltickets[$expanded]; + } + } + +} diff --git a/whups/lib/Scheduler/whups.php b/whups/lib/Scheduler/whups.php new file mode 100644 index 000000000..51938fc79 --- /dev/null +++ b/whups/lib/Scheduler/whups.php @@ -0,0 +1,47 @@ +_runtime = time(); + + // See if we need to include the reminders config file. + if (filemtime(WHUPS_BASE . '/config/reminders.php') > $this->_filestamp) { + $this->_filestamp = $this->_runtime; + include WHUPS_BASE . '/config/reminders.php'; + $this->_reminders = $reminders; + } + + foreach ($this->_reminders as $reminder) { + $ds = new Horde_Scheduler_cronDate($reminder['frequency']); + if ($ds->scheduledAt($this->_runtime)) { + if (!empty($reminder['server_name'])) { + $GLOBALS['conf']['server']['name'] = $reminder['server_name']; + } + $vars = new Horde_Variables($reminder); + Whups::sendReminders($vars); + } + } + } + +} diff --git a/whups/lib/Ticket.php b/whups/lib/Ticket.php new file mode 100644 index 000000000..f53b277b1 --- /dev/null +++ b/whups/lib/Ticket.php @@ -0,0 +1,1009 @@ + + * @author Jan Schneider + * @package Whups + */ +class Whups_Ticket { + + /** + * The id of the ticket this object wraps. + * + * @var integer + */ + var $_id; + + /** + * The current values of the ticket. + * + * @var array + */ + var $_details; + + /** + * Array of changes to make to the ticket. + * + * @var array + */ + var $_changes = array(); + + /** + * Returns a ticket object for an id. + * + * @static + * + * @param integer $id The ticket id. + * + * @return Whups_Ticket Either a Whups_Ticket object on success or a + * PEAR_Error object on failure. + */ + function makeTicket($id) + { + global $whups_driver; + + $details = $whups_driver->getTicketDetails($id); + if (is_a($details, 'PEAR_Error')) { + return $details; + } else { + $ticket = new Whups_Ticket($id, $details); + return $ticket; + } + } + + /** + * Creates a new ticket. + * + * Pretty bare wrapper around Whups_Driver::addTicket(). + * + * @static + * + * @param array $info A hash with ticket information. + * + * @return Whups_Ticket Either a Whups_Ticket object on success or a + * PEAR_Error object on failure. + */ + function newTicket($info, $requester) + { + global $whups_driver; + + if (!isset($info['type'])) { + $info['type'] = $whups_driver->getDefaultType($info['queue']); + if (is_null($info['type'])) { + $queue = $whups_driver->getQueue($info['queue']); + return PEAR::raiseError( + sprintf(_("No type for this ticket and no default type for queue \"%s\" specified."), + $queue['name'])); + } + } + if (!isset($info['state'])) { + $info['state'] = $whups_driver->getDefaultState($info['type']); + if (is_null($info['state'])) { + return PEAR::raiseError( + sprintf(_("No state for this ticket and no default state for ticket type \"%s\" specified."), + $whups_driver->getTypeName($info['type']))); + } + } + if (!isset($info['priority'])) { + $info['priority'] = $whups_driver->getDefaultPriority($info['type']); + if (is_null($info['priority'])) { + return PEAR::raiseError( + sprintf(_("No priority for this ticket and no default priority for ticket type \"%s\" specified."), + $whups_driver->getTypeName($info['type']))); + } + } + + $id = $whups_driver->addTicket($info, $requester); + if (is_a($id, 'PEAR_Error')) { + return $id; + } + + $details = $whups_driver->getTicketDetails($id, false); + if (is_a($details, 'PEAR_Error')) { + return $details; + } + + $ticket = new Whups_Ticket($id, $details); + + // Add attachment if one was uploaded. + if (!empty($info['newattachment']['name'])) { + $ticket->change( + 'attachment', + array('name' => $info['newattachment']['name'], + 'tmp_name' => $info['newattachment']['tmp_name'])); + } + + // Check for a deferred attachment upload. + if (!empty($info['deferred_attachment']) && + !empty($_SESSION['whups']['deferred_attachment'][$info['deferred_attachment']])) { + $ticket->change( + 'attachment', + array('name' => $info['deferred_attachment'], + 'tmp_name' => $_SESSION['whups']['deferred_attachment'][$info['deferred_attachment']])); + + unlink($_SESSION['whups']['deferred_attachment'][$info['deferred_attachment']]); + } + + // Send email notifications. + $ticket->notify($ticket->get('user_id_requester'), true); + + // Commit any changes (new attachments, etc.) + $ticket->commit($ticket->get('user_id_requester'), + $info['last-transaction'], false); + + return $ticket; + } + + /** + * Constructor. + * + * @param integer $id The ticket id. + * @param array $details The hash of ticket information. + */ + function Whups_Ticket($id, $details) + { + $this->_id = $id; + $this->_details = $details; + } + + /** + * Returns all ticket information. + * + * @return array The ticket information. + */ + function getDetails() + { + return $this->_details; + } + + /** + * Returns the ticket id. + * + * @return integer The ticket id. + */ + function getId() + { + return $this->_id; + } + + /** + * Returns a piece of information from this ticket. + * + * @param string $detail The detail to return. + * + * @return mixed The detail value. + */ + function get($detail) + { + return isset($this->_details[$detail]) + ? $this->_details[$detail] + : null; + } + + /** + * Changes a detail of the ticket to a new value. + * + * Never touches the backend; do not use for changes that you want to + * persist. + * + * @param string $detail The detail to change. + * @param string $value The new detail value. + */ + function set($detail, $value) + { + $this->_details[$detail] = $value; + } + + /** + * Tracks that a detail of the ticket should change, but does not actually + * make the change until commit() is called. + * + * @see commit() + * + * @param string $detail The detail to change. + * @param string $value The new detail value. + */ + function change($detail, $value) + { + $previous_value = isset($this->_details[$detail]) + ? $this->_details[$detail] + : ''; + if ($previous_value != $value) { + $this->_changes[$detail] = array( + 'from' => $this->get($detail), + 'from_name' => $this->get($detail . '_name'), + 'to' => $value); + } + } + + /** + * Goes through a list of built-up changes and commits them to the + * backend. + * + * This will send email updates by default, update the ticket log, etc. + * + * @see change() + * + * @param string $user The Horde user of the changes to be made. + * Defaults to the current user. + * @param integer $transaction The transaction these changes are part of. + * Defaults to a new transaction. + * @param boolean $notify Send ticket notifications? + * + * @return mixed True on success, PEAR_Error on failure. + */ + function commit($user = null, $transaction = null, $notify = true) + { + global $whups_driver; + + if (!count($this->_changes)) { + return true; + } + + if (is_null($user)) { + $user = Horde_Auth::getAuth(); + } + $author_email = isset($this->_changes['comment-email']['to']) + ? $this->_changes['comment-email']['to'] + : null; + + if (is_null($transaction)) { + // Get a new transaction id from the backend. + $transaction = $whups_driver->newTransaction($user, $author_email); + if (is_a($transaction, 'PEAR_Error')) { + return $transaction; + } + } + + // If this is a guest update, the comment id is going to map to the + // requester pseudo-username. + if ($user === false) { + $user = '-' . $transaction . '_transaction'; + } + + // Run hook before setting the dates. + try { + $this->_changes = Horde::callHook('ticket_update', array($this, $this->_changes), 'whups'); + } catch (Horde_Exception_HookNotSet $e) { + } + + // Update cached dates. + $timestamp = time(); + $this->_changes['date_updated'] = array('to' => $timestamp); + if (isset($this->_changes['state'])) { + $state = $whups_driver->getState($this->_changes['state']['to']); + if (is_a($state, 'PEAR_Error')) { + return $state; + } + if ($state['category'] == 'assigned') { + $this->_changes['date_assigned'] = array('to' => $timestamp); + $this->_changes['date_resolved'] = array('to' => null); + } elseif ($state['category'] == 'resolved') { + $this->_changes['date_resolved'] = array('to' => $timestamp); + } else { + $this->_changes['date_resolved'] = array('to' => null); + } + } + + $updates = array(); + foreach ($this->_changes as $detail => $values) { + $value = $values['to']; + switch ($detail) { + case 'owners': + // Fetch $oldOwners list; then loop through $value adding and + // deleting as needed. + $oldOwners = $whups_driver->getOwners($this->_id); + $this->_changes['oldowners'] = $oldOwners; + + foreach ($value as $owner) { + if (empty($oldOwners[$owner])) { + $whups_driver->addTicketOwner($this->_id, $owner); + $whups_driver->updateLog($this->_id, $user, + array('assign' => $owner), + $transaction); + } else { + // Remove $owner from the old owners list; anyone left + // in $oldOwners will be removed. + unset($oldOwners[$owner]); + } + } + + // Delete removed owners and log the removals. + if (is_array($oldOwners)) { + foreach ($oldOwners as $owner) { + $whups_driver->deleteTicketOwner($this->_id, $owner); + $whups_driver->updateLog($this->_id, $user, + array('unassign' => $owner), + $transaction); + } + } + break; + + case 'comment': + $commentId = $whups_driver->addComment($this->_id, $value, + $user, $author_email); + if (is_a($commentId, 'PEAR_Error')) { + return $commentId; + } + + // Store the comment id in the updates array for the log. + $updates['comment'] = $commentId; + if (!empty($this->_changes['comment-perms'])) { + $this->addCommentPerms( + $commentId, + $this->_changes['comment-perms']['to']); + } + break; + + case 'comment-email': + case 'comment-perms': + // Skip these, handled in the comment case. + break; + + case 'attachment': + $result = $this->addAttachment($value['name'], + $value['tmp_name']); + if (is_a($result, 'PEAR_Error')) { + return $result; + } else { + // Store the new file name in the updates array for the + // log. + $updates['attachment'] = $value['name']; + } + break; + + case 'delete-attachment': + $result = $this->deleteAttachment($value); + if (is_a($result, 'PEAR_Error')) { + return $result; + } else { + // Store the deleted file name in the updates array for + // the log. + $updates['delete-attachment'] = $value; + } + break; + + case 'queue': + // Reset version if new queue is not versioned. + $newqueue = $whups_driver->getQueue($value); + if (empty($newqueue['queue_versioned'])) { + $updates['version'] = 0; + } + $updates['queue'] = $value; + + default: + $updates[$detail] = $value; + } + } + + if (count($updates)) { + $result = $whups_driver->updateTicket($this->_id, $updates); + if (is_a($result, 'PEAR_Error')) { + return $result; + } + + $result = $whups_driver->updateLog($this->_id, $user, $updates, + $transaction); + if (is_a($result, 'PEAR_Error')) { + return $result; + } + } + + // Reload $this->_details to make sure we have the latest information. + // + // @todo Only touch the db if we have to. + $details = $whups_driver->getTicketDetails($this->_id); + if (is_a($details, 'PEAR_Error')) { + return $details; + } + $this->_details = array_merge($this->_details, $details); + + // Send notification emails to all ticket listeners. + if ($notify) { + $this->notify($user, false); + } + + // Reset the changes array. + $this->_changes = array(); + + return true; + } + + /** + * Adds an attachment to this ticket. + * + * @param string $attachment_name The name of the attachment. + * @param string $attachment_file The temporary file containing the data + * to be stored. + * + * @return mixed True on success or PEAR_Error on failure. + */ + function addAttachment(&$attachment_name, $attachment_file) + { + global $conf; + + if (!isset($conf['vfs']['type'])) { + return PEAR::raiseError(_("The VFS backend needs to be configured to enable attachment uploads."), 'horde.error'); + } + + require_once 'VFS.php'; + $vfs = &VFS::singleton($conf['vfs']['type'], + Horde::getDriverConfig('vfs')); + if (is_a($vfs, 'PEAR_Error')) { + return $vfs; + } + + // Get existing attachment names. + $used_names = $this->listAllAttachments(); + + $dir = WHUPS_VFS_ATTACH_PATH . '/' . $this->_id; + while ((array_search($attachment_name, $used_names) !== false) || + $vfs->exists($dir, $attachment_name)) { + if (preg_match('/(.*)\[(\d+)\](\.[^.]*)?$/', $attachment_name, + $match)) { + $attachment_name = $match[1] . '[' . ++$match[2] . ']'; + if (isset($match[3])) { + $attachment_name .= $match[3]; + } + } else { + $dot = strrpos($attachment_name, '.'); + if ($dot === false) { + $attachment_name .= '[1]'; + } else { + $attachment_name = substr($attachment_name, 0, $dot) + . '[1]' . substr($attachment_name, $dot); + } + } + } + + return $vfs->write($dir, $attachment_name, $attachment_file, true); + } + + /** + * Removes an attachment from this ticket. + * + * @param string $attachment_name The name of the attachment. + * + * @return mixed True on success or PEAR_Error on failure. + */ + function deleteAttachment($attachment_name) + { + global $conf; + + if (!isset($conf['vfs']['type'])) { + return PEAR::raiseError(_("The VFS backend needs to be configured to enable attachment uploads."), 'horde.error'); + } + + require_once 'VFS.php'; + $vfs = &VFS::singleton($conf['vfs']['type'], + Horde::getDriverConfig('vfs')); + if (is_a($vfs, 'PEAR_Error')) { + return $vfs; + } + + $dir = WHUPS_VFS_ATTACH_PATH . '/' . $this->_id; + if (!$vfs->exists($dir, $attachment_name)) { + return PEAR::raiseError(sprintf(_("Attachment %s not found."), + $attachment_name), + 'horde.error'); + } + + return $vfs->deleteFile($dir, $attachment_name); + } + + /** + * Returns a list of all files that have been attached to this ticket, + * whether they still exist or not. + */ + function listAllAttachments() + { + $files = array(); + $history = $GLOBALS['whups_driver']->getHistory($this->_id); + foreach ($history as $row) { + if (isset($row['changes'])) { + foreach ($row['changes'] as $change) { + if (isset($change['type']) && + $change['type'] == 'attachment') { + $files[] = $change['value']; + } + } + } + } + + return array_unique($files); + } + + /** + * Redirects the browser to this ticket's view. + */ + function show() + { + header('Location: ' . Whups::urlFor('ticket', $this->_id, true)); + exit; + } + + /** + * Sets exclusive read permissions on a comment to a certain group. + * + * @param integer $commentId The id of the comment to restrict. + * @param string $group The group name to limit access by. + */ + function addCommentPerms($commentId, $group) + { + if (!empty($group)) { + $perm = &$GLOBALS['perms']->newPermission('whups:comments:' + . $commentId); + $perm->addGroupPermission($group, Horde_Perms::READ, false); + return $GLOBALS['perms']->addPermission($perm); + } + } + + /** + * Sets all properties of the ticket necessary to display the + * TicketDetailsForm. + * + * @param Horde_Variables $vars The form variables object to set info in. + */ + function setDetails(&$vars) + { + $vars->set('id', $this->getId()); + foreach ($this->getDetails() as $varname => $value) { + $vars->set($varname, $value); + } + + /* User formatting. */ + $vars->set('user_id_requester', + Whups::formatUser($this->get('user_id_requester'))); + $vars->set('user_id_owner', Whups::getOwners($this->_id)); + + /* Attachments. */ + $attachments = array(); + $files = Whups::getAttachments($this->_id); + if ($files) { + if (is_a($files, 'PEAR_Error')) { + $GLOBALS['notification']->push($files); + } else { + foreach ($files as $file) { + $attachments[] = Whups::attachmentUrl( + $this->_id, $file, $this->_details['queue']); + } + } + $vars->set('attachments', implode("
\n", $attachments)); + } + } + + /** + * Notifies all appropriate people of the creation/update of this ticket. + * + * @param string $author Who created/changed the ticket? + * @param boolean $isNew Is this a new ticket or a change to an existing + * one? + * @param array $listeners The list of listener that should receive the + * notification. If empty, the list will be + * created automatically. + */ + function notify($author, $isNew, $listeners = array()) + { + global $conf, $whups_driver; + + /* Get the attributes for this ticket. */ + $attributes = $whups_driver->getAttributesForType($this->get('type')); + + $fields = array( + 'queue' => _("Queue"), + 'version' => _("Version"), + 'type' => _("Type"), + 'state' => _("State"), + 'priority' => _("Priority"), + 'due' => _("Due"), + ); + + $field_names = array_merge($fields, array(_("Created By"), + _("Updated By"), + _("Summary"), + _("Owners"), + _("New Attachment"), + _("Deleted Attachment"))); + foreach ($attributes as $attribute) { + $field_names[] = $attribute['human_name']; + } + + /* Find the longest translated field name. */ + $length = 0; + foreach ($field_names as $field_name) { + $length = max($length, Horde_String::length($field_name)); + } + $wrap_break = "\n" . str_repeat(' ', $length + 2) . '| '; + $wrap_width = 73 - $length; + + /* Ticket URL. */ + $url = sprintf(_("Ticket URL: %s"), + Whups::urlFor('ticket', $this->_id, true, -1)); + + /* Ticket properties. */ + $table = "------------------------------------------------------------------------------\n" + . ' ' . Horde_String::pad(_("Ticket"), $length) . ' | ' + . $this->_id . "\n" . ' ' + . Horde_String::pad($isNew ? _("Created By") : _("Updated By"), $length) + . ' | ' . Whups::formatUser($author) . "\n"; + if (isset($this->_changes['summary'])) { + $table .= '-' . Horde_String::pad(_("Summary"), $length) . ' | ' + . Horde_String::wrap($this->_changes['summary']['from'], + $wrap_width, $wrap_break) + . "\n" . '+' . Horde_String::pad(_("Summary"), $length) . ' | ' + . Horde_String::wrap($this->get('summary'), $wrap_width, $wrap_break) + . "\n"; + } else { + $table .= ' ' . Horde_String::pad(_("Summary"), $length) . ' | ' + . Horde_String::wrap($this->get('summary'), $wrap_width, $wrap_break) + . "\n"; + } + + foreach ($fields as $field => $label) { + if ($name = $this->get($field . '_name')) { + if (isset($this->_changes[$field])) { + $table .= '-' . Horde_String::pad($label, $length) . ' | ' + . Horde_String::wrap($this->_changes[$field]['from_name'], + $wrap_width, $wrap_break) + . "\n" . '+' . Horde_String::pad($label, $length) . ' | ' + . Horde_String::wrap($name, $wrap_width, $wrap_break) . "\n"; + } else { + $table .= ' ' . Horde_String::pad($label, $length) . ' | ' + . Horde_String::wrap($name, $wrap_width, $wrap_break) . "\n"; + } + } + } + + /* Attribute changes. */ + foreach ($attributes as $id => $attribute) { + $attribute_id = 'attribute_' . $id; + $label = $attribute['human_name']; + if (isset($this->_changes[$attribute_id])) { + $table .= '-' . Horde_String::pad($label, $length) . ' | ' + . Horde_String::wrap($this->_changes[$attribute_id]['from'], + $wrap_width, $wrap_break) + . "\n" . '+' . Horde_String::pad($label, $length) . ' | ' + . Horde_String::wrap($this->_changes[$attribute_id]['to'], + $wrap_width, $wrap_break) + . "\n"; + } else { + $table .= ' ' . Horde_String::pad($label, $length) . ' | ' + . Horde_String::wrap($this->get($attribute_id), + $wrap_width, $wrap_break) + . "\n"; + } + } + + /* Show any change in ticket owners. */ + $owners = $oldOwners = Horde_String::wrap( + Whups::getOwners($this->_id, false, true), + $wrap_width, $wrap_break); + if (isset($this->_changes['oldowners'])) { + $oldOwners = Horde_String::wrap( + Whups::getOwners($this->_id, false, true, + $this->_changes['oldowners']), + $wrap_width, $wrap_break); + } + if ($owners != $oldOwners) { + $table .= '-' . Horde_String::pad(_("Owners"), $length) . ' | ' + . $oldOwners . "\n" . '+' . Horde_String::pad(_("Owners"), $length) + . ' | ' . $owners . "\n"; + } else { + $table .= ' ' . Horde_String::pad(_("Owners"), $length) . ' | ' + . $owners . "\n"; + } + + /* New Attachments. */ + if (isset($this->_changes['attachment'])) { + $table .= '+' . Horde_String::pad(_("New Attachment"), $length) . ' | ' + . $this->_changes['attachment']['to']['name'] . "\n"; + } + + /* Deleted Attachments. */ + if (isset($this->_changes['delete-attachment'])) { + $table .= '+' . Horde_String::pad(_("Deleted Attachment"), $length) + . ' | ' . $this->_changes['delete-attachment']['to'] . "\n"; + } + + $table .= "------------------------------------------------------------------------------"; + + /* Add the "do not reply" tag if we don't monitor incoming mail. */ + if (empty($conf['mail']['reply'])) { + $dont_reply = _("DO NOT REPLY TO THIS MESSAGE. THIS EMAIL ADDRESS IS NOT MONITORED.") . "\n\n"; + } else { + $dont_reply = ''; + } + + /* Build message template. */ + $identity = &Horde_Prefs_Identity::singleton(); + $name = $identity->getValue('fullname'); + if (empty($name)) { + $name = Horde_Auth::getBareAuth(); + } + + /* Get queue specific notification message text, if available. */ + $message_file = WHUPS_BASE . '/config/' + . ($isNew ? 'create_email' : 'notify_email'); + if (file_exists($message_file . '_' . $this->get('queue') . '.txt')) { + $message_file .= '_' . $this->get('queue'); + } + $message_file .= '.txt'; + + /* Prepare message text. */ + $message = Horde_String::convertCharset(file_get_contents($message_file), + 'UTF-8'); + $message = str_replace( + array('@@ticket_url@@', + '@@table@@', + '@@dont_reply@@', + '@@date@@', + '@@auth_name@@'), + array($url, $table, $dont_reply, + strftime($GLOBALS['prefs']->getValue('date_format')), + $name), + $message); + + /* Include Re: if the ticket isn't new for easy + * filtering/eyeballing. */ + $subject = $this->get('summary'); + if (!$isNew) { + $subject = 'Re: ' . $subject; + } + + if (empty($listeners)) { + if ($conf['mail']['incl_resp'] || + !count($whups_driver->getOwners($this->_id))) { + /* Include all responsible. */ + $listeners = $whups_driver->getListeners($this->_id, true, + true, true); + } else { + /* Don't include all responsible unless ticket is assigned. */ + $listeners = $whups_driver->getListeners($this->_id, true, + true, false); + } + + /* Notify both old and new queue users if the queue has changed. */ + if (isset($this->_changes['queue'])) { + $listeners = array_merge( + $listeners, + $whups_driver->getQueueUsers( + $this->_changes['queue']['from_name'])); + } + } + + /* Pass off to Whups_Driver::mail() to do the actual comment fetching, + * permissions checks, etc. */ + $whups_driver->mail($this->_id, $listeners, $subject, $message, $author, + false, $this->get('queue'), $isNew); + } + + /** + * Returns a plain text representation of a ticket. + * + * @param string $author Who created/changed the ticket? + * @param boolean $isNew Is this a new ticket or a change to an existing + * one? + */ + function toString() + { + $fields = array('queue' => _("Queue"), + 'version' => _("Version"), + 'type' => _("Type"), + 'state' => _("State"), + 'priority' => _("Priority"), + 'due' => _("Due")); + + /* Find longest translated field name. */ + $length = 0; + foreach (array_merge($fields, array(_("Summary"), _("Owners"))) + as $field) { + $length = max($length, Horde_String::length($field)); + } + $wrap_break = "\n" . str_repeat(' ', $length + 2) . '| '; + $wrap_width = 73 - $length; + + /* Ticket properties. */ + $message = ' ' . Horde_String::pad(_("Ticket"), $length) . ' | ' + . $this->_id . "\n" . ' ' . Horde_String::pad(_("Summary"), $length) + . ' | ' . Horde_String::wrap($this->get('summary'), + $wrap_width, $wrap_break) + . "\n"; + + foreach ($fields as $field => $label) { + if ($name = $this->get($field . '_name')) { + $message .= ' ' . Horde_String::pad($label, $length) . ' | ' + . Horde_String::wrap($name, $wrap_width, $wrap_break) . "\n"; + } + } + + $message .= ' ' . Horde_String::pad(_("Owners"), $length) . ' | ' + . Horde_String::wrap(Whups::getOwners($this->_id, false, true), + $wrap_width, $wrap_break) + . "\n"; + + return $message; + } + + function __toString() + { + return $this->toString(); + } + + /** + * Adds ticket attribute values to the ticket's details, and returns the + * list of attributes. + * + * @return array List of ticket attribute hashes. + */ + function addAttributes() + { + $attributes = $GLOBALS['whups_driver']->getAllTicketAttributesWithNames($this->getId()); + if (is_a($attributes, 'PEAR_Error')) { + return $attributes; + } + + foreach ($attributes as $attribute_id => $attribute) { + $this->set('attribute_' . $attribute_id, $attribute['value']); + } + return $attributes; + } + +} + +/** + * @package Whups + */ +class TicketDetailsForm extends Horde_Form { + + /** + */ + function TicketDetailsForm(&$vars, &$ticket, $title = '') + { + parent::Horde_Form($vars, $title); + + $date_params = array($GLOBALS['prefs']->getValue('date_format')); + $fields = array('summary', 'queue', 'version', 'type', 'state', + 'priority', 'owner', 'requester', 'created', 'due', + 'updated', 'assigned', 'resolved', 'attachments'); + $attributes = $ticket->addAttributes(); + if (is_a($attributes, 'PEAR_Error')) { + $attributes = array(); + } + + foreach ($attributes as $attribute) { + $fields[] = 'attribute_' . $attribute['id']; + } + + $grouped_fields = array($fields); + $grouped_hook = false; + try { + $grouped_fields = Horde::callHook('group_fields', array($ticket->get('type'), $fields), 'whups'); + $grouped_hook = true; + } catch (Horde_Exception_HookNotSet $e) { + } catch (Horde_Exception $e) { + Horde::logMessage($e, __FILE__, __LINE__, PEAR_LOG_ERR); + } + + foreach ($grouped_fields as $header => $fields) { + if ($grouped_hook) { + $this->addVariable($header, null, 'header', false); + } + foreach ($fields as $field) { + switch ($field) { + case 'summary': + $this->addVariable(_("Summary"), 'summary', 'text', true); + break; + + case 'queue': + if ($vars->get('queue_link')) { + $this->addVariable( + _("Queue"), 'queue_link', 'link', + true, false, null, + array(array('url' => $vars->get('queue_link'), + 'text' => $vars->get('queue_name')))); + } else { + $this->addVariable(_("Queue"), 'queue_name', 'text', + true); + } + break; + + case 'version': + if ($vars->get('version_name')) { + if ($vars->get('version_link')) { + $this->addVariable( + _("Queue Version"), 'version_name', 'link', + true, false, null, + array( + array('url' => $vars->get('version_link'), + 'text' => $vars->get('version_name')))); + } else { + $this->addVariable(_("Queue Version"), + 'version_name', 'text', true); + } + } + break; + + case 'type': + $this->addVariable(_("Type"), 'type_name', 'text', true); + break; + + case 'state': + $this->addVariable(_("State"), 'state_name', 'text', true); + break; + + case 'priority': + $this->addVariable(_("Priority"), 'priority_name', 'text', + true); + break; + + case 'owner': + $owner = &$this->addVariable(_("Owners"), 'user_id_owner', + 'email', false, false, null, + array(false, true)); + $owner->setDefault(_("Unassigned")); + break; + + case 'requester': + $this->addVariable(_("Requester"), 'user_id_requester', + 'email', false, false, null, + array(false, true)); + break; + + case 'created': + $this->addVariable(_("Created"), 'timestamp', 'date', + false, false, null, $date_params); + break; + + case 'due': + $this->addVariable(_("Due"), 'due', 'datetime', false, + false, null, $date_params); + break; + + case 'updated': + $this->addVariable(_("Updated"), 'date_updated', 'date', + false, false, null, $date_params); + break; + + case 'assigned': + $this->addVariable(_("Assigned"), 'date_assigned', 'date', + false, false, null, $date_params); + break; + + case 'resolved': + $this->addVariable(_("Resolved"), 'date_resolved', 'date', + false, false, null, $date_params); + break; + + case 'attachments': + $this->addVariable(_("Attachments"), 'attachments', 'html', + false); + break; + + default: + if (substr($field, 0, 10) == 'attribute_' && + isset($attributes[substr($field, 10)])) { + $attribute = $attributes[substr($field, 10)]; + $var = &$this->addVariable( + $attribute['human_name'], + 'attribute_' . $attribute['id'], + $attribute['type'], $attribute['required'], + $attribute['readonly'], $attribute['desc'], + $attribute['params']); + $var->setDefault($attribute['value']); + } + break; + } + } + } + } + +} diff --git a/whups/lib/View.php b/whups/lib/View.php new file mode 100755 index 000000000..bfdb9f583 --- /dev/null +++ b/whups/lib/View.php @@ -0,0 +1,37 @@ + + * @package Whups + */ + +class Whups_View { + + var $_params; + + function Whups_View($params) + { + $this->_params = $params; + if (!isset($this->_params['title'])) { + $this->_params['title'] = ''; + } + } + + function factory($view, $params) + { + $view = basename($view); + $class = 'Whups_View_' . $view; + if (!class_exists($class)) { + include dirname(__FILE__) . '/View/' . $view . '.php'; + } + if (class_exists($class)) { + return new $class($params); + } else { + return PEAR::raiseError(sprintf(_("No such view \"%s\" found"), $view)); + } + } + +} diff --git a/whups/lib/View/Results.php b/whups/lib/View/Results.php new file mode 100755 index 000000000..d7aee2f11 --- /dev/null +++ b/whups/lib/View/Results.php @@ -0,0 +1,44 @@ + + * Copyright 2001-2009 The Horde Project (http://www.horde.org/) + * + * @author Robert E. Coyle + * @author Michael J. Rubinsky + * @package Whups + */ +class Whups_View_Results extends Whups_View { + + var $_id; + + function Whups_View_Results($params) + { + parent::Whups_View($params); + $this->_id = md5(uniqid(mt_rand())); + } + + function html() + { + Horde::addScriptFile('prototype.js', 'horde', true); + Horde::addScriptFile('tables.js', 'horde', true); + + global $prefs, $registry; + + $sortby = $prefs->getValue('sortby'); + $sortdir = $prefs->getValue('sortdir'); + $sortdirclass = $sortdir ? 'sortup' : 'sortdown'; + + $ids = array(); + foreach ($this->_params['results'] as $info) { + $ids[] = $info['id']; + } + $_SESSION['whups']['tickets'] = $ids; + + include WHUPS_TEMPLATES . '/view/results.inc'; + } + +} \ No newline at end of file diff --git a/whups/lib/View/SavedQueries.php b/whups/lib/View/SavedQueries.php new file mode 100755 index 000000000..b3f889271 --- /dev/null +++ b/whups/lib/View/SavedQueries.php @@ -0,0 +1,28 @@ + + * Copyright 2001-2009 The Horde Project (http://www.horde.org/) + * + * See the enclosed file LICENSE for license information (BSD). If you + * did not receive this file, see http://www.horde.org/licenses/bsdl.php. + * + * @author Chuck Hagenbuch + * @author Michael J. Rubinsky + * @package Whups + */ +class Whups_View_SavedQueries extends Whups_View { + + // Need title, results in params. + function html($header = true) + { + if (!count($this->_params['results'])) { + return; + } + + include WHUPS_TEMPLATES . '/view/savedqueries.inc'; + + } + +} diff --git a/whups/lib/Whups.php b/whups/lib/Whups.php new file mode 100644 index 000000000..e1e37434d --- /dev/null +++ b/whups/lib/Whups.php @@ -0,0 +1,1004 @@ + + * Copyright 2001-2009 The Horde Project (http://www.horde.org/) + * + * See the enclosed file LICENSE for license information (BSD). If you + * did not receive this file, see http://www.horde.org/licenses/bsdl.php. + * + * @package Whups + */ + +/** + * The virtual path to use for VFS data. + */ +define('WHUPS_VFS_ATTACH_PATH', '.horde/whups/attachments'); + +/** + * The Whups:: class provides functionality that all of Whups needs, + * or that should be encapsulated from other parts of the Whups + * system. + * + * @package Whups + */ +class Whups { + + function urlFor($controller, $data, $full = false, $append_session = 0) + { + $rewrite = isset($GLOBALS['conf']['urls']['pretty']) && + $GLOBALS['conf']['urls']['pretty'] == 'rewrite'; + + switch ($controller) { + case 'queue': + if ($rewrite) { + if (is_array($data)) { + if (isset($data['slug'])) { + $slug = $data['slug']; + } else { + $slug = $data['id']; + } + } else { + $slug = (int)$data; + } + return Horde::applicationUrl('queue/' . $slug, $full, $append_session); + } else { + if (is_array($data)) { + $id = $data['id']; + } else { + $id = $data; + } + return Horde::applicationUrl('queue/?id=' . $id, $full, $append_session); + } + break; + + case 'ticket': + $id = (int)$data; + if ($rewrite) { + return Horde::applicationUrl('ticket/' . $id, $full, $append_session); + } else { + return Horde::applicationUrl('ticket/?id=' . $id, $full, $append_session); + } + break; + + case 'ticket_rss': + $id = (int)$data; + if ($rewrite) { + return Horde::applicationUrl('ticket/' . $id . '/rss', $full, $append_session); + } else { + return Horde::applicationUrl('ticket/rss.php?id=' . $id, $full, $append_session); + } + break; + + case 'ticket_action': + list($controller, $id) = $data; + if ($rewrite) { + return Horde::applicationUrl('ticket/' . $id . '/' . $controller, $full, $append_session = 0); + } else { + return Horde::applicationUrl('ticket/' . $controller . '.php?id=' . $id, $full, $append_session = 0); + } + + case 'query': + case 'query_rss': + if ($rewrite) { + if (is_array($data)) { + if (isset($data['slug'])) { + $slug = $data['slug']; + } else { + $slug = $data['id']; + } + } else { + $slug = (int)$data; + } + $url = 'query/' . $slug; + if ($controller == 'query_rss') { + $url .= '/rss'; + } + return Horde::applicationUrl($url, $full, $append_session); + } else { + if (is_array($data)) { + if (isset($data['slug'])) { + $param = array('slug' => $data['slug']); + } else { + $param = array('query' => $data['id']); + } + } else { + $param = array('query' => $data); + } + $url = $controller == 'query' ? 'query/run.php' : 'query/rss.php'; + $url = Horde_Util::addParameter($url, $param); + return Horde::applicationUrl($url, $full, $append_session); + } + break; + } + } + + function sortTickets(&$tickets, $by = null, $dir = null) + { + if (is_null($by)) { + $by = $GLOBALS['prefs']->getValue('sortby'); + } + if (is_null($dir)) { + $dir = $GLOBALS['prefs']->getValue('sortdir'); + } + + Whups::sortBy($by); + Whups::sortDir($dir); + + usort($tickets, array('Whups', '_sort')); + } + + function sortBy($b = null) + { + static $by; + + if (!is_null($b)) { + $by = $b; + } else { + return $by; + } + } + + function sortDir($d = null) + { + static $dir; + + if (!is_null($d)) { + $dir = $d; + } else { + return $dir; + } + } + + function _sort($a, $b, $sortby = null, $sortdir = null) + { + static $by, $dir; + if (is_null($by)) { + $by = Whups::sortBy(); + $dir = Whups::sortDir(); + } + + if (is_null($sortby)) { + $sortby = $by; + } + if (is_null($sortdir)) { + $sortdir = $dir; + } + + if (is_array($sortby)) { + if (!isset($a[$sortby[0]])) { + $a[$sortby[0]] = null; + } + if (!isset($b[$sortby[0]])) { + $b[$sortby[0]] = null; + } + + if (!count($sortby)) { + return 0; + } elseif ($a[$sortby[0]] > $b[$sortby[0]]) { + return $sortdir[0] ? -1 : 1; + } elseif ($a[$sortby[0]] === $b[$sortby[0]]) { + array_shift($sortby); + array_shift($sortdir); + return Whups::_sort($a, $b, $sortby, $sortdir); + } else { + return $sortdir[0] ? 1 : -1; + } + } else { + $a_val = isset($a[$sortby]) ? $a[$sortby] : null; + $b_val = isset($b[$sortby]) ? $b[$sortby] : null; + + // Take care of the simplest case first + if ($a_val === $b_val) { + return 0; + } + + if ((is_numeric($a_val) || is_null($a_val)) && + (is_numeric($b_val) || is_null($b_val))) { + // Numeric comparison + if ($sortdir) { + return (int)($b_val > $a_val); + } else { + return (int)($a_val > $b_val); + } + } else { + // String comparison + if ($sortdir) { + return strcoll($b[$sortby], $a[$sortby]); + } else { + return strcoll($a[$sortby], $b[$sortby]); + } + } + } + } + + /** + * Returns a new or the current CAPTCHA string. + * + * @param boolean $new If true, a new CAPTCHA is created and returned. + * The current, to-be-confirmed string otherwise. + * + * @return string A CAPTCHA string. + */ + function getCAPTCHA($new = false) + { + if ($new || empty($_SESSION['whups']['CAPTCHA'])) { + $_SESSION['whups']['CAPTCHA'] = ''; + for ($i = 0; $i < 5; $i++) { + $_SESSION['whups']['CAPTCHA'] .= chr(rand(65, 90)); + } + } + return $_SESSION['whups']['CAPTCHA']; + } + + /** + * List all templates of a given type. + * + * @param string $type The kind of template ('searchresults', etc.) to list. + * + * @return array All templates of the requested type. + */ + function listTemplates($type) + { + $templates = array(); + + require WHUPS_BASE . '/config/templates.php'; + foreach ($_templates as $name => $info) { + if ($info['type'] == $type) { + $templates[$name] = $info['name']; + } + } + + return $templates; + } + + /** + * Get the current ticket - use the 'id' request variable to + * determine what to look for. Will redirect to the default view + * if the ticket isn't found or if permissions checks fail. + */ + function getCurrentTicket() + { + $id = preg_replace('|\D|', '', Horde_Util::getFormData('id')); + if (!$id) { + $GLOBALS['notification']->push(_("Invalid Ticket Id"), 'horde.error'); + header('Location: ' . Horde::applicationUrl($GLOBALS['prefs']->getValue('whups_default_view') . '.php', true)); + exit; + } + + $ticket = Whups_Ticket::makeTicket($id); + if (is_a($ticket, 'PEAR_Error')) { + if ($ticket->code === 0) { + // No permissions to this ticket. + $GLOBALS['notification']->push($ticket->getMessage(), 'horde.warning'); + $url = Horde::applicationUrl($GLOBALS['prefs']->getValue('whups_default_view') . '.php', true); + } else { + $GLOBALS['notification']->push($ticket->getMessage(), 'horde.error'); + $url = Horde::applicationUrl($GLOBALS['prefs']->getValue('whups_default_view') . '.php', true); + } + + header('Location: ' . $url); + exit; + } + + return $ticket; + } + + /** + * Get the tabs for navigating between ticket actions. + */ + function getTicketTabs(&$vars, $id) + { + $tabs = new Horde_Ui_Tabs(null, $vars); + $queue = $vars->get('queue'); + + $tabs->addTab(_("_History"), Whups::urlFor('ticket', $id), 'history'); + if (Whups::hasPermission($queue, 'queue', 'update')) { + $tabs->addTab(_("_Update"), + Whups::urlFor('ticket_action', array('update', $id)), + 'update'); + } else { + $tabs->addTab(_("_Comment"), + Whups::urlFor('ticket_action', array('comment', $id)), + 'comment'); + } + $tabs->addTab(_("_Watch"), + Whups::urlFor('ticket_action', array('watch', $id)), + 'watch'); + if (Whups::hasPermission($queue, 'queue', Horde_Perms::DELETE)) { + $tabs->addTab(_("S_et Queue"), + Whups::urlFor('ticket_action', array('queue', $id)), + 'queue'); + } + if (Whups::hasPermission($queue, 'queue', 'update')) { + $tabs->addTab(_("Set _Type"), + Whups::urlFor('ticket_action', array('type', $id)), + 'type'); + } + if (Whups::hasPermission($queue, 'queue', Horde_Perms::DELETE)) { + $tabs->addTab(_("_Delete"), + Whups::urlFor('ticket_action', array('delete', $id)), + 'delete'); + } + + return $tabs; + } + + /** + * Returns whether a user has a certain permission on a single resource. + * + * @param mixed $in A single resource to check. + * @param string $filter The kind of resource specified in + * $in, currently only 'queue'. + * @param string|integer $permission A permission, either 'assign' or + * 'update', or one of the PERM_* + * constants. + * @param string $user A user name. + * + * @return boolean True if the user has the specified permission. + */ + function hasPermission($in, $filter, $permission, $user = null) + { + global $perms; + + if (is_null($user)) { + $user = Horde_Auth::getAuth(); + } + + if ($permission == 'update' || + $permission == 'assign' || + $permission == 'requester') { + $admin = Horde_Auth::isAdmin('whups:admin', Horde_Perms::EDIT, $user); + } else { + $admin = Horde_Auth::isAdmin('whups:admin', $permission, $user); + } + + switch ($filter) { + case 'queue': + if ($admin) { + return true; + } + switch ($permission) { + case Horde_Perms::SHOW: + case Horde_Perms::READ: + case Horde_Perms::EDIT: + case Horde_Perms::DELETE: + if ($perms->hasPermission('whups:queues:' . $in, $user, + $permission)) { + return true; + } + break; + + default: + if ($perms->exists('whups:queues:' . $in . ':' . $permission)) { + if (($permission == 'update' || + $permission == 'assign' || + $permission == 'requester') && + $perms->getPermissions( + 'whups:queues:' . $in . ':' . $permission, $user)) { + return true; + } + } else { + // If the sub-permission doesn't exist, use the queue + // permission at an EDIT level and lock out guests. + if ($permission != 'requester' && + Horde_Auth::getAuth() && + $perms->hasPermission('whups:queues:' . $in, $user, + Horde_Perms::EDIT)) { + return true; + } + } + break; + } + break; + } + + return false; + } + + /** + * Filters a list of resources based on whether a user use certain + * permissions on it. + * + * @param array $in A list of resources to check. + * @param string $filter The kind of resource specified in $in, + * one of 'queue', 'queue_id', 'reply', or + * 'comment'. + * @param integer $permission A permission, one of the PERM_* constants. + * @param string $user A user name. + * @param string $creator The creator of an object in the resource, + * e.g. a ticket creator. + * + * @return array The list of resources matching the permission criteria. + */ + function permissionsFilter($in, $filter, $permission = Horde_Perms::READ, + $user = null, $creator = null) + { + global $perms; + + if (is_null($user)) { + $user = Horde_Auth::getAuth(); + } + + $admin = Horde_Auth::isAdmin('whups:admin', $permission, $user); + $out = array(); + + switch ($filter) { + case 'queue': + if ($admin) { + return $in; + } + foreach ($in as $queueID => $name) { + if ($perms->hasPermission('whups:queues:' . $queueID, $user, + $permission, $creator)) { + $out[$queueID] = $name; + } + } + break; + + case 'queue_id': + if ($admin) { + return $in; + } + foreach ($in as $queueID) { + if ($perms->hasPermission('whups:queues:' . $queueID, $user, + $permission, $creator)) { + $out[] = $queueID; + } + } + break; + + case 'reply': + if ($admin) { + return $in; + } + foreach ($in as $replyID => $name) { + if (!$perms->exists('whups:replies:' . $replyID) || + $perms->hasPermission('whups:replies:' . $replyID, + $user, $permission, $creator)) { + $out[$replyID] = $name; + } + } + break; + + case 'comment': + foreach ($in as $key => $row) { + foreach ($row as $rkey => $rval) { + if ($rkey != 'changes') { + $out[$key][$rkey] = $rval; + continue; + } + foreach ($rval as $i => $change) { + if ($change['type'] != 'comment' || + !$perms->exists('whups:comments:' . $change['value'])) { + $out[$key][$rkey][$i] = $change; + if (isset($change['comment'])) { + $out[$key]['comment_text'] = $change['comment']; + } + } elseif ($perms->exists('whups:comments:' . $change['value'])) { + $change['private'] = true; + $out[$key][$rkey][$i] = $change; + if (isset($change['comment'])) { + if ($admin || + $perms->hasPermission('whups:comments:' . $change['value'], + $user, Horde_Perms::READ, $creator)) { + $out[$key]['comment_text'] = $change['comment']; + } else { + $out[$key][$rkey][$i]['comment'] = _("[Hidden]"); + } + } + } + } + } + } + break; + + default: + $out = $in; + break; + } + + return $out; + } + + function getOwnerCriteria($user) + { + $criteria = array('user:' . $user); + $groups = &Group::singleton(); + $mygroups = $groups->getGroupMemberships(Horde_Auth::getAuth()); + foreach ($mygroups as $id => $group) { + $criteria[] = 'group:' . $id; + } + + return $criteria; + } + + /** + */ + function getUserAttributes($user = null) + { + static $results; + + if (is_null($user)) { + $user = Horde_Auth::getAuth(); + } elseif (empty($user)) { + return array('user' => '', + 'name' => '', + 'email' => ''); + } + + if (!isset($results[$user])) { + if (strpos($user, ':') !== false) { + list($type, $user) = explode(':', $user, 2); + } else { + $type = 'user'; + } + + // Default this; some of the cases below might change it. + $results[$user]['user'] = $user; + $results[$user]['type'] = $type; + + if ($type == 'user') { + if (substr($user, 0, 2) == '**') { + unset($results[$user]); + $user = substr($user, 2); + + $results[$user]['user'] = $user; + $results[$user]['name'] = ''; + $results[$user]['email'] = ''; + + try { + $addr_arr = Horde_Mime_Address::parseAddressList($user); + if (isset($addr_arr[0])) { + $results[$user]['name'] = isset($addr_arr[0]['personal']) + ? $addr_arr[0]['personal'] : ''; + $results[$user]['email'] = $addr_arr[0]['mailbox'] . '@' + . $addr_arr[0]['host']; + } + } catch (Horde_Mime_Exception $e) {} + } elseif ($user < 0) { + global $whups_driver; + + $results[$user]['user'] = ''; + $results[$user]['name'] = ''; + $results[$user]['email'] = $whups_driver->getGuestEmail($user); + + try { + $addr_arr = Horde_Mime_Address::parseAddressList($results[$user]['email']); + if (isset($addr_arr[0])) { + $results[$user]['name'] = isset($addr_arr[0]['personal']) + ? $addr_arr[0]['personal'] : ''; + $results[$user]['email'] = $addr_arr[0]['mailbox'] . '@' + . $addr_arr[0]['host']; + } + } catch (Horde_Mime_Exception $e) {} + } else { + $identity = &Horde_Prefs_Identity::singleton('none', $user); + + $results[$user]['name'] = $identity->getValue('fullname'); + $results[$user]['email'] = $identity->getValue('from_addr'); + } + } elseif ($type == 'group') { + $groups = &Group::singleton(); + $group = $groups->getGroupById($user); + if (is_a($group, 'PEAR_Error')) { + $results['user']['name'] = ''; + $results['user']['email'] = ''; + } else { + $results[$user]['user'] = $group->getShortName(); + $results[$user]['name'] = $group->getShortName(); + $results[$user]['email'] = $group->get('email'); + } + } + } + + return $results[$user]; + } + + /** + * Returns a user string from the user's name and email address. + * + * @param string|array $user A user name or a hash as returned from + * {@link Whups::getUserAttributes()}. + * @param boolean $showemail Whether to include the email address. + * @param boolean $showname Whether to include the full name. + * @param boolean $html Whether to "prettify" the result. If true, + * email addresses are obscured, the result is + * escaped for HTML output, and a group icon + * might be added. + */ + function formatUser($user = null, $showemail = true, $showname = true, + $html = false) + { + if (!is_null($user) && empty($user)) { + return ''; + } + + if (is_array($user)) { + $details = $user; + } else { + $details = Whups::getUserAttributes($user); + } + if (!empty($details['name'])) { + $name = $details['name']; + } else { + $name = $details['user']; + } + if (($showemail || empty($name) || !$showname) && + !empty($details['email'])) { + if ($html && strpos($details['email'], '@') !== false) { + $details['email'] = str_replace(array('@', '.'), + array(' (at) ', ' (dot) '), + $details['email']); + } + + if (!empty($name) && $showname) { + $name .= ' <' . $details['email'] . '>'; + } else { + $name = $details['email']; + } + } + + if ($html) { + $name = htmlspecialchars($name); + if ($details['type'] == 'group') { + $name = Horde::img('group.png', + !empty($details['name']) + ? $details['name'] + : $details['user'], + '', + $GLOBALS['registry']->getImageDir('horde')) + . $name; + } + } + + return $name; + } + + /** + * Returns the set of columns and their associated parameter from the + * backend that should be displayed to the user. The results can depend on + * the current user preferences and which search function was executed. + * + * @param integer $search_type The type of search that was executed. Must + * be one of the WHUPS_SEARCH_ constants + * defined above. + */ + function getSearchResultColumns($search_type = null) + { + if ($search_type == 'block') { + return array( + _("Id") => 'id', + _("Summary") => 'summary', + _("Priority") => 'priority_name', + _("State") => 'state_name'); + } + + return array( + _("Id") => 'id', + _("Summary") => 'summary', + _("State") => 'state_name', + _("Type") => 'type_name', + _("Priority") => 'priority_name', + _("Queue") => 'queue_name', + _("Requester") => 'user_id_requester', + _("Owners") => 'owners', + _("Created") => 'timestamp', + _("Updated") => 'date_updated', + _("Assigned") => 'date_assigned', + _("Resolved") => 'date_resolved', + ); + } + + /** + * Send reminders. One email per user. + * + * @param Horde_Variables &$vars The selection criteria. + */ + function sendReminders(&$vars) + { + global $whups_driver; + + // Fetch all unresolved tickets. + if ($vars->get('id')) { + $info = array('id' => $vars->get('id')); + } elseif ($vars->get('queue')) { + $info['queue'] = $vars->get('queue'); + if ($vars->get('category')) { + $info['category'] = $vars->get('category'); + } else { + // Make sure that resolved tickets aren't returned. + $info['category'] = array('unconfirmed', 'new', 'assigned'); + } + } else { + return PEAR::raiseError(_("You must select at least one queue to send reminders for.")); + } + + $tickets = $whups_driver->getTicketsByProperties($info); + Whups::sortTickets($tickets); + if (!count($tickets)) { + return PEAR::raiseError(_("No tickets matched your search criteria.")); + } + + $unassigned = $vars->get('unassigned'); + $remind = array(); + foreach ($tickets as $info) { + $info['link'] = Whups::urlFor('ticket', $info['id'], true, -1); + $owners = $whups_driver->getOwners($info['id']); + if (count($owners)) { + foreach ($owners as $owner) { + $remind[$owner][] = $info; + } + } elseif (!empty($unassigned)) { + $remind['**' . $unassigned][] = $info; + } + } + + foreach ($remind as $user => $utickets) { + if (empty($user) || !count($utickets)) { + continue; + } + $email = "\nHere is a summary of your open tickets:\n"; + foreach ($utickets as $info) { + if (!empty($email)) { + $email .= "\n"; + } + $email .= "------\n" + . 'Ticket #' . $info['id'] . ': ' . $info['summary'] . "\n" + . 'Opened: ' . strftime('%a %d %B', $info['timestamp']) + . Horde_Form_Type_date::getAgo($info['timestamp']) . "\n" + . 'State: ' . $info['state_name'] . "\n" + . 'Link: ' . $info['link'] . "\n"; + } + $email .= "\n"; + $subject = 'Reminder: Your open tickets'; + $whups_driver->mail(null, $user, $subject, $email, $user, true); + } + } + + /** + * Build Whups' list of menu items. + */ + function getMenu($returnType = 'object') + { + $menu = new Horde_Menu(); + + if (Horde_Auth::getAuth()) { + $menu->add(Horde::applicationUrl('mybugs.php'), sprintf(_("_My %s"), $GLOBALS['registry']->get('name')), 'whups.png', null, null, null, $GLOBALS['prefs']->getValue('whups_default_view') == 'mybugs' && strpos($_SERVER['PHP_SELF'], $GLOBALS['registry']->get('webroot') . '/index.php') !== false ? 'current' : null); + } + $menu->add(Horde::applicationUrl('search.php'), _("_Search"), 'search.png', null, null, null, $GLOBALS['prefs']->getValue('whups_default_view') == 'search' && strpos($_SERVER['PHP_SELF'], $GLOBALS['registry']->get('webroot') . '/index.php') !== false ? 'current' : null); + $menu->add(Horde::applicationUrl('ticket/create.php'), _("_New Ticket"), 'create.png', null, null, null, $GLOBALS['prefs']->getValue('whups_default_view') == 'ticket/create' && basename($_SERVER['PHP_SELF']) == 'index.php' ? 'current' : null); + $menu->add(Horde::applicationUrl('query/index.php'), _("_Query Builder"), 'query.png'); + $menu->add(Horde::applicationUrl('reports.php'), _("_Reports"), 'reports.png'); + + /* Administration. */ + if (Horde_Auth::isAdmin('whups:admin')) { + $menu->add(Horde::applicationUrl('admin/'), _("_Admin"), 'admin.png'); + } + + if ($returnType == 'object') { + return $menu; + } else { + return $menu->render(); + } + } + + /** + */ + function getAttachments($ticket, $name = null) + { + global $conf; + + if (empty($conf['vfs']['type'])) { + return false; + } + + require_once 'VFS.php'; + $vfs = &VFS::singleton($conf['vfs']['type'], Horde::getDriverConfig('vfs')); + if (is_a($vfs, 'PEAR_Error')) { + return $vfs; + } + + if ($vfs->isFolder(WHUPS_VFS_ATTACH_PATH, $ticket)) { + $files = $vfs->listFolder(WHUPS_VFS_ATTACH_PATH . '/' . $ticket); + if (is_null($name)) { + return $files; + } else { + foreach ($files as $file) { + if ($file['name'] == $name) { + return $file; + } + } + } + } + + return false; + } + + /** + */ + function attachmentUrl($ticket, $file, $queue) + { + $link = ''; + + // Can we view the attachment online? + $mime_part = new Horde_Mime_Part(); + $mime_part->setType(Horde_Mime_Magic::extToMime($file['type'])); + $viewer = Horde_Mime_Viewer::factory($mime_part); + if ($viewer && !is_a($viewer, 'Horde_Mime_Viewer_Default')) { + $url = Horde_Util::addParameter(Horde::applicationUrl('view.php'), + array('actionID' => 'view_file', + 'type' => $file['type'], + 'file' => $file['name'], + 'ticket' => $ticket)); + $link .= Horde::link($url, $file['name'], null, '_blank') . $file['name'] . ''; + } else { + $link .= $file['name']; + } + + // We can always download attachments. + $url_params = array('actionID' => 'download_file', + 'file' => $file['name'], + 'ticket' => $ticket); + $link .= ' ' . Horde::link(Horde::downloadUrl($file['name'], $url_params), $file['name']) . Horde::img('download.png', _("Download"), null, $GLOBALS['registry']->getImageDir('horde')) . ''; + + // Admins can delete attachments. + if (Whups::hasPermission($queue, 'queue', Horde_Perms::DELETE)) { + $url = Horde_Util::addParameter( + Horde::applicationUrl('ticket/deleteAttachment.php'), + array('file' => $file['name'], + 'id' => $ticket, + 'url' => Horde::selfUrl(true, false, true))); + $link .= ' ' . Horde::link($url, sprintf(_("Delete %s"), $file['name']), '', '', 'return window.confirm(\'' . addslashes(sprintf(_("Permanently delete %s?"), $file['name'])) . '\');') . + Horde::img('delete.png', sprintf(_("Delete %s"), $file['name']), null, $GLOBALS['registry']->getImageDir('horde')) . ''; + } + + return $link; + } + + function getOwners($ticket, $showemail = true, $showname = true, $owners = null) + { + if (is_null($owners)) { + global $whups_driver; + $owners = $whups_driver->getOwners($ticket); + if (is_a($owners, 'PEAR_Error')) { + Horde::logMessage($owners, __FILE__, __LINE__, PEAR_LOG_ERR); + return $owners->getMessage(); + } + } + + $results = array(); + foreach ($owners as $owner) { + $results[] = Whups::formatUser($owner, $showemail, $showname); + } + + return implode(', ', $results); + } + + /** + * Add inline javascript to the output buffer. + * + * @param mixed $script The script text to add (can be stored in an + * array also). + * + * @return string The javascript text to output, or empty if the page + * headers have not yet been sent. + */ + function addInlineScript($script) + { + if (is_array($script)) { + $script = implode(';', $script); + } + + $script = trim($script); + if (empty($script)) { + return; + } + + if (!isset($GLOBALS['__whups_inline_script'])) { + $GLOBALS['__whups_inline_script'] = array(); + } + $GLOBALS['__whups_inline_script'][] = $script; + + // If headers have already been sent, we need to output a + // \n"; + } + + $GLOBALS['__whups_inline_script'] = array(); + } + + /** + * Retruns the available field types including all type information from + * the Horde_Form classes. + * + * @return array The full field types array. + */ + function fieldTypes() + { + static $fields_array = array(); + if (!empty($fields_array)) { + return $fields_array; + } + + /* Fetch all declared classes. */ + require_once 'Horde/Form.php'; + $classes = get_declared_classes(); + + /* Filter for the Horde_Form_Type classes. */ + foreach ($classes as $class) { + if (strtolower(substr($class, 0, 16)) == 'horde_form_type_') { + $field_type = substr($class, 16); + /* Don't bother including the types that cannot be handled + * usefully. */ + $blacklist = array('invalid', 'addresslink', 'spacer', + 'description', 'captcha', 'figlet', + 'header'); + if (in_array($field_type, $blacklist)) { + continue; + } + $fields_array[$field_type] = @call_user_func( + array('Horde_Form_Type_' . $field_type, 'about')); + } + } + + return $fields_array; + } + + /** + * Returns the available field type names from the Horde_Form classes. + * + * @return array A hash The with available field types and names. + */ + function fieldTypeNames() + { + /* Fetch the field type information from the Horde_Form classes. */ + $fields = Whups::fieldTypes(); + + /* Strip out the name element from the array. */ + $available_fields = array(); + foreach ($fields as $field_type => $info) { + $available_fields[$field_type] = $info['name']; + } + + /* Sort for display purposes. */ + asort($available_fields); + + return $available_fields; + } + + /** + * Returns the parameters for a certain Horde_Form field type. + * + * @param string $field_type A field type. + * + * @return array A list of field type parameters. + */ + function fieldTypeParams($field_type) + { + $fields = Whups::fieldTypes(); + + return isset($fields[$field_type]['params']) + ? $fields[$field_type]['params'] + : array(); + } + +} diff --git a/whups/lib/base.php b/whups/lib/base.php new file mode 100644 index 000000000..ae466407c --- /dev/null +++ b/whups/lib/base.php @@ -0,0 +1,68 @@ + + * Copyright 2001-2009 The Horde Project (http://www.horde.org/) + * + * See the enclosed file LICENSE for license information (BSD). If you + * did not receive this file, see http://www.horde.org/licenses/bsdl.php. + * + * @package Whups + */ + +// Check for a prior definition of HORDE_BASE (perhaps by an auto_prepend_file +// definition for site customization). +if (!defined('HORDE_BASE')) { + define('HORDE_BASE', dirname(__FILE__) . '/../..'); +} + +// Load the Horde Framework core, and set up inclusion paths. +require_once HORDE_BASE . '/lib/core.php'; + +// Registry. +$registry = Horde_Registry::singleton(); + +// Determine whups authentication type. +$authentication = Horde_Util::nonInputVar('whups_authentication'); + +try { + $registry->pushApp('whups', array('check_perms' => ($authentication != 'none'), 'logintasks' => true)); +} catch (Horde_Exception $e) { + Horde_Auth::authenticateFailure('whups', $e); +} + +$conf = &$GLOBALS['conf']; +define('WHUPS_TEMPLATES', $registry->get('templates')); + +// Notification system. +$notification = &Horde_Notification::singleton(); +$notification->attach('status'); + +// Find the base file path of Whups. +if (!defined('WHUPS_BASE')) { + define('WHUPS_BASE', dirname(__FILE__) . '/..'); +} + +// Whups base libraries. +require_once WHUPS_BASE . '/lib/Whups.php'; +require_once WHUPS_BASE . '/lib/Driver.php'; + +// Horde libraries. +require_once 'Horde/Group.php'; + +// Form libraries. +require_once 'Horde/Form.php'; +require_once 'Horde/Form/Renderer.php'; + +// Start output compression. +Horde::compressOutput(); + +// Whups backend. +$GLOBALS['whups_driver'] = Whups_Driver::factory(); +$GLOBALS['whups_driver']->initialise(); diff --git a/whups/lib/tests/ApiTest.php b/whups/lib/tests/ApiTest.php new file mode 100644 index 000000000..c88557e5c --- /dev/null +++ b/whups/lib/tests/ApiTest.php @@ -0,0 +1,36 @@ + + * @package Whups + * @subpackage UnitTests + */ +class Whups_ApiTest Extends Whups_TestBase { + function setUp() + { + parent::setUp(); + require_once WHUPS_BASE . '/lib/api.php'; + } + + function test_listQueues_returns_hash() + { + $GLOBALS['perms'] = new Whups_Test_Perms(); + $result = _whups_listQueues(); + + // Make sure it's not a PEAR_Error + $this->assertOk($result); + + // Validate the results + $this->assertEquals('queue one', $result[1]); + $this->assertEquals('queue three', $result[3]); + } + +} diff --git a/whups/lib/tests/TestBase.php b/whups/lib/tests/TestBase.php new file mode 100644 index 000000000..fc085cb27 --- /dev/null +++ b/whups/lib/tests/TestBase.php @@ -0,0 +1,108 @@ + + * @package Whups + * @subpackage UnitTests + */ +class Whups_TestBase Extends PHPUnit_Framework_TestCase { + + function setUp() + { + // TODO: Do we need to actually fake auth for any tests? + @define('AUTH_HANDLER', true); + @define('HORDE_BASE', dirname(__FILE__) . '/../../..'); + @define('WHUPS_BASE', dirname(__FILE__) . '/../..'); + require_once HORDE_BASE . '/lib/core.php'; + + // Need to ensure $browser is in the global scope. + $GLOBALS['browser'] = $browser; + + // Set up the CLI enviroment. + Horde_Cli::init(); + + // Need to load registry. For some reason including base.php doesn't + // work properly yet. ($registry is not set when prefs.php loads)? + $GLOBALS['registry'] = Horde_Registry::singleton(); + define('WHUPS_TEMPLATES', $GLOBALS['registry']->get('templates', 'whups')); + } + + /** + * Asserts that the supplied result is not a PEAR_Error + * + * Fails with a descriptive message if so + * @param mixed $result The value to check + * @return boolean Whether the assertion was successful + */ + function assertOk($result) + { + if (is_a($result, 'DB_Error')) { + $this->fail($result->getDebugInfo()); + return false; + } elseif (is_a($result, 'PEAR_Error')) { + $this->fail($result->getMessage()); + return false; + } + + return true; + } + +} + +class Whups_Driver_sql { + + var $_queues = array( + array('queue_id' => 1, + 'queue_name' => 'queue one', + 'queue_description' => 'queue one description', + 'queue_versioned' => 1), + array('queue_id' => 3, + 'queue_name' => 'queue three', + 'queue_description' => 'queue three description', + 'queue_versioned' => 0)); + + function initialise() + { + return true; + } + + function getQueuesInternal() + { + foreach ($this->_queues as $queue) { + $q[$queue['queue_id']] = $queue['queue_name']; + } + return $q; + } + +} + +/** + * Permissions class to use when we need to pretend we are checking permissions + * + * Must instantiate it, then overwrite the global $perms object before calling + * any method that needs to check permissions. + */ +class Whups_Test_Perms { + + function getPermissions($permission, $user = null, $creator = null) + { + return true; + } + + function exists($permission) + { + return true; + } + + function hasPermission($permission, $user, $perm, $creator = null) + { + return true; + } + +} + diff --git a/whups/locale/bg_BG/LC_MESSAGES/whups.mo b/whups/locale/bg_BG/LC_MESSAGES/whups.mo new file mode 100644 index 000000000..9667c718f Binary files /dev/null and b/whups/locale/bg_BG/LC_MESSAGES/whups.mo differ diff --git a/whups/locale/cs_CZ/LC_MESSAGES/whups.mo b/whups/locale/cs_CZ/LC_MESSAGES/whups.mo new file mode 100644 index 000000000..6c3ead7b2 Binary files /dev/null and b/whups/locale/cs_CZ/LC_MESSAGES/whups.mo differ diff --git a/whups/locale/de_DE/LC_MESSAGES/whups.mo b/whups/locale/de_DE/LC_MESSAGES/whups.mo new file mode 100644 index 000000000..d16377299 Binary files /dev/null and b/whups/locale/de_DE/LC_MESSAGES/whups.mo differ diff --git a/whups/locale/en_US/help.xml b/whups/locale/en_US/help.xml new file mode 100644 index 000000000..fc472b968 --- /dev/null +++ b/whups/locale/en_US/help.xml @@ -0,0 +1,16 @@ + + + + + + Overview + Introduction + + Whups is a Horde ticket-tracking application. It is very flexible in design and can be used for help desk requests, tracking software development, and anything else which needs to track a set of requests and their status. + + + Whups has complex searching, reporting and charting, email notification triggers, and a simple permissions system. + + + + diff --git a/whups/locale/es_ES/LC_MESSAGES/whups.mo b/whups/locale/es_ES/LC_MESSAGES/whups.mo new file mode 100644 index 000000000..e42c037b4 Binary files /dev/null and b/whups/locale/es_ES/LC_MESSAGES/whups.mo differ diff --git a/whups/locale/es_ES/help.xml b/whups/locale/es_ES/help.xml new file mode 100644 index 000000000..b3f87e537 --- /dev/null +++ b/whups/locale/es_ES/help.xml @@ -0,0 +1,16 @@ + + + + + + Introducción + Introducción + + Whups es una aplicación de seguimiento de incidencias de Horde. Tiene un diseño muy flexible y se puede utilizar para solicitudes de asistencia, seguimiento de desarrollo de software y cualquier otra cosa que requiera controlar un conjunto de solicitudes y su estado. + + + Whups dispone de un complejo sistema de búsqueda, informes y gráficos, disparadores de notificación de correo y un sistema de permisos sencillo. + + + + diff --git a/whups/locale/fi_FI/LC_MESSAGES/whups.mo b/whups/locale/fi_FI/LC_MESSAGES/whups.mo new file mode 100644 index 000000000..1dcf5ce7d Binary files /dev/null and b/whups/locale/fi_FI/LC_MESSAGES/whups.mo differ diff --git a/whups/locale/fi_FI/help.xml b/whups/locale/fi_FI/help.xml new file mode 100644 index 000000000..6ceb72438 --- /dev/null +++ b/whups/locale/fi_FI/help.xml @@ -0,0 +1,14 @@ + + + + + Yleiskuva + Esittely + + Whups on Horden tikettien seuraamiseen tarkoitettu ohjelmisto. Ohjelmisto on suunniteltu varsin joustavaksi ja sitä voidaan käyttää help desk -pyyntöjen seuraamiseen, seuraamaan ohjelmiston kehitystä tai mihin tahansa muuhun toimintoon, jossa tarvitsee seurata pyyntöjä ja niiden tilaa. + + + Whups sisältää myös hakutoiminnon, raportoinnin ja kuvaajat, sähköposti-ilmoitukset ja yksinkertaisen lupajärjestelmän. + + + diff --git a/whups/locale/fr_FR/LC_MESSAGES/whups.mo b/whups/locale/fr_FR/LC_MESSAGES/whups.mo new file mode 100644 index 000000000..312fd649c Binary files /dev/null and b/whups/locale/fr_FR/LC_MESSAGES/whups.mo differ diff --git a/whups/locale/it_IT/LC_MESSAGES/whups.mo b/whups/locale/it_IT/LC_MESSAGES/whups.mo new file mode 100644 index 000000000..d544a112d Binary files /dev/null and b/whups/locale/it_IT/LC_MESSAGES/whups.mo differ diff --git a/whups/locale/lt_LT/LC_MESSAGES/whups.mo b/whups/locale/lt_LT/LC_MESSAGES/whups.mo new file mode 100644 index 000000000..a4577925d Binary files /dev/null and b/whups/locale/lt_LT/LC_MESSAGES/whups.mo differ diff --git a/whups/locale/nb_NO/LC_MESSAGES/whups.mo b/whups/locale/nb_NO/LC_MESSAGES/whups.mo new file mode 100644 index 000000000..f141c61ce Binary files /dev/null and b/whups/locale/nb_NO/LC_MESSAGES/whups.mo differ diff --git a/whups/locale/nl_NL/LC_MESSAGES/whups.mo b/whups/locale/nl_NL/LC_MESSAGES/whups.mo new file mode 100644 index 000000000..12d1c3c12 Binary files /dev/null and b/whups/locale/nl_NL/LC_MESSAGES/whups.mo differ diff --git a/whups/locale/pl_PL/LC_MESSAGES/whups.mo b/whups/locale/pl_PL/LC_MESSAGES/whups.mo new file mode 100644 index 000000000..dae5c5d88 Binary files /dev/null and b/whups/locale/pl_PL/LC_MESSAGES/whups.mo differ diff --git a/whups/locale/pt_BR/LC_MESSAGES/whups.mo b/whups/locale/pt_BR/LC_MESSAGES/whups.mo new file mode 100644 index 000000000..0aa21005d Binary files /dev/null and b/whups/locale/pt_BR/LC_MESSAGES/whups.mo differ diff --git a/whups/locale/ro_RO/LC_MESSAGES/whups.mo b/whups/locale/ro_RO/LC_MESSAGES/whups.mo new file mode 100644 index 000000000..e57d0920f Binary files /dev/null and b/whups/locale/ro_RO/LC_MESSAGES/whups.mo differ diff --git a/whups/locale/ru_RU/LC_MESSAGES/whups.mo b/whups/locale/ru_RU/LC_MESSAGES/whups.mo new file mode 100644 index 000000000..defbec195 Binary files /dev/null and b/whups/locale/ru_RU/LC_MESSAGES/whups.mo differ diff --git a/whups/locale/sl_SI/LC_MESSAGES/whups.mo b/whups/locale/sl_SI/LC_MESSAGES/whups.mo new file mode 100644 index 000000000..8da044de1 Binary files /dev/null and b/whups/locale/sl_SI/LC_MESSAGES/whups.mo differ diff --git a/whups/locale/tr_TR/LC_MESSAGES/whups.mo b/whups/locale/tr_TR/LC_MESSAGES/whups.mo new file mode 100644 index 000000000..91bf68a0d Binary files /dev/null and b/whups/locale/tr_TR/LC_MESSAGES/whups.mo differ diff --git a/whups/locale/uk_UA/LC_MESSAGES/whups.mo b/whups/locale/uk_UA/LC_MESSAGES/whups.mo new file mode 100644 index 000000000..8f7d80f9a Binary files /dev/null and b/whups/locale/uk_UA/LC_MESSAGES/whups.mo differ diff --git a/whups/locale/zh_CN/LC_MESSAGES/whups.mo b/whups/locale/zh_CN/LC_MESSAGES/whups.mo new file mode 100644 index 000000000..b212698de Binary files /dev/null and b/whups/locale/zh_CN/LC_MESSAGES/whups.mo differ diff --git a/whups/locale/zh_TW/LC_MESSAGES/whups.mo b/whups/locale/zh_TW/LC_MESSAGES/whups.mo new file mode 100644 index 000000000..524c4021f Binary files /dev/null and b/whups/locale/zh_TW/LC_MESSAGES/whups.mo differ diff --git a/whups/mybugs.php b/whups/mybugs.php new file mode 100644 index 000000000..cf83a79b2 --- /dev/null +++ b/whups/mybugs.php @@ -0,0 +1,59 @@ + + */ + +require_once dirname(__FILE__) . '/lib/base.php'; +require_once 'Horde/Block/Layout/View.php'; + +// @TODO: remove this when there are blocks useful to guests +// available. +if (!Horde_Auth::getAuth()) { + require WHUPS_BASE . '/search.php'; + exit; +} + +// Get refresh interval. +if ($r_time = $prefs->getValue('summary_refresh_time')) { + if ($browser->hasFeature('xmlhttpreq')) { + Horde::addScriptFile('prototype.js', 'horde', true); + } else { + $refresh_time = $r_time; + $refresh_url = Horde::applicationUrl('mybugs.php'); + } +} + +// Load layout from preferences for authenticated users, and a default +// block set for guests. +$mybugs_layout = @unserialize($prefs->getValue('mybugs_layout')); +if (!$mybugs_layout) { + if (Horde_Auth::isAuthenticated()) { + $mybugs_layout = array( + array(array('app' => 'whups', 'params' => array('type' => 'mytickets', 'params' => false), 'height' => 1, 'width' => 1)), + array(array('app' => 'whups', 'params' => array('type' => 'myrequests', 'params' => false), 'height' => 1, 'width' => 1)), + array(array('app' => 'whups', 'params' => array('type' => 'myqueries', 'params' => false), 'height' => 1, 'width' => 1))); + $prefs->setValue('mybugs_layout', serialize($mybugs_layout)); + } else { + // @TODO: show some blocks that are useful to guests. + $mybugs_layout = array(); + } +} +$layout = new Horde_Block_Layout_View( + $mybugs_layout, + Horde::applicationUrl('mybugs_edit.php'), + Horde::applicationUrl('mybugs.php', true)); +$layout_html = $layout->toHtml(); + +$title = sprintf(_("My %s"), $registry->get('name')); +$menuBottom = '
 
'; +require WHUPS_TEMPLATES . '/common-header.inc'; +require WHUPS_TEMPLATES . '/menu.inc'; +echo $layout_html; +require $registry->get('templates', 'horde') . '/common-footer.inc'; diff --git a/whups/mybugs_edit.php b/whups/mybugs_edit.php new file mode 100644 index 000000000..df12af008 --- /dev/null +++ b/whups/mybugs_edit.php @@ -0,0 +1,37 @@ + + * @author Jan Schneider + * @author Mike Cochrane + */ + +@define('WHUPS_BASE', dirname(__FILE__)); +require_once WHUPS_BASE . '/lib/base.php'; +require_once 'Horde/Block/Collection.php'; +require_once 'Horde/Block/Layout/Manager.php'; + +// Instantiate the blocks objects. +$blocks = &Horde_Block_Collection::singleton('mybugs', array('whups')); +$layout = &Horde_Block_Layout_Manager::singleton('mybugs', $blocks, @unserialize($prefs->getValue('mybugs_layout'))); + +// Handle requested actions. +$layout->handle(Horde_Util::getFormData('action'), + (int)Horde_Util::getFormData('row'), + (int)Horde_Util::getFormData('col'), + Horde_Util::getFormData('url')); +if ($layout->updated()) { + $prefs->setValue('mybugs_layout', $layout->serialize()); +} + +$title = sprintf(_("My %s :: Add Content"), $registry->get('name')); +require WHUPS_TEMPLATES . '/common-header.inc'; +require WHUPS_TEMPLATES . '/menu.inc'; +require $registry->get('templates', 'horde') . '/portal/edit.inc'; +require $registry->get('templates', 'horde') . '/common-footer.inc'; diff --git a/whups/opensearch.php b/whups/opensearch.php new file mode 100644 index 000000000..14a94373f --- /dev/null +++ b/whups/opensearch.php @@ -0,0 +1,52 @@ + + */ + +// Check for a prior definition of HORDE_BASE (perhaps by an +// auto_prepend_file definition for site customization). +if (!defined('HORDE_BASE')) { + @define('HORDE_BASE', dirname(__FILE__) . '/..'); +} + +// Load the Horde Framework core, and set up inclusion paths. +require_once HORDE_BASE . '/lib/core.php'; + +// Registry. +$registry = Horde_Registry::singleton(); +$registry->pushApp('whups'); + +// Url. +$url = Horde::applicationUrl('', true); + +// Name. +$name = $registry->get('name', 'whups') . ' (' . $url . ')'; + +// Icon. +$icon = base64_encode(file_get_contents($registry->get('themesfs', 'whups') . '/graphics/whups.png')); + +// Charset. +$charset = Horde_Nls::getCharset(); + +header('Content-Type: text/xml; charset=' . $charset); +echo << + $name + $url + + + + data:image/png;base64,$icon + $charset + + +PAYLOAD; diff --git a/whups/po/.cvsignore b/whups/po/.cvsignore new file mode 100644 index 000000000..fd8854c89 --- /dev/null +++ b/whups/po/.cvsignore @@ -0,0 +1 @@ +messages.po diff --git a/whups/po/README b/whups/po/README new file mode 100644 index 000000000..a4356a923 --- /dev/null +++ b/whups/po/README @@ -0,0 +1 @@ +see horde/po/README \ No newline at end of file diff --git a/whups/po/bg_BG.po b/whups/po/bg_BG.po new file mode 100644 index 000000000..d7a92f3c0 --- /dev/null +++ b/whups/po/bg_BG.po @@ -0,0 +1,1441 @@ +# Bulgarian translations for Whups package. +# Copyright 2002-2009 The Horde Project +# This file is distributed under the same license as the Whups package. +# Miroslav Pendev , 2002. +# +msgid "" +msgstr "" +"Project-Id-Version: Whups 0.0.1-cvs\n" +"POT-Creation-Date: 2002-09-14 00:38-0400\n" +"PO-Revision-Date: 2002-11-19 20:44-0500\n" +"Last-Translator: Miroslav Pendev \n" +"Language-Team: BG i18n@lists.horde.org\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CP1251\n" +"Content-Transfer-Encoding: 8bit\n" + +#, c-format +msgid "%s Admin" +msgstr "%s Àäìèíèñòðèðàíå" + +#, c-format +msgid "%s Standard" +msgstr "%s Ñòàíäàðò" + +#, c-format +msgid "%s days" +msgstr "%s äíè" + +#, c-format +msgid "'%s' is no longer among those responsible for '%s'" +msgstr "'%s' âå÷å íå å èçìåæäó îòãîâîðíèòå çà '%s'" + +#, c-format +msgid "'%s' is now among those responsible for '%s'" +msgstr "'%s' âå÷å e èçìåæäó îòãîâîðíèòå çà '%s'" + +#, c-format +msgid ", initial priority of '%s'." +msgstr ", íà÷àëåí ïðèîðèòåò '%s'." + +#, c-format +msgid ", priority changed to '%s'." +msgstr ", ñìåíåí ïðèîðèòåò êúì '%s'." + +#, c-format +msgid ", priority is '%s'." +msgstr ", ïðèîðèòåòà å '%s'." + +msgid "- Confirmation" +msgstr "Ïîòâúðæäåíèå" + +msgid "- Stage 1" +msgstr "- Åòàï 1" + +msgid "- Stage 2" +msgstr "- Åòàï 2" + +#, c-format +msgid "-Added By: %s\n" +msgstr "-Äîáàâåí îò: %s\n" + +#, c-format +msgid "-Assigned By: %s" +msgstr "-Âúçëîæåí îò: %s" + +#, c-format +msgid "-Assigned To: %s" +msgstr "-Âúçëîæåí íà: %s" + +#, c-format +msgid "-Comment by %s on %s:" +msgstr "-Êîìåíòàð îò %s íà %s:" + +#, c-format +msgid "-Created By: %s\n" +msgstr "-Ñúçäàäåí îò: %s\n" + +#, c-format +msgid "-Queue: %s" +msgstr "-Ìîäóë: %s" + +#, c-format +msgid "-Queue: %s\n" +msgstr "-Ìîäóë: %s\n" + +#, c-format +msgid "-New Priority: %s" +msgstr "-Íîâ ïðèîðèòåò: %s" + +#, c-format +msgid "-New State: %s" +msgstr "-Íîâî ñúñòîÿíèå: %s" + +#, c-format +msgid "-State: %s" +msgstr "-Ñúñòîÿíèå: %s" + +msgid "-Summary:" +msgstr "-Îáîáùåíèå" + +#, c-format +msgid "-Ticket %s" +msgstr "-Áþëåòèí %s" + +#, c-format +msgid "-Ticket %s\n" +msgstr "-Áþëåòèí %s\n" + +msgid "No summary" +msgstr "Íÿìà ðåçþìå" + +msgid "Add Attribute" +msgstr "Äîáàâè Àòðèáóòè" + +msgid "Add Attribute Criterion" +msgstr "Äîáàâè àòðèáóòåí êðèòåðèé" + +#, c-format +msgid "Add Attribute for '%s'" +msgstr "Äîáàâè àòðèáóò çà '%s'" + +msgid "Add Comment" +msgstr "Äîáàâè êîìåíòàð" + +msgid "Add Comment Succeeded" +msgstr "Óñïåøíî äîáàâÿíå íà êîìåíòàð" + +msgid "Add Criterion" +msgstr "Äîáàâè êðèòåðèé" + +msgid "Add Queue" +msgstr "Äîáàâè ìîäóë" + +msgid "Add Priority" +msgstr "Äîáàâè ïðèîðèòåò" + +#, c-format +msgid "Add Priority for '%s'" +msgstr "Äîáàâè ïðèîðèòåò çà '%s'" + +msgid "Add Property Criterion" +msgstr "Äîáàâè êðèòåðèé çà ñîáñòâåíîñò" + +msgid "Add State" +msgstr "Äîáàâè ñòàòóñ" + +#, c-format +msgid "Add State for '%s'" +msgstr "Äîáàâè ñòàòóñ çà '%s'" + +msgid "Add Subject" +msgstr "Äîáàâè òåìà" + +msgid "Add Text Criterion" +msgstr "Äîáàâè òåêñòîâ êðèòåðèé" + +#, c-format +msgid "Add Type %s" +msgstr "Äîáàâè òèï %s" + +msgid "Add User Criterion" +msgstr "Äîáàâè êðèòåðèé çà ïîòðåáèòåë" + +msgid "Add Version" +msgstr "Äîáàâè âåðñèÿ" + +#, c-format +msgid "Add Version for '%s'" +msgstr "Äîáàâè âåðñèÿ çà '%s'" + +#, c-format +msgid "Add Version to '%s'" +msgstr "Äîáàâè âåðñèÿ êúì '%s'" + +#, c-format +msgid "Add a user to '%s'" +msgstr "Äîáàâè ïîòðåáèòåë êúì '%s'" + +#, c-format +msgid "Adding your ticket failed: %s." +msgstr "Ãðåøêà ïðè äîáàâÿíå íà áþëåòèí: %s." + +msgid "Additional Comment" +msgstr "Äîïúëíèòåëåí êîìåíòàð" + +msgid "Admin" +msgstr "Àäìèíèíèñòðèðàíå" + +msgid "Admin Home" +msgstr "Àäìèí. ñòðàíèöà" + +msgid "Administration" +msgstr "Àäìèíèñòðàöèÿ" + +msgid "An appropriate person has been notified of this request." +msgstr "Ïîäõîäÿù ñëóæèòåë áåøå óâåäîìåí çà òàçè ìîëáà." + +msgid "And" +msgstr "Äîáàâè" + +msgid "Any" +msgstr "Âñÿêà" + +msgid "Any Group" +msgstr "Âñÿêà ãðóïà" + +msgid "Ascending" +msgstr "Íàðàñòâàùè" + +msgid "Assign Ticket" +msgstr "Âúçëàãàíå íà áþëåòèí" + +msgid "Assign Ticket Succeeded" +msgstr "Âúçëàãàíåòî íà áþëåòèíà áåøå óñïåøíî" + +msgid "Assigned" +msgstr "Âúçëîæåí" + +#, c-format +msgid "Assigned ticket to %s" +msgstr "Âúçëîæåí áþëåòèí íà %s" + +msgid "Assignee" +msgstr "Âúçëîæåí íà" + +msgid "Attribute Criteria" +msgstr "Àòðèáóòåí êðèòåðèé" + +msgid "Attribute Description" +msgstr "Îïèñàíèÿ íà àòðèáóò" + +msgid "Attribute Name" +msgstr "Èìå íà àòðèáóòè" + +msgid "Attributes for this Type" +msgstr "Àòðèáóòè çà òîçè òèï" + +msgid "Average days to close by Queue" +msgstr "Ñðåäåí áðîé äíè çà ïðèêëþ÷âàíå ïî ìîäóë" + +msgid "Average days to close by Owner" +msgstr "Ñðåäåí áðîé äíè çà ïðèêëþ÷âàíå ïî ïðèòåæàòåë" + +msgid "Average days to close by Requester" +msgstr "Ñðåäåí áðîé äíè çà ïðèêëþ÷âàíå ïî çàÿâèòåë" + +msgid "Average time a ticket is unresolved" +msgstr "Ñðåäåí áðîé äíè çà íåðàçðåøåí áþëåòèí" + +msgid "Barbie" +msgstr "Barbie" + +msgid "Branch Type" +msgstr "Áðàíø òèï" + +msgid "Brown" +msgstr "Brown" + +msgid "Burnt Orange" +msgstr "Burnt Orange" + +msgid "Camouflage" +msgstr "Camouflage" + +msgid "Case Insensitive Substring" +msgstr "Íå÷óâñòâèòåëåí êúì ðàçìåðà íà áóêâèòå ïîäñòðèíã" + +msgid "Case Sensitive Substring" +msgstr "×óâñòâèòåëåí êúì ðàçìåðà íà áóêâèòå ïîäñòðèíã" + +msgid "Change Ticket Type" +msgstr "Ñìÿíà íà òèïà íà áþëåòèíà" + +msgid "" +"Change display options such as the color scheme and how search results are " +"sorted." +msgstr "" +"Ñìÿíà íà äèñïëåé îïöèèòå, êàòî öâåòíà ñõåìà è êàê äà ñå ñîðòèðàò ðåçóëòàòèòå." + +msgid "Change options for email notifications of ticket activity." +msgstr "Ïðîìÿíà íà îïöèèòå çà email óâåäîìÿâàíå çà àêòèâíîñò ïî áþëåòèí." + +msgid "Cherry" +msgstr "Cherry" + +msgid "Choose Action:" +msgstr "Èçáåðè äåéñòâèå:" + +msgid "Comment" +msgstr "êîìåíòàð" + +msgid "Commentor" +msgstr "êîìåíòàð îò" + +msgid "Create Ticket" +msgstr "Ñúçäàé áþëåòèí" + +msgid "Create Ticket - Stage 1" +msgstr "Ñúçäàé áþëåòèí - Åòàï 1" + +msgid "Create Tickets" +msgstr "Ñúçäàé áþëåòèíè" + +msgid "Created" +msgstr "Ñúçäàäåí" + +msgid "Current Query" +msgstr "Òåêóùà çàÿâêà" + +msgid "Current Type" +msgstr "Òåêóù òèï" + +msgid "Date Criteria" +msgstr "Äàðà êðèòåðèé" + +msgid "Date/Time format for search results" +msgstr "Äàòà/÷àñ ôîðìàò çà ðåçóëòàòè îò òúðñåíå" + +msgid "Default sorting criteria:" +msgstr "Êðèòåðèè çà ñîðòèðàíå ïî ïîäðàçáèðàíå:" + +msgid "Default sorting direction:" +msgstr "Ïîñîêà íà ñîðòèðàíå ïî ïîäðàçáèðàíå:" + +msgid "Delete" +msgstr "Èçòðèé" + +msgid "Delete Attribute" +msgstr "Èçòðèé àòðèáóò" + +#, c-format +msgid "Delete Attribute %s" +msgstr "Èçòðèé àòðèáóò %s" + +msgid "Delete Attributes" +msgstr "Èçòðèé Àòðèáóòè" + +msgid "Delete Queue" +msgstr "Èçòðèé ìîäóë" + +#, c-format +msgid "Delete Queue %s" +msgstr "Èçòðèé ìîäóë %s" + +msgid "Delete Priority" +msgstr "Èçòðèé ïðèîðèòåò" + +#, c-format +msgid "Delete Priority %s" +msgstr "Èçòðèé ïðèîðèòåò %s" + +msgid "Delete State" +msgstr "Èçòðèé ñòàòóñ" + +#, c-format +msgid "Delete State %s" +msgstr "Èçòðèé ñòàòóñ %s" + +msgid "Delete Subject" +msgstr "Èçòðèé òåìà" + +#, c-format +msgid "Delete Subject %s" +msgstr "Èçòðèé òåìà %s" + +msgid "Delete Ticket" +msgstr "Èçòðèé áþëåòèí" + +msgid "Delete Ticket Succeeded" +msgstr "Èçòðèâàíåòî íà áþëåòèíà áåøå óñïåøíî" + +msgid "Delete Type" +msgstr "Èçòðèé òèï" + +#, c-format +msgid "Delete Type %s" +msgstr "Èçòðèé òèï %s" + +msgid "Delete Version" +msgstr "Èçòðèé âåðñèÿ" + +#, c-format +msgid "Delete Version %s" +msgstr "Èçòðèé âåðñèÿ %s" + +msgid "Descending" +msgstr "Íàìàëÿâàùè" + +msgid "Description" +msgstr "Îïèñàíèå" + +msgid "Display Options" +msgstr "Äèñïëåé Îïöèè" + +msgid "Edit" +msgstr "Ðåäàêöèÿ" + +msgid "Edit Attribute" +msgstr "Ðåäàêöèÿ íà àòðèáóò" + +#, c-format +msgid "Edit Attribute %s" +msgstr "Ðåäàêöèÿ íà àòðèáóò %s" + +msgid "Edit Attributes" +msgstr "Ðåäàêöèÿ Àòðèáóòè" + +#, c-format +msgid "Edit Attributes for '%s' %s" +msgstr "Ðåäàêòèðàé àòðèáóòèòå çà '%s' %s" + +msgid "Edit Queue" +msgstr "Ðåäàêòèðàé ìîäóë" + +#, c-format +msgid "Edit Queue %s" +msgstr "Ðåäàêòèðàé ìîäóë %s" + +msgid "Edit Queues" +msgstr "Ðåäàêòèðàé ìîäóëè" + +msgid "Edit Priorities" +msgstr "Ðåäàêòèðàé ïðèîðèòåòèòå" + +#, c-format +msgid "Edit Priorities for '%s' %s" +msgstr "Ðåäàêòèðàé ñâîéñòâàòà çà '%s' %s" + +msgid "Edit Priority" +msgstr "Ðåäàêòèðàé ïðèîðèòåò" + +#, c-format +msgid "Edit Priority %s" +msgstr "Ðåäàêòèðàé ïðèîðèòåò %s" + +msgid "Edit Query" +msgstr "Ðåäàêòèðàé çàÿâêà" + +msgid "Edit State" +msgstr "Ðåäàêòèðàé ñòàòóñ" + +#, c-format +msgid "Edit State %s" +msgstr "Ðåäàêòèðàé ñòàòóñ %s" + +msgid "Edit States" +msgstr "Ðåäàêöèÿ íà ñòàòóñè" + +#, c-format +msgid "Edit States for '%s' %s" +msgstr "Ðåäàêòèðàé ñòàòóñèòå çà '%s' %s" + +msgid "Edit Subject" +msgstr "Ðåäàêòèðàé òåìà" + +#, c-format +msgid "Edit Subject %s" +msgstr "Ðåäàêöèÿ íà òåìà %s " + +msgid "Edit Subjects" +msgstr "Ðåäàêòèðàé òåìè" + +msgid "Edit Type" +msgstr "Ðåäàêòèðàé òèï" + +#, c-format +msgid "Edit Type %s" +msgstr "Ðåäàêòèðàé òèï %s" + +msgid "Edit Types" +msgstr "Ðåäàêòèðàé òèïîâå" + +msgid "Edit Version" +msgstr "Ðåäàêòèðàé âåðñèÿ" + +#, c-format +msgid "Edit Version %s" +msgstr "Ðåäàêòèðàé âåðñèÿ %s" + +msgid "Edit Versions" +msgstr "Ðåäàêòèðàé âåðñèÿ" + +#, c-format +msgid "Edit Versions for '%s' %s" +msgstr "Ðåäàêöèÿ íà âåðñèèòå çà '%s' %s" + +msgid "Edit the permissions on this module" +msgstr "Ðåäàêöèÿ íà ïðàâàòà âúðõó òîçè ìîäóë" + +msgid "Edit the users responsible for this module" +msgstr "Ðåäàêòèðàé ïîòðåáèòåëèòå îòãîâîðíè çà òîçè ìîäóë" + +msgid "Edit the versions for this module" +msgstr "Ðåäàêòèðàé âåðñèèòå çà òîçè ìîäóë'" + +msgid "Enter the password that you set when you created this ticket." +msgstr "Âúâåäåòå ïàðîëàòà êîÿòî çàäàäîõòå ïðè ñúçäàâàíåòî íà òîçè áþëåòèí." + +#, c-format +msgid "Error: Unknown query form %s, defaulting to properties" +msgstr "" +"Ãðåøêà: Íåèçâåñòíà ôîðìà íà çàÿâêà %s, ùå ñå èçïîëçâàò ïîäðàçáèðàùèòå ñå " +"ñâîéñòâà" + +msgid "Exact Match" +msgstr "Òî÷íî ñúâïàäàíå" + +msgid "Execute Query" +msgstr "Èçïúëíè" + +msgid "Green" +msgstr "Green" + +msgid "Grey" +msgstr "Grey" + +msgid "Help" +msgstr "Ïîìîù" + +msgid "Hide Assigned" +msgstr "Ñêðèé âúçëîæåíèòå" + +msgid "Hide New" +msgstr "Ñêðèé íîâèòå" + +msgid "Hide Resolved" +msgstr "Ñêðèé ðåøåíèòå" + +msgid "Hide Unconfirmed" +msgstr "Ñêðèé íåïîòâúðäåíèòå" + +msgid "Hoist" +msgstr "Âäèãíè" + +msgid "Id" +msgstr "èäåíò." + +#, c-format +msgid "If you have recieved this mail in error, please contact %s." +msgstr "Àêî ñòå ïîëó÷èëè òîçè åìàéë ïîðàäè ãðåøêà, ìîëÿ ñâúðæåòå ñå ñ %s." + +#, c-format +msgid "Initial state of '%s'" +msgstr "Íà÷àëåí ñòàòóñ íà '%s'" + +msgid "Insert And" +msgstr "Âìúêíè È" + +msgid "Insert Branch" +msgstr "Âìúêíè Áðàíø" + +msgid "Insert Not" +msgstr "Âìúêíè Íå" + +msgid "Insert Or" +msgstr "Âìúêíè Èëè" + +msgid "Insert Query" +msgstr "Âìúêíè çàÿâêà" + +msgid "Keep a set of versions for this queue?" +msgstr "Äà ñå çàïàçè ëè íàáîðà îò âåðñèè çà òîçè ìîäóë?" + +msgid "Language" +msgstr "Åçèê" + +msgid "Light Blue" +msgstr "Light Blue" + +msgid "Load Query" +msgstr "Çàðåäè çàÿâêà" + +msgid "Login" +msgstr "Âõîä" + +msgid "MM/DD/YY" +msgstr "ÌÌ/ÄÄ/ÃÃ" + +msgid "MM/DD/YY HH:MM:SS" +msgstr "ÌÌ/ÄÄ/Ãà ××:ÌÌ:ÑÑ" + +msgid "Match" +msgstr "Ñúâïàäàù" + +msgid "Match Operator" +msgstr "Ñúâïàäàù îïåðàòîð" + +msgid "Match Pattern" +msgstr "Ñúâïàäàù ïðèìåð" + +msgid "Match Word" +msgstr "Ñúâïàäàùà äóìà" + +msgid "Maximum time a ticket is unresolved" +msgstr "Ìàêñèìàëíî âðåìå ïðåç êîåòî áþëåòèí å íåðàçðåøåí" + +msgid "Minimum time a ticket is unresolved" +msgstr "ìèíèìàëíî " + +msgid "Modified Attribute" +msgstr "Ïðîìåíåí àòðèáóò" + +msgid "Modified Queue" +msgstr "Ïðîìåíåí ìîäóë" + +msgid "Modified Priority" +msgstr "Ïðîìåíåí ïðèîðèòåò" + +msgid "Modified State" +msgstr "Ïðîìåíåí ñòàòóñ" + +msgid "Modified Subject" +msgstr "Ïðîìåíåíà òåìà" + +msgid "Modified Type" +msgstr "Ïðîìåíåí òèï" + +msgid "Modified Version" +msgstr "Âåðñèÿ íà ïðîìÿíàòà" + +msgid "Queue" +msgstr "Ìîäóë" + +msgid "Queue Description" +msgstr "Îïèñàíèå íà ìîäóë" + +msgid "Queue Name" +msgstr "Èìå íà ìîäóë" + +msgid "Queue Version" +msgstr "Ìîäóë âåðñèÿ" + +#, c-format +msgid "Queue: %s, Ticket: %s" +msgstr "Ìîäóë: %s, Áþëåòèí: %s" + +msgid "Move" +msgstr "Ïðåìåñòè" + +msgid "Mozilla" +msgstr "Mozilla" + +#, c-format +msgid "My %s" +msgstr "Ìîÿò %s" + +msgid "My Assigned Tickets" +msgstr "Ìîèòå Áþëåòèíè" + +msgid "My Bugs" +msgstr "Ìîèòå Áúãîâå" + +msgid "My Open Requests" +msgstr "Ìîèòå îòâîðåíè ìîëáè" + +msgid "My Searches" +msgstr "Ìîåòî òúðñåíå" + +msgid "Name" +msgstr "Èìå" + +msgid "New" +msgstr "Íîâè" + +msgid "New Priority" +msgstr "Íîâ ïðèîðèòåò" + +msgid "New Query" +msgstr "Íîâà çàÿâêà" + +msgid "New State" +msgstr "Íîâ ñòàòóñ" + +msgid "New Ticket" +msgstr "Íîâ áþëåòèí" + +#, c-format +msgid "New comment for ticket %s" +msgstr "Íîâ êîìåíòàð çà áþëåòèí %s" + +#, c-format +msgid "New ticket (%s): %s" +msgstr "Íîâ áþëåòèí (%s): %s" + +msgid "No" +msgstr "Íå" + +msgid "No configuration information specified for SQL Bugs." +msgstr "Íÿìà çàäàäåíà êîíôèãóðàöèÿ çà SQL áúãîâå." + +#, c-format +msgid "No such backend '%s' found" +msgstr "Íå áåøå íàìåðåí bakend '%s'" + +msgid "No such ticket." +msgstr "Íÿìà òàêúâ áþëåòèí." + +msgid "None" +msgstr "Íÿìà" + +msgid "Not" +msgstr "Íå" + +msgid "Not yet implemented..." +msgstr "Âñå îùå íå å ðàçðàáîòåíî..." + +msgid "Notification Options" +msgstr "Îïöèè çà óâåäîìÿâàíå" + +msgid "Only notify me of ticket changes from other users" +msgstr "Óâåäîìè ìå ñàìî ïðè ïðîìÿíà íà áþëåòèíà îò äðóãè ïîòðåáèòåëè" + +msgid "Open Tickets by Queue" +msgstr "Îòâîðåíè áþëåòèíè ïî ìîäóë" + +msgid "Open Tickets by Owner" +msgstr "Îòâîðåíè áþëåòèíè ïî ïðèòåæàòåë" + +msgid "Open Tickets by Priority" +msgstr "Îòâîðåíè áþëåòèíè ïî ïðèîðèòåò" + +msgid "Open Tickets by Requester" +msgstr "Îòâîðåí áþëåòèíè ïî çàÿâèòåë" + +msgid "Open Tickets by State" +msgstr "Îòâîðåíè áþëåòèíè ïî ñòàòóñ" + +msgid "Open Tickets by Type" +msgstr "Îòâîðåíè áþëåòèíè ïî òèï" + +msgid "Open Tickets by Version" +msgstr "Îòâîðåíè áþëåòèíè ïî âåðñèÿ" + +msgid "Options" +msgstr "Îïöèè" + +msgid "Or" +msgstr "èëè" + +msgid "Orange" +msgstr "Orange" + +msgid "Other Options" +msgstr "Äðóãè Îïöèè" + +msgid "Owner" +msgstr "Ïðèòåæàòåë" + +msgid "Path" +msgstr "Ïúò" + +msgid "Permission Denied." +msgstr "Ïðàâî íà äîñòúï îòêàçàí" + +msgid "" +"Pick a password that you will be able to use in the future to close or " +"otherwise modify this ticket. Type the password a second time to confirm it." +msgstr "" +"Èçáåðåòå ïàðîëà êîÿòî ùå èçïîëçâàòå â áúäåùå çà äà çàòâîðèòå èëè ïðîìåíÿòå " +"áþëåòèíà. Âúâåäåòå ïàðîëàòà äâà ïúòè çà äà ïîòâúðäèòå." + +msgid "Priorities for this Type" +msgstr "Ïðèîðèòåòè çà òîçè òèï" + +msgid "Priority" +msgstr "Ïðèîðèòåò" + +msgid "Priority Description" +msgstr "Îïèñàíèå íà ïðèîðèòåòà" + +msgid "Priority Name" +msgstr "Ïðèîðèòåò èìå" + +msgid "Private" +msgstr "×àñòåí" + +msgid "Property Criteria" +msgstr "Êðèòåðèé ñâîéñòâî" + +msgid "Query Builder" +msgstr "Èçãðàæäàíå íà çàÿâêè" + +msgid "Query Results" +msgstr "Ðåçóëòàòè îò òúðñåíåòî" + +msgid "Re-execute Query" +msgstr "Èçïúëíè ïîâòîðíî çàÿâêàòà" + +msgid "Really delete this attribute? This may cause data problems!!" +msgstr "" +"Äà ñå èçòðèå ëè òîçè àòðèáóò? Òîâà ìîæå äà äîâåäå äî ïðîáëåìè ñ äàííèòå!!" + +msgid "Really delete this queue? This may cause data problems!!" +msgstr "" +"Äà ñå èçòðèå ëè òîçè ìîäóë? Òîâà ìîæå äà äîâåäå äî ïðîáëåìè ñ äàííèòå!!" + +msgid "Really delete this priority? This may cause data problems!!" +msgstr "" +"Äà ñå èçòðèå ëè òîçè ïðèîðèòåò? Òîâà ìîæå äà äîâåäå äî ïðîáëåìè ñ äàííèòå!!" + +msgid "Really delete this state? This may cause data problems!!" +msgstr "" +"Äà ñå èçòðèå ëè òîçè ñòàòóñ? Òîâà ìîæå äà äîâåäå äî ïðîáëåìè ñ äàííèòå!!" + +msgid "Really delete this subject? This may cause data problems!!" +msgstr "Äà ñå èçòðèå ëè òàçè òåìà? Òîâà ìîæå äà äîâåäå äî ïðîáëåìè ñ äàííèòå!!" + +msgid "" +"Really delete this ticket? It will NOT be archived, and will be gone forever." +msgstr "" +"Íàèñòèíà ëè èñêàòå äà ñå èçòðèå òîçè áþëåòèí? Íÿìà äà áúäå àðõèâèðàí è ùå " +"áúäå çàãóáåí íåâúçâðàòèìî." + +msgid "Really delete this type? This may cause data problems!!" +msgstr "Äà ñå èçòðèå ëè òîçè òèï? Òîâà ìîæå äà äîâåäå äî ïðîáëåìè ñ äàííèòå!!" + +msgid "Really delete this version? This may cause data problems!!" +msgstr "" +"Äà ñå èçòðèå ëè òàçè âåðñèÿ? Òîâà ìîæå äà äîâåäå äî ïðîáëåìè ñ äàííèòå!!" + +msgid "Refine Search" +msgstr "Äîïúëíè òúðñåíåòî" + +msgid "Refine search" +msgstr "Äîïúëíè òúðñåíåòî" + +msgid "Remove User" +msgstr "Ïðåìàõíè ïîòðåáèòåë" + +msgid "Reports" +msgstr "Ðàïîðòè" + +msgid "Requester" +msgstr "Çàÿâèòåë" + +msgid "Required 'database' not specified in bugs configuration." +msgstr "Íåîáõîäèìàòà 'database' íå å çàäàäåíà â êîíôèãóðàöèÿòà çà ïðîáëåìè." + +msgid "Required 'hostspec' not specified in bugs configuration." +msgstr "Íåîáõîäèìèÿ 'hostspec' íå å óêàçàí â êîíôèãóðàöèÿòà çà ïðîáëåìè." + +msgid "Required 'password' not specified in bugs configuration." +msgstr "Íåîáõîäèìàòà 'password' íå ñúùåñòâóâà â êîíôèãóðàöèÿ çà ïðîáëåìè." + +msgid "Required 'phptype' not specified in bugs configuration." +msgstr "Íåîáõîäèìèÿ 'phptype' íå å çàäàäåí â êîíôèãóðàöèÿòà çà ïðîáëåìè." + +msgid "Required 'username' not specified in bugs configuration." +msgstr "Íåîáõîäèìîòî 'username' íå å çàäàäåíî â êîíôèãóðàöèÿòà çà ïðîáëåìè." + +msgid "Resolved" +msgstr "Ðàçðåøåí" + +msgid "Restrict ticket subjects to a specified list?" +msgstr "Îãðàíè÷è òåìèòå íà áþëåòèíà äî ñïåöèôè÷åí ñïèñúê" + +msgid "Save Query" +msgstr "Çàïèøè çàÿâêà" + +msgid "Save these results as: " +msgstr "Çàïèøè òåçè ðåçóëòàòè êàòî:" + +msgid "Search" +msgstr "Òúðñè" + +#, c-format +msgid "Search %s Attribute" +msgstr "òúðñè %s Àòðèáóò" + +msgid "Search Assignee" +msgstr "Òúðñè âúçëîæåí íà" + +msgid "Search Attribute" +msgstr "Òúðñè Àòðèáóò" + +msgid "Search Comments" +msgstr "Òúðñè êîìåíòàð" + +msgid "Search Requester" +msgstr "Òúðñè çàÿâèòåë" + +msgid "Search Results" +msgstr "Ðåçóëòàòè îò òúðñåíåòî" + +msgid "Search Summary" +msgstr "Òúðñè â ðåçþìå" + +msgid "Search Tickets" +msgstr "Òúðñè áþëåòèíè" + +msgid "Select the view to display after login:" +msgstr "Èçáåðåòå èçãëåäà, êîéòî äà ñå âèæäà ñëåä âõîä:" + +msgid "Select your color scheme." +msgstr "Èçáåðåòå âàøàòà ñõåìà çà öâåòîâåòå." + +msgid "Select your preferred language:" +msgstr "Èçáåðåòå ïðåäïî÷èòàíèÿò îò Âàñ åçèê:" + +msgid "Set Priority" +msgstr "Èçáåðè ïðèîðèòåò" + +msgid "Set State" +msgstr "Èçáåðè ñòàòóñ" + +msgid "Set Ticket Attributes" +msgstr "Íàñòðîé àòðèáóòè çà áþëåòèí" + +msgid "Set Ticket Priority" +msgstr "Èçáåðè ïðèîðèòåò çà áþëåòèí" + +msgid "Set Ticket State Succeeded" +msgstr "Ñòàòóñà íà áþëåòèíà áåøå óñïåøíî íàñòðîåí" + +msgid "Set your preferred display language." +msgstr "Èçáåðåòå ïðåäïî÷èòàíèÿò îò Âàñ åçèê çà äèñïëåÿ." + +msgid "Show \"(X Days Ago)\" in Date field of search results?" +msgstr "Äà ñå ïîêàçâà ëè \"(X äíè íàçàä)\" â ïîëåòî Äàòà â ðåçóëòàòà?" + +msgid "Show ticket IDs in the summary view?" +msgstr "Äà ñå ïîêàçâàò ëè id íà áþëåòèíèòå â îáîáùåíèåòî?" + +msgid "Show tickets you have requested in the summary view?" +msgstr "Äà ñå ïîêàçâàò ëè èçèñêàíèòå áþëåòèíè â îáîáùåíèÿ èçãëåä?" + +msgid "Simple HTML Report" +msgstr "Îáèêíîâåí HTML ðàïîðò" + +msgid "Some of WHUPS's configuration files are missing:" +msgstr "Íÿêîé îò êîíôèãóðàöèîííèòå ôàéëîâå íà WHUPS ëèïñâàò:" + +msgid "Sort Direction" +msgstr "Ñîðòèðàíå" + +#, c-format +msgid "Sort by %s" +msgstr "ñîðòèðàíå ïî %s" + +msgid "State" +msgstr "Ñòàòóñ" + +msgid "State Category" +msgstr "Ñòàòóñ êàòåãîðèÿ" + +msgid "State Description" +msgstr "Ñòàòóñ îïèñàíèå" + +msgid "State Name" +msgstr "Ñòàòóñ äàòà" + +#, c-format +msgid "State changed to '%s'" +msgstr "Ñòàòóñ ïðîìåíåí íà '%s'" + +#, c-format +msgid "State is '%s'" +msgstr "Ñòàòóñà å '%s'" + +msgid "States for this Type" +msgstr "Ñòàòóñè çà òîçè òèï" + +msgid "Subject" +msgstr "Òåìà" + +msgid "Subject Name" +msgstr "Èìå íà òåìà" + +msgid "Subjects associated with this Queue" +msgstr "Òåìè àñîöèèðàíè ñ òîçè ìîäóë" + +msgid "Summary" +msgstr "Îáîáùåíèå" + +msgid "Sun" +msgstr "Sun" + +msgid "Text" +msgstr "Òåêñò" + +msgid "Text Criteria" +msgstr "Òåêñò êðèòåðèè" + +msgid "The attribute has been deleted." +msgstr "Àòðèáóòà áåøå èçòðèò." + +msgid "The attribute has been modified." +msgstr "Àòðèáóòà áåøå ïðîìåíåí." + +msgid "The attribute was not deleted." +msgstr "Àòðèáóòà íå áåøå èçòðèò." + +#, c-format +msgid "The attribute'%s' has been added to %s." +msgstr "Àòðèáóòà '%s' áåøå äîáàâåí êúì %s." + +#, c-format +msgid "The queue '%s' has been created." +msgstr "Ìîäóëúò '%s' áåøå ñúçäàäåí." + +msgid "The queue has been deleted." +msgstr "Ìîäóëúò áåøå èçòðèò." + +msgid "The queue has been modified." +msgstr "Ìîäóëúò áåøå ïðîìåíåí." + +msgid "The queue was not deleted." +msgstr "Ìîäóëúò íå áåøå èçòðèò." + +#, c-format +msgid "The priority '%s' has been added to %s." +msgstr "Ïðèîðèòåòúò '%s' áåøå äîáàâåí êúì %s." + +msgid "The priority has been deleted." +msgstr "Ïðèîðèòåòúò áåøå èçòðèò." + +msgid "The priority has been modified." +msgstr "Ïðèîðèòåòúò áåøå ìîäèôèöèðàí." + +msgid "The priority was not deleted." +msgstr "Ïðèîðèòåòúò íå áåøå èçòðèò." + +msgid "The requested template does not exist." +msgstr "Èçèñêàíèÿò øàáëîí íå ñúùåñòâóâà." + +#, c-format +msgid "The state '%s' has been added to %s." +msgstr "Ñòàòóñà '%s' áåøå äîáàâåí êúì %s." + +msgid "The state has been deleted." +msgstr "Ñòàòóñà áåøå èçòðèò." + +msgid "The state has been modified." +msgstr "Ñòàòóñà áåøå ïðîìåíåí." + +msgid "The state was not deleted." +msgstr "Ñòàòóñà íå áåøå èçòðèò." + +#, c-format +msgid "The subject '%s' has been added." +msgstr "Òåìàòà '%s' áåøå äîáàâåíà." + +msgid "The subject has been deleted." +msgstr "Òåìàòà áåøå èçòðèòà." + +msgid "The subject has been modified." +msgstr "Òåìàòà áåøå ïðîìåíåíà." + +msgid "The subject was not deleted." +msgstr "Òåìàòà íå áåøå èçòðèòà." + +#, c-format +msgid "The type '%s' has been modified." +msgstr "Òèïúò '%s' íå áåøå ïðîìåíåí." + +msgid "The type has been deleted." +msgstr "Òèïúò áåøå èçòðèò." + +msgid "The type was not deleted." +msgstr "Òèïúò íå áåøå èçòðèò." + +#, c-format +msgid "The version '%s' has been added to %s." +msgstr "Âåðñèÿòà '%s' áåøå äîáàâåíà êúì %s." + +msgid "The version has been deleted." +msgstr "Âåðñèÿòà áåøå èçòðèòà." + +msgid "The version has been modified." +msgstr "Âåðñèÿòà áåøå ïðîìåíåíà." + +msgid "The version was not deleted." +msgstr "Âåðñèÿòà íå áåøå èçòðèòà." + +msgid "There are no attribute types to edit" +msgstr "Íÿìà òèïîâå íà àòðèáóò çà ðåäàêòèðàíå." + +msgid "There are no attributes defined for the current type" +msgstr "Íÿìà äåôèíèðàíè àòðèáóòè çà òåêóùèÿò òèï." + +msgid "There are no queues to edit" +msgstr "Íÿìà ìîäóëè çà ðåäàêöèÿ." + +msgid "There are no queues which you can create tickets in." +msgstr "Íÿìà ìîäóëè çà êîèòî äà ñúçäàâàòå òèïîâå." + +msgid "There are no queues which you can search." +msgstr "Íÿìà ìîäóëè çà òúðñåíå." + +msgid "There are no priorities to edit" +msgstr "Íÿìà ïðèîðèòåòè çà ðåäàêöèÿ" + +msgid "There are no states to edit" +msgstr "Íÿìà ñòàòóñè çà ðåäàêöèÿ." + +msgid "There are no subjects to edit" +msgstr "Íÿìà òåìè çà ðåäàêöèÿ." + +msgid "" +"There are no ticket types associated with this module; until there are, you " +"cannot create any tickets in this module." +msgstr "" +"Íÿìà áþëåòèí àñîöèèðàí ñ òîçè ìîäóë; äîêàòî íÿìà Âèå íå ìîæåòå äà ñúçäàâàòå " +"áþëåòèíè â òîçè ìîäóë." + +msgid "There are no types to edit" +msgstr "Íÿìà òèïîâå çà ðåäàêòèðàíå." + +msgid "There are no users responsible for this module." +msgstr "Íÿìà ïîòðåáèòåëè îòãîâîðíè çà òîçè ìîäóë." + +msgid "There are no users to which this ticket can be assigned." +msgstr "Íÿìà ïîòðåáèòåëè íà êîèòî äà áúäå âúçëîæåí áþëåòèíà." + +msgid "There are no versions to edit" +msgstr "Íÿìà âåðñèÿ çà ðåäàêòèðàíå." + +msgid "There is no data for this graph." +msgstr "Íÿìà äàííè çà òàçè êðèâà." + +msgid "There is no data for this report." +msgstr "Íÿìà äàííè çà òîçè ðàïîðò." + +#, c-format +msgid "There was an error adding '%s' to the responsible list for '%s': %s" +msgstr "Ãðåøêà ïðè äîáàâÿíå íà '%s'êúì ñïèñúêà íà îòãîâîðíèòå çà '%s': %s" + +#, c-format +msgid "There was an error adding the subject: %s." +msgstr "Ãðåøêà ïðè äîáàâÿíå íà òåìàòà : %s." + +#, c-format +msgid "There was an error creating the attribute: %s." +msgstr "Ãðåøêà ïðè ñúçäàâàíå íà àòðèáóòà: %s." + +#, c-format +msgid "There was an error creating the module: %s." +msgstr "Ãðåøêà ïðè ñúçäàâàíå íà ìîäóëà: %s." + +#, c-format +msgid "There was an error creating the priority: %s." +msgstr "Ãðåøêà ïðè ñúçäàâàíå íà ïðèîðèòåò: %s." + +#, c-format +msgid "There was an error creating the state: %s." +msgstr "Ãðåøêà ïðè ñúçäàâàíå íà ñòàòóñà: %s." + +#, c-format +msgid "There was an error creating the version: %s." +msgstr "Ãðåøêà ïðè ñúçäàâàíå íà âåðñèÿòà: %s." + +#, c-format +msgid "There was an error deleting the attribute: %s." +msgstr "Ãðåøêà ïðè èçòðèâàíå íà àòðèáóòà: %s." + +#, c-format +msgid "There was an error deleting the module: %s." +msgstr "Ãðåøêà ïðè èçòðèâàíå íà ìîäóëà: %s." + +#, c-format +msgid "There was an error deleting the priority: %s." +msgstr "Ãðåøêà ïðè èçòðèâàíå íà ïðèîðèòåò: %s." + +#, c-format +msgid "There was an error deleting the state: %s." +msgstr "Ãðåøêà ïðè èçòðèâàíå íà ñòàòóñà: %s." + +#, c-format +msgid "There was an error deleting the subject: %s." +msgstr "Ãðåøêà ïðè èçòðèâàíåòî íà îáåêò: %s." + +#, c-format +msgid "There was an error deleting the ticket: %s" +msgstr "Ãðåøêà ïðè èçòðèâàíå íà áþëåòèí: %s" + +#, c-format +msgid "There was an error deleting the type: %s." +msgstr "Ãðåøêà ïðè èçòðèâàíå íà òèïà: %s." + +#, c-format +msgid "There was an error deleting the version: %s." +msgstr "Ãðåøêà ïðè èçòðèâàíå íà âåðñèÿòà: %s." + +#, c-format +msgid "There was an error editing the attribute: %s." +msgstr "Ãðåøêà ïðè ðåäàêòèðàíå íà àòðèáóòà: %s." + +#, c-format +msgid "There was an error editing the module: %s." +msgstr "Ãðåøêà ïðè ðåäàêòèðàíå íà ìîäóëà: %s." + +#, c-format +msgid "There was an error editing the priority: %s." +msgstr "Ãðåøêà ïðè ðåäàêòèðàíå íà ïðèîðèòåòà: %s." + +#, c-format +msgid "There was an error editing the state: %s." +msgstr "Ãðåøêà ïðè ðåäàêòèðàíå íà ñòàòóñà: %s." + +#, c-format +msgid "There was an error editing the subject: %s." +msgstr "Ãðåøêà ïðè ðåäàêòèðàíå íà òåìàòà: %s." + +#, c-format +msgid "There was an error editing the version: %s." +msgstr "Ãðåøêà ïðè ðåäàêòèðàíå íà âåðñèÿòà: %s." + +#, c-format +msgid "There was an error listing your assigned tickets: %s" +msgstr "Ãðåøêà ïðè ïîêàçâàíåòî íà ñïèñúêà ñ âúçëîæåíèòå áþëåòèíè: %s" + +#, c-format +msgid "There was an error listing your open requests: %s" +msgstr "Ãðåøêà ïðè ïîêàçâàíåòî íà ñïèñúêà ñ îòâîðåíè ìîëáè: %s" + +#, c-format +msgid "There was an error modifying the type: %s." +msgstr "Ãðåøêà ïðè ìîäèôèöèðàíå íà òèïà: %s." + +#, c-format +msgid "There was an error performing your search: %s" +msgstr "Ãðåøêà ïðè òúðñåíå: %s" + +#, c-format +msgid "There was an error removing '%s' from the responsible list for '%s': %s" +msgstr "Ãðåøêà ïðè ïðåìàõâàíåòî íà '%s' îò ñïèñúêà ñ îòãîâîðíèòå çà '%s': %s." + +msgid "" +"This file controls the default preferences for Whups, and also controls " +"which preferences users can alter." +msgstr "" +"Òîçè ôàéë ñúäúðæà íàñòðîéêèòå ïî ïîäðàçáèðàíå íà Whups è êîíòðîëèðà êîè îò " +"òÿõ ïîòðåáèòåëÿò ìîæå äà ïðîìåíÿ." + +msgid "" +"This file controls the stylesheet that is used to set colors and fonts in " +"addition to or overriding Horde defaults." +msgstr "" +"Òîçè ôàéë êîíòðîëèðà ñòèëîâåòå, êîéòî ñå èçïîëçâàò çà öâåòîâåòå è øðèôòîâåòå " +"â äîïúëíåíèå êúì ïîäðàçáèðàùèòå ñòèëîâå íà Horde." + +msgid "" +"This file defines the templates that various parts of Whups use to format " +"data." +msgstr "" +"Òîçè ôàéë äåôèíèðà øàáëîíèòå, êîèòî ðàçëè÷íèòå ÷àñòè íà Whups èçïîëçâàò çà äà" +" ôîðìàòèðàò äàííè" + +msgid "This is not a search results template." +msgstr "Òîâà íå å øàáëîí çà ðåçóëòàòè îò òúðñåíå." + +msgid "This is not a valid subject." +msgstr "Òîâà íå å âàëèäíà òåìà" + +msgid "" +"This is the main WHUPS configuration file. It contains paths and options for " +"all WHUPS scripts." +msgstr "" +"Òîâà å ãëàâíèÿ ôàéë çà êîíôèãóðèðàíå íà WHUPS. Òîé ñúäúðæà ïúòèùàòà è " +"îïöèèòå çà WHUPS ñêðèïòîâåòå." + +#, c-format +msgid "This mail was automatically generated by %s" +msgstr "Òîçè åìàéë áåøå àâòîìàòè÷íî ãåíåðèðàí îò %s" + +msgid "" +"This queue requires that you specify a version, but there are no versions " +"associated with it. Until versions are created for this module, you will not " +"be able to create tickets." +msgstr "" +"Òîçè ìîäóë èçèñêâà äà çàäàäåòå âåðñèÿ, íî íÿìà âåðñèè àñîöèèðàíè ñ íåãî." +"Äîêàòî íÿìà âåðñèè, íå å âúçìîæíî äà ñúçäàâàòå áþëåòèíè." + +#, c-format +msgid "Ticket %s Comments" +msgstr "Áþëåòèí %s êîìåíòàðè" + +#, c-format +msgid "Ticket %s Details" +msgstr "Áþëåòèí %s äåòàéëè" + +#, c-format +msgid "Ticket %s has been assigned" +msgstr "Áþëåòèí %s áåøå âúçëîæåí" + +#, c-format +msgid "Ticket %s has changed priority" +msgstr "Áþëåòèí %s å ñúñ ñìåíåí ïðèîðèòåò" + +#, c-format +msgid "Ticket %s has changed state" +msgstr "Áþëåòèí %s e ñúñ ñìåíåí ñòàòóñ" + +#, c-format +msgid "Ticket %s was not found." +msgstr "Áþëåòèí %s íå áåøå íàìåðåí" + +msgid "Ticket Details" +msgstr "Áþëåòèí äåòàéëè" + +msgid "Ticket ID" +msgstr "Áþëåòèí ID" + +msgid "Ticket Password" +msgstr "Áþëåòèí Ïàðîëà" + +msgid "Ticket State" +msgstr "Áþëåòèí ñòàòóñ" + +msgid "Ticket Stats" +msgstr "Áþëåòèí ñòàòóñ" + +msgid "Ticket Summary" +msgstr "Áþëåòèí îáîáùåíèå" + +msgid "Ticket Type" +msgstr "Áþëåòèí òèï" + +msgid "Ticket Types associated with this Queue" +msgstr "Áþëåòèí òèïîâå àñîöèèðàíè ñ òîçè ìîäóë" + +msgid "Tickets assigned to you" +msgstr "Áþëåòèíè âúçëîæåíè íà Âàñ" + +msgid "Tickets which are" +msgstr "Áþëåòèíè êîèòî ñà" + +msgid "Tickets you requested" +msgstr "Áþëåòèíè êîèòî èçèñêàõòå" + +msgid "Type" +msgstr "Òèï" + +msgid "Type Description" +msgstr "Òèï îïèñàíèå" + +msgid "Type Name" +msgstr "Òèï èìå" + +msgid "Unassigned" +msgstr "Íåâúçëîæåí" + +msgid "Unconfirmed" +msgstr "Íåïîòâúðäåí" + +#, c-format +msgid "Unknown node type %s" +msgstr "Íåèçâåñòåí âúçëîâ òèï %s" + +msgid "User" +msgstr "Ïîòðåáèòåë" + +msgid "User Criteria" +msgstr "Ïîòðåáèòåëñêè êðèòåðèè" + +msgid "User ID" +msgstr "Ïîòðåáèòåë ID" + +msgid "User Options" +msgstr "Ïîòðåáèòåëñêè îïöèè" + +#, c-format +msgid "Users responsible for '%s'" +msgstr "Ïîòðåáèòåëè îòãîâîðíè çà '%s'" + +msgid "Users responsible for this Queue" +msgstr "Ïîòðåáèòåëè îòãîâîðíè çà òîçè ìîäóë" + +msgid "Users responsible for this module" +msgstr "Ïîòðåáèòåëè îòãîâîðíè çà òîçè ìîäóë" + +msgid "Version" +msgstr "Âåðñèÿ" + +msgid "Version Description" +msgstr "Îïèñàíèå íà ïðîáëåìà" + +msgid "Version Name" +msgstr "Âåðñèÿ èìå" + +msgid "View Graphs" +msgstr "Âèæ ãðàôèêàòà" + +msgid "Viewable only by members of" +msgstr "Ìîæå äà ñå ïðåãëåæäà ñàìî îò ÷ëåíîâå íà" + +msgid "WHUPS is not properly configured" +msgstr "WHUPS íå å êîíôèãóðèðàí êîðåêòíî" + +msgid "Weekday Day Month" +msgstr "Ðàáîòåí äåí ìåñåö" + +msgid "Weekday Day Month HH:MM:SS TZ" +msgstr "Ðàáîòåí äåí ìåñåö ××:ÌÌ:ÑÑ ×Ç" + +msgid "Yes" +msgstr "Äà" + +#, c-format +msgid "You do not have permission to access this ticket (%s)." +msgstr "Íÿìàòå ïðàâà çà äîñòúï äî òîçè áþëåòèí (%s)." + +msgid "You have no saved queries." +msgstr "Íÿìàòå çàïèñàíè çàÿâêè." + +msgid "Your Email Address" +msgstr "Âàøèÿ Email àäðåñ" + +msgid "Your Information" +msgstr "Èíôîðìàöèÿ çà Âàñ" + +msgid "Your Password" +msgstr "Âàøàòà Ïàðîëà" + +msgid "Your password is incorrect." +msgstr "Âàøàòà ïàðîëà íå å êîðåêòíà." + +#, c-format +msgid "Your ticket id is %s. " +msgstr "Âàøèÿò áþëåòèí id å %s." + +msgid "contains (case insensitive) substring" +msgstr "ñúäúðæà ñòðèíã íå÷óâñòâèòåëåí êúì ðàçìåðà íà áóêâèòå" + +msgid "contains (case sensitive) substring" +msgstr "ñúäúðæà ñòðèíã ÷óâñòâèòåëåí êúì ðàçìåðà íà áóêâèòå" + +msgid "contains the word" +msgstr "ñúäúðæà äóìàòà" + +msgid "is" +msgstr "å" + +msgid "is greater than" +msgstr "å ïî-ãîëÿì îò" + +msgid "is less than" +msgstr "å ïî-ìàëúê îò" + +msgid "matches the pattern" +msgstr "ñúâïàäà ñúñ óñëîâèÿòà" diff --git a/whups/po/cs_CZ.po b/whups/po/cs_CZ.po new file mode 100644 index 000000000..5d98f37d0 --- /dev/null +++ b/whups/po/cs_CZ.po @@ -0,0 +1,2473 @@ +# translation of cs_CZ.po to Èe¹tina +# Whups Czech Translation. +# Copyright 2002 Pavel Chytil. +# +# Pavel Chytil , 2002. +# Václav Hùla , 2008. +msgid "" +msgstr "" +"Project-Id-Version: cs_CZ\n" +"Report-Msgid-Bugs-To: dev@lists.horde.org\n" +"POT-Creation-Date: 2008-09-25 12:32+0200\n" +"PO-Revision-Date: 2008-11-26 16:45+0100\n" +"Last-Translator: Václav Hùla \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-2\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.2\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#: admin/index.php:745 +#, php-format +msgid "\"%s\" is no longer among those responsible for \"%s\"" +msgstr "'%s' ji¾ nezodpovídá za '%s'" + +#: templates/menu.inc:5 +msgid "#Id" +msgstr "#Id" + +#: templates/ticket/watchers.inc:3 +#, php-format +msgid "%d people watching, %d people responsible" +msgstr "%d sledujících, %d zodpovídajících" + +#: queue/rss.php:96 +#, php-format +msgid "%s %s tickets in %s" +msgstr "%s %s lístkù v %s" + +#: queue/rss.php:100 +#, php-format +msgid "%s %s tickets in all queues" +msgstr "%s %s lístkù ve v¹ech frontách" + +#: lib/Renderer/Comment.php:120 +#, php-format +msgid "%s ⇒ %s" +msgstr "%s ⇒ %s" + +#: lib/Driver.php:497 +#, php-format +msgid "%s (%s) wrote:" +msgstr "%s (%s) napsal:" + +#: admin/index.php:700 +#, php-format +msgid "%s added to those responsible for \"%s\"" +msgstr "'%s' nyní zodpovídá za '%s'" + +#: templates/reports/stats.inc:15 +#, php-format +msgid "%s days" +msgstr "%s dnù" + +#: queue/rss.php:104 +#, php-format +msgid "%s tickets in %s" +msgstr "%s lístkù v %s" + +#: queue/rss.php:108 +#, php-format +msgid "%s tickets in all queues" +msgstr "%s lístkù ve v¹ech frontách" + +#: ticket/watch.php:60 +#, php-format +msgid "%s will be notified when this ticket is updated." +msgstr "%s bude upozornìn pøi zmìnì lístku" + +#: ticket/watch.php:72 +#, php-format +msgid "%s will no longer receive updates for this ticket." +msgstr "%s ji¾ nebude upozornìován pøi zmìnì lístku" + +#: admin/index.php:109 +msgid "- Stage 1" +msgstr "- krok 1" + +#: admin/index.php:114 +msgid "- Stage 2" +msgstr "- krok 2" + +#: scripts/mail-filter.php:172 +msgid "--queue-name or --queue-id must specify a valid and public queue." +msgstr "--queue-name or --queue-id musí být platná veøejná fronta" + +#: templates/prevnext.inc:16 +msgid "<>" +msgstr "Poslední>>" + +#: lib/Forms/Query.php:411 +msgid "Load Query" +msgstr "Nahrát dotaz" + +#: lib/Forms/VarRenderer.php:46 +msgid "Loading..." +msgstr "Nahrávání..." + +#: config/prefs.php.dist:106 +msgid "MM/DD/YY" +msgstr "MM/DD/RR" + +#: config/prefs.php.dist:107 +msgid "MM/DD/YY HH:MM:SS" +msgstr "MM/DD/RR HH:MM:SS" + +#: lib/Forms/Admin/Type.php:193 +#, php-format +msgid "Make a clone of %s" +msgstr "Naklonuj %s" + +#: lib/Forms/EditTicket.php:167 lib/Forms/AddComment.php:38 +msgid "Make this comment visible only to members of a group?" +msgstr "" + +#: lib/Forms/Query.php:274 +msgid "Match" +msgstr "Porovnání" + +#: lib/Forms/Query.php:45 lib/Forms/Query.php:129 lib/Forms/Query.php:275 +msgid "Match Operator" +msgstr "Operátor porovnání" + +#: lib/Query.php:167 +msgid "Match Pattern" +msgstr "Formát porovnání" + +#: lib/Query.php:166 +msgid "Match Word" +msgstr "Porovnat Slovo" + +#: reports.php:30 +msgid "Maximum time a ticket is unresolved" +msgstr "Nejdel¹í èas do uzavøení lístku" + +#: lib/Block/tree_menu.php:3 +msgid "Menu List" +msgstr "Seznam nabídky" + +#: reports.php:31 +msgid "Minimum time a ticket is unresolved" +msgstr "Nejkrat¹í èas do uzavøení lístku" + +#: config/prefs.php.dist:146 +msgid "Most recent first" +msgstr "Od nejnovìj¹ích" + +#: templates/prefs/sourceselect.inc:312 +msgid "Move down" +msgstr "Posunout dolù" + +#: templates/prefs/sourceselect.inc:310 +msgid "Move up" +msgstr "Posunout nahoru" + +#: ticket/queue.php:181 +#, php-format +msgid "Moved ticket %d to \"%s\"" +msgstr "Lístek %d pøesunut do \"%s\"" + +#: mybugs.php:54 +#, php-format +msgid "My %s" +msgstr "Moje %s" + +#: mybugs_edit.php:33 +#, php-format +msgid "My %s :: Add Content" +msgstr "Moje %s: Pøidat Komentáø" + +#: search.php:178 lib/Block/myqueries.php:3 lib/Block/myqueries.php:24 +msgid "My Queries" +msgstr "Moje Dotazy" + +#: lib/Block/myrequests.php:3 lib/Block/myrequests.php:24 +msgid "My Requests" +msgstr "Po¾adavky" + +#: lib/Block/mytickets.php:3 lib/Block/mytickets.php:24 +#: config/prefs.php.dist:75 +msgid "My Tickets" +msgstr "Moje lístky" + +#: lib/api.php:884 +msgid "My tickets by assignment date" +msgstr "Moje lístky podle data pøiøazení" + +#: lib/api.php:883 +msgid "My tickets by creation date" +msgstr "Moje lístky podle data vytvoøení" + +#: lib/api.php:885 +msgid "My tickets by due date" +msgstr "Moje lístky podle po¾adovaného data uzavøení" + +#: lib/api.php:886 +msgid "My tickets by resolution date" +msgstr "Moje lístky podle data uzavøení" + +#: lib/Forms/Query.php:422 +msgid "Name" +msgstr "Jméno" + +#: lib/Forms/Admin/Type.php:198 +msgid "Name of the cloned copy" +msgstr "Jméno kopie" + +#: lib/Query.php:216 +msgid "Ne_w Query" +msgstr "_Nový dotaz" + +#: lib/Driver.php:197 +msgid "New" +msgstr "Nové" + +#: lib/Ticket.php:618 lib/Ticket.php:711 +msgid "New Attachment" +msgstr "Nová pøíloha" + +#: lib/Renderer/Comment.php:58 lib/Renderer/Comment.php:62 +#, php-format +msgid "New Attachment: %s" +msgstr "Nová pøíloha: %s" + +#: ticket/queue.php:32 +msgid "New Queue" +msgstr "Pøesunout do fronty:" + +#: ticket/create.php:67 lib/Block/tree_menu.php:21 +msgid "New Ticket" +msgstr "Nový lístek" + +#: ticket/type.php:31 +msgid "New Type" +msgstr "Zmìnit typ na:" + +#: templates/prevnext.inc:26 +msgid "Next>" +msgstr "Dal¹í>" + +#: ticket/delete.php:33 lib/Forms/Query.php:449 lib/Forms/Admin/Version.php:96 +#: lib/Forms/Admin/State.php:121 lib/Forms/Admin/Priority.php:121 +#: lib/Forms/Admin/Queue.php:174 lib/Forms/Admin/Attribute.php:149 +#: lib/Forms/Admin/Reply.php:110 lib/Forms/Admin/Type.php:176 +msgid "No" +msgstr "Ne" + +#: lib/Ticket.php:100 +#, php-format +msgid "" +"No priority for this ticket and no default priority for ticket type \"%s\" " +"specified." +msgstr "Lístek nemá prioritu a lístky typu \"%s\" nemají výchozí prioritu." + +#: lib/Block/myqueries.php:46 +msgid "No queries have been saved." +msgstr "®ádné dotazy neulo¾eny" + +#: lib/Block/query.php:62 lib/Driver/sql.php:553 +msgid "No query to run" +msgstr "Nezadán ¾ádný dotaz" + +#: lib/Block/queuecontents.php:25 +msgid "No queues available." +msgstr "Není dostupná ¾ádná fronta" + +#: lib/Ticket.php:92 +#, php-format +msgid "" +"No state for this ticket and no default state for ticket type \"%s\" " +"specified." +msgstr "Lístek nemá zadaný stav a lístky typu \"%s\" nemají výchozí stav." + +#: reports.php:35 +msgid "No stats available." +msgstr "Nejsou k dospozici ¾ádné statistiky." + +#: lib/Driver.php:533 +#, php-format +msgid "No such backend \"%s\" found" +msgstr "backend '%s' nenalezen" + +#: lib/View.php:33 +#, php-format +msgid "No such view \"%s\" found" +msgstr "Pohled '%s' nenalezen" + +#: lib/Block/mytickets.php:45 +msgid "No tickets are assigned to you." +msgstr "Nemáte pøiøazeny ¾ádné lístky" + +#: lib/Block/unassigned.php:45 +msgid "No tickets are unassigned!" +msgstr "®ádné nepøiøazené lístky!" + +#: lib/Block/queuecontents.php:62 lib/Block/queuecontents.php:73 +msgid "No tickets in queue." +msgstr "Ve frontì nejsou ¾ádné lístky." + +#: lib/Whups.php:716 +msgid "No tickets matched your search criteria." +msgstr "Nastaveným filtrùm nevyhovuje ¾ádný lístek" + +#: lib/Ticket.php:84 +#, php-format +msgid "No type for this ticket and no default type for queue \"%s\" specified." +msgstr "Lístek nemá typ a lístky z fronty \"%s\" nemají výchozí typ." + +#: templates/prefs/sourceselect.inc:35 lib/Reports.php:67 +msgid "None" +msgstr "®ádný" + +#: lib/Renderer/Query.php:79 lib/Forms/Query.php:26 +msgid "Not" +msgstr "Není" + +#: config/prefs.php.dist:17 +msgid "Notification Options" +msgstr "Mo¾nosti upozoròování" + +#: config/prefs.php.dist:117 +msgid "Only notify me of ticket changes from other users?" +msgstr "Upozoròovat na zmìny jen od ostatních?" + +#: config/prefs.php.dist:126 +msgid "Only notify me of ticket changes with comments?" +msgstr "Upozoròovat jen na zmìny s komentáøi?" + +#: queue/rss.php:43 +msgid "Open" +msgstr "Otevøené" + +#: lib/Block/queuesummary.php:49 +msgid "Open Tickets" +msgstr "Otevøené lístky" + +#: reports.php:23 +msgid "Open Tickets by Owner" +msgstr "Otevøené lístky podle majitele" + +#: reports.php:21 +msgid "Open Tickets by Priority" +msgstr "Otevøené lístky podle priority" + +#: reports.php:18 +msgid "Open Tickets by Queue" +msgstr "Otevøené lístky podle fronty" + +#: reports.php:22 +msgid "Open Tickets by Requester" +msgstr "Otevøené lístky podle zadavatele" + +#: reports.php:19 +msgid "Open Tickets by State" +msgstr "Otevøené lístky podle stavu" + +#: reports.php:20 +msgid "Open Tickets by Type" +msgstr "Otevøené lístky podle typu" + +#: lib/Block/queuecontents.php:47 +#, php-format +msgid "Open Tickets in %s" +msgstr "Otevøené lístky v %s" + +#: queue/rss.php:119 queue/index.php:43 queue/index.php:57 +#, php-format +msgid "Open tickets in %s" +msgstr "Otevøené lístky v %s" + +#: queue/rss.php:121 +msgid "Open tickets in all queues." +msgstr "Otevøené lístky ve v¹ech frontách." + +#: lib/Renderer/Query.php:78 lib/Forms/Query.php:25 +msgid "Or" +msgstr "Nebo" + +#: lib/Whups.php:681 lib/Ticket.php:617 lib/Ticket.php:701 lib/Ticket.php:702 +#: lib/Ticket.php:705 lib/Ticket.php:812 lib/Ticket.php:833 lib/Ticket.php:958 +#: lib/Renderer/Query.php:84 lib/Forms/CreateTicket.php:225 +#: lib/Forms/CreateTicket.php:243 lib/Forms/EditTicket.php:104 +msgid "Owners" +msgstr "Vlastníci" + +#: lib/Whups.php:866 +#, php-format +msgid "Permanently delete %s?" +msgstr "Permanentnì smazat %s?" + +#: ticket/update.php:22 ticket/type.php:74 ticket/delete.php:51 +#: ticket/queue.php:131 ticket/deleteAttachment.php:21 +msgid "Permission Denied" +msgstr "Pøístup odepøen" + +#: ticket/delete.php:40 lib/Forms/EditTicket.php:197 +msgid "Permission Denied." +msgstr "Pøístup odepøen." + +#: query/run.php:44 query/index.php:31 lib/Forms/Query.php:459 +#, php-format +msgid "Permission denied." +msgstr "Pøístup odepøen." + +#: lib/Imple/ContactAutoCompleter.php:227 +msgid "Please resolve ambiguous or invalid addresses." +msgstr "Prosím opravte nejednoznaèné nebo neplatné adresy." + +#: lib/Forms/Admin/Type.php:93 lib/Forms/Admin/Type.php:171 +msgid "Priorities for this Type" +msgstr "Priority pro tento typ" + +#: ticket/type.php:66 ticket/queue.php:117 lib/Whups.php:669 lib/Whups.php:678 +#: lib/Ticket.php:610 lib/Ticket.php:807 lib/Ticket.php:953 +#: lib/Renderer/Query.php:125 lib/Forms/CreateTicket.php:147 +#: lib/Forms/EditTicket.php:68 lib/Forms/Query.php:198 +#: config/prefs.php.dist:49 +msgid "Priority" +msgstr "Priorita" + +#: lib/Renderer/Comment.php:115 +#, php-format +msgid "Priority ⇒ %s" +msgstr "Priorita ⇒ %s" + +#: lib/Forms/Admin/Priority.php:24 lib/Forms/Admin/Priority.php:70 +#: lib/Forms/Admin/Priority.php:118 +msgid "Priority Description" +msgstr "Popis priority" + +#: lib/Forms/Admin/Priority.php:23 lib/Forms/Admin/Priority.php:48 +#: lib/Forms/Admin/Priority.php:67 lib/Forms/Admin/Priority.php:94 +#: lib/Forms/Admin/Priority.php:115 +msgid "Priority Name" +msgstr "Jméno priority" + +#: search.php:178 +msgid "Public Queries" +msgstr "Veøejné dotazy" + +#: query/index.php:172 +msgid "Query Builder" +msgstr "Tvùrce dotazù" + +#: lib/Forms/Query.php:387 +msgid "Query Name" +msgstr "Jméno dotazu" + +#: lib/Forms/QueryParameterForm.php:20 +msgid "Query Parameters" +msgstr "Parametry dotazù" + +#: query/rss.php:63 query/run.php:79 lib/Block/query.php:3 +#: lib/Block/query.php:49 +msgid "Query Results" +msgstr "Výsledky vyhledávání" + +#: lib/Forms/Query.php:389 +msgid "Query Slug" +msgstr "Slug dotazu" + +#: lib/Block/query.php:33 +msgid "Query to run" +msgstr "Provést dotaz..." + +#: lib/Whups.php:679 lib/Ticket.php:606 lib/Ticket.php:803 lib/Ticket.php:918 +#: lib/Ticket.php:923 lib/Renderer/Query.php:94 lib/Forms/Query.php:181 +#: lib/Forms/Search.php:40 lib/Block/queuecontents.php:32 +#: lib/Block/queuesummary.php:49 config/prefs.php.dist:50 +msgid "Queue" +msgstr "Fronta" + +#: lib/Renderer/Comment.php:100 +#, php-format +msgid "Queue ⇒ %s" +msgstr "Fronta ⇒ %s" + +#: lib/Block/queuecontents.php:3 lib/Block/queuecontents.php:49 +msgid "Queue Contents" +msgstr "Obsah fronty:" + +#: lib/Forms/Admin/Queue.php:24 lib/Forms/Admin/Queue.php:89 +#: lib/Forms/Admin/Queue.php:170 +msgid "Queue Description" +msgstr "Popis fronty" + +#: lib/Forms/Admin/Queue.php:30 lib/Forms/Admin/Queue.php:97 +msgid "Queue Email" +msgstr "E-mail fronty" + +#: lib/Forms/CreateTicket.php:34 lib/Forms/CreateTicket.php:45 +#: lib/Forms/Admin/Queue.php:23 lib/Forms/Admin/Queue.php:60 +#: lib/Forms/Admin/Queue.php:85 lib/Forms/Admin/Queue.php:166 +msgid "Queue Name" +msgstr "Jméno fronty" + +#: lib/Forms/Admin/Queue.php:26 lib/Forms/Admin/Queue.php:93 +msgid "Queue Slug" +msgstr "Slug fronty" + +#: lib/Block/queuesummary.php:3 lib/Block/queuesummary.php:24 +msgid "Queue Summary" +msgstr "Shrnutí" + +#: ticket/queue.php:86 lib/Ticket.php:932 lib/Ticket.php:938 +#: lib/Forms/CreateTicket.php:93 +msgid "Queue Version" +msgstr "Verze fronty" + +#: admin/index.php:35 +msgid "Queue/Type Matri_x" +msgstr "Matice front/typù" + +#: templates/admin/mtmatrix.inc:6 +msgid "Queue/Type Matrix" +msgstr "Matice front/typù" + +#: lib/api.php:163 lib/api.php:781 +msgid "Queues" +msgstr "Fronty" + +#: templates/prevnext.inc:32 +msgid "Re_turn to Search Results" +msgstr "Zpìt na výsledky hledání?" + +#: lib/Forms/Admin/Attribute.php:147 +msgid "Really delete this attribute? This may cause data problems!" +msgstr "" +"Opravdu chcete vymazat tento atribut? Mù¾e to mít za následek problémy s " +"daty!!" + +#: lib/Forms/Admin/Reply.php:108 +msgid "Really delete this form reply?" +msgstr "Skuteènì odstranit tento vzor odpovìdi?" + +#: lib/Forms/Admin/Priority.php:122 +msgid "Really delete this priority? This may cause data problems!" +msgstr "" +"Opravdu chcete vymazat tuto prioritu? Mù¾e to mít za následek problémy s " +"daty!!" + +#: lib/Forms/Query.php:450 +msgid "Really delete this query? This operation is not undoable." +msgstr "Opravdu smazat tento dotaz? Tato operace je nevratná." + +#: lib/Forms/Admin/Queue.php:176 +msgid "Really delete this queue? This may cause data problems!" +msgstr "" +"Opravdu chcete vymazat tuto frontu? Mù¾e to mít za následek problémy s daty!!" + +#: lib/Forms/Admin/State.php:122 +msgid "Really delete this state? This may cause data problems!" +msgstr "" +"Opravdu chcete vymazat tento stav? Mù¾e to mít za následek problémy s daty!!" + +#: ticket/delete.php:34 +msgid "" +"Really delete this ticket? It will NOT be archived, and will be gone forever." +msgstr "" +"Opravdu smazat tento lístek? Nebude archivován a bude definitivnì smazán." + +#: lib/Forms/Admin/Type.php:178 +msgid "Really delete this type? This may cause data problems!" +msgstr "" +"Opravdu chcete vymazat tento typ? Mù¾e to mít za následek problémy s daty!!" + +#: lib/Forms/Admin/Version.php:97 +msgid "Really delete this version? This may cause data problems!" +msgstr "" +"Opravdu chcete vymazat tuto verzi? Mù¾e to mít za následek problémy s daty!!" + +#: lib/Mail.php:217 +msgid "Received message:" +msgstr "Obdr¾ená zpráva:" + +#: search.php:162 +msgid "Refine Search" +msgstr "Pøedefinujte vyhledávání" + +#: admin/index.php:1170 +msgid "Reminders were sent." +msgstr "Upomínky rozeslány." + +#: lib/Forms/Admin/User.php:59 +msgid "Remove User" +msgstr "Odstranit u¾ivatele" + +#: ticket/watch.php:49 +msgid "Remove Watcher" +msgstr "Odstranit sledujícího" + +#: templates/prefs/sourceselect.inc:300 +msgid "Remove source" +msgstr "Odstranit zdroj" + +#: lib/Renderer/Comment.php:95 +msgid "Reply to this comment" +msgstr "Odpovìdìt na komentáø" + +#: reports.php:40 +msgid "Reports" +msgstr "Reporty" + +#: lib/Whups.php:680 lib/Ticket.php:965 lib/Renderer/Query.php:86 +msgid "Requester" +msgstr "Zadavatel" + +#: lib/Forms/Admin/Attribute.php:28 lib/Forms/Admin/Attribute.php:99 +msgid "Required Attribute?" +msgstr "Povinný atribut?" + +#: lib/Whups.php:685 lib/Ticket.php:991 lib/Driver.php:199 lib/api.php:927 +#: lib/Renderer/Query.php:151 config/prefs.php.dist:54 +msgid "Resolved" +msgstr "Vyøe¹eno" + +#: lib/Forms/Query.php:330 lib/Forms/Search.php:60 +msgid "Resolved from" +msgstr "Vyøe¹eno od" + +#: lib/Forms/Query.php:331 +msgid "Resolved to" +msgstr "Vyøe¹eno do" + +#: lib/Forms/Admin/User.php:61 +msgid "Responsible Users" +msgstr "Zodpovìdní U¾ivatelé" + +#: lib/Whups.php:306 +msgid "S_et Queue" +msgstr "Zmìna fronty" + +#: lib/Query.php:234 +msgid "Sa_ve Query" +msgstr "Ulo¾ dotaz" + +#: templates/view/results.inc:96 lib/Forms/Query.php:385 +msgid "Save" +msgstr "Ulo¾it" + +#: query/index.php:233 +msgid "Save Criterion" +msgstr "Ulo¾it kriterium" + +#: lib/Forms/Query.php:384 +msgid "Save Query" +msgstr "Ulo¾ dotaz" + +#: search.php:69 lib/Forms/Search.php:19 +msgid "Save as Query" +msgstr "Ulo¾ jako dotaz" + +#: search.php:155 lib/Block/tree_menu.php:30 +msgid "Search" +msgstr "Hledej" + +#: lib/Forms/Query.php:278 +#, php-format +msgid "Search %s Attribute" +msgstr "Vyhledávání %s" + +#: lib/Forms/Query.php:272 lib/Forms/Query.php:281 +msgid "Search Attribute" +msgstr "Atributy" + +#: lib/Forms/Query.php:48 lib/Forms/Query.php:131 +msgid "Search Comments" +msgstr "Komentáøe" + +#: lib/Forms/Query.php:46 +msgid "Search Owners" +msgstr "Majitelé" + +#: lib/Forms/Query.php:47 +msgid "Search Requester" +msgstr "Zadavatelé" + +#: search.php:147 search/rss.php:55 search/rss.php:59 +msgid "Search Results" +msgstr "Výsledky vyhledávání" + +#: templates/prevnext.inc:38 +#, php-format +msgid "Search Results: %s of %s" +msgstr "Výsledky vyhledávání %s z %s" + +#: lib/Forms/Query.php:130 +msgid "Search Summary" +msgstr "Shrnutí" + +#: config/prefs.php.dist:76 +msgid "Search Tickets" +msgstr "Hledání v lístcích" + +#: config/prefs.php.dist:25 +msgid "Select address book sources for adding and searching for addresses." +msgstr "Volba zdrojù adresáøe pro pøidávaní a vyhledávání adres." + +#: templates/prefs/sourceselect.inc:319 +msgid "Select all fields to search when expanding addresses." +msgstr "Vybrat v¹echna pole pro vyhledávání pøi expanzi adres." + +#: config/prefs.php.dist:78 +msgid "Select the view to display after login:" +msgstr "Vybrat zobrazení po pøihlá¹ení:" + +#: templates/prefs/sourceselect.inc:303 templates/prefs/sourceselect.inc:305 +msgid "Selected Address books:" +msgstr "Vybraný zdroj adresáøù:" + +#: admin/index.php:36 +msgid "Sen_d Reminders" +msgstr "Rozeslat upomínky" + +#: lib/Forms/Admin.php:23 +msgid "Send Reminders" +msgstr "Rozeslat upomínky" + +#: lib/Forms/Admin.php:34 +msgid "Send only for this list of ticket ids" +msgstr "Zasílat pouze pro tyto lístky:" + +#: lib/Forms/Admin/Priority.php:80 lib/Forms/Admin/Priority.php:82 +msgid "Set Default Priority" +msgstr "Zadejte výchozí prioritu" + +#: lib/Forms/Admin/State.php:80 lib/Forms/Admin/State.php:82 +msgid "Set Default State" +msgstr "Zadejte výchozí stav" + +#: ticket/queue.php:201 ticket/queue.php:210 ticket/queue.php:222 +msgid "Set Queue - Step 1" +msgstr "Zmìna fronty - krok 1" + +#: ticket/queue.php:202 ticket/queue.php:211 +msgid "Set Queue - Step 2" +msgstr "Zmìna fronty - krok 2" + +#: ticket/queue.php:212 +msgid "Set Queue - Step 3" +msgstr "Zmìna fronty - krok 3" + +#: ticket/queue.php:189 +#, php-format +msgid "Set Queue for %s" +msgstr "Zmìna fronty pro %s" + +#: lib/api.php:800 +msgid "Set Requester" +msgstr "Zadavatel" + +#: ticket/type.php:139 ticket/type.php:148 +msgid "Set Type - Step 1" +msgstr "Zmìna typu - krok 1" + +#: ticket/type.php:140 +msgid "Set Type - Step 2" +msgstr "Zmìna typu - krok 1" + +#: ticket/type.php:127 +#, php-format +msgid "Set Type for %s" +msgstr "Zmìna typu pro %s" + +#: lib/Whups.php:311 +msgid "Set _Type" +msgstr "Zmìna typu" + +#: config/prefs.php.dist:144 +msgid "Show comments in chronological order, or most recent first?" +msgstr "Zobrazit komentáøe chronologicky nebo od nejnovìj¹ích?" + +#: config/prefs.php.dist:95 +msgid "Show ticket IDs in the summary view?" +msgstr "Zobrazovat ID lístkù v pøehledech?" + +#: config/prefs.php.dist:87 +msgid "Show tickets you have requested in the summary view?" +msgstr "Zobrazovat po¾adované lístky v pøehledech?" + +#: config/templates.php.dist:16 +msgid "Simple HTML Report" +msgstr "Jednoduché HTML" + +#: lib/Forms/Admin/Queue.php:27 +#, php-format +msgid "" +"Slugs allows direct access to this queue's open tickets by visiting: %s. " +"
Slug names may contain only letters, numbers or the _ (underscore) " +"character." +msgstr "" +"Slugy umo¾òují pøímý pøístup na otevøené lístky v této frontì náv¹tìvou %s. " +"
Slugy mohou obsahovat jen ascii písmena, èísla a _ (podtr¾ítko)" + +#: templates/view/results.inc:37 templates/view/results.inc:41 +#, php-format +msgid "Sort by %s" +msgstr "Setøídit podle %s" + +#: lib/Forms/CreateTicket.php:136 lib/Forms/CreateTicket.php:175 +#: lib/Forms/AddComment.php:20 lib/Forms/AddComment.php:51 +msgid "Spam protection" +msgstr "Ochrana pøed spamem" + +#: ticket/type.php:65 ticket/queue.php:116 lib/Whups.php:670 lib/Whups.php:676 +#: lib/Ticket.php:609 lib/Ticket.php:806 lib/Ticket.php:949 +#: lib/Renderer/Query.php:117 lib/Forms/EditTicket.php:62 +#: lib/Forms/Query.php:193 config/prefs.php.dist:47 +msgid "State" +msgstr "Stav" + +#: lib/Renderer/Comment.php:110 +#, php-format +msgid "State ⇒ %s" +msgstr "Stav ⇒ '%s'" + +#: lib/Forms/Admin/State.php:25 lib/Forms/Admin/State.php:70 +msgid "State Category" +msgstr "Kategorie Stavu" + +#: lib/Forms/Admin/State.php:24 lib/Forms/Admin/State.php:67 +#: lib/Forms/Admin/State.php:118 +msgid "State Description" +msgstr "Popis Stavu" + +#: lib/Forms/Admin/State.php:23 lib/Forms/Admin/State.php:47 +#: lib/Forms/Admin/State.php:64 lib/Forms/Admin/State.php:96 +#: lib/Forms/Admin/State.php:115 +msgid "State Name" +msgstr "Jméno Stavu" + +#: lib/Forms/Admin/Type.php:76 lib/Forms/Admin/Type.php:165 +msgid "States for this Type" +msgstr "Stavy pro tento Typ" + +#: templates/ticket/watchers.inc:1 +msgid "Status" +msgstr "Stav" + +#: ticket/create.php:146 +msgid "Submit" +msgstr "Odeslat" + +#: query/run.php:93 query/run.php:94 +msgid "Subscribe to this query" +msgstr "Pøihlástit dotaz" + +#: admin/index.php:198 +#, php-format +msgid "Successfully Cloned %s to %s." +msgstr "Úspì¹nì naklonováno %s do %s" + +#: ticket/type.php:118 +msgid "Successfully changed ticket type." +msgstr "Typ lístku úspì¹ne zmìnìn." + +#: ticket/delete.php:30 lib/Whups.php:668 lib/Whups.php:675 lib/Ticket.php:616 +#: lib/Ticket.php:643 lib/Ticket.php:646 lib/Ticket.php:650 lib/Ticket.php:812 +#: lib/Ticket.php:821 lib/Ticket.php:912 lib/Renderer/Query.php:89 +#: lib/Forms/CreateTicket.php:152 lib/Forms/EditTicket.php:58 +#: config/prefs.php.dist:46 +msgid "Summary" +msgstr "Shrnutí" + +#: lib/Renderer/Comment.php:51 +#, php-format +msgid "Summary ⇒ %s" +msgstr "Shrnutí ⇒ '%s'" + +#: lib/Forms/Search.php:43 +msgid "Summary like" +msgstr "Shrnutí" + +#: lib/Renderer/Comment.php:79 +#, php-format +msgid "Taken from %s" +msgstr "Odebráno %s" + +#: lib/Forms/Query.php:128 +msgid "Text" +msgstr "Text" + +#: lib/Driver/sql.php:80 lib/Driver/sql.php:1306 +msgid "That queue slug is already taken. Please select another." +msgstr "Tento slug je ji¾ obsazen." + +#: lib/Forms/CreateTicket.php:129 +msgid "The Requester's Email Address" +msgstr "Emailová adresa zadavatele" + +#: view.php:58 lib/Ticket.php:439 lib/Ticket.php:487 +msgid "The VFS backend needs to be configured to enable attachment uploads." +msgstr "Pro odesílání pøíloh musí být nastaven VSF systém." + +#: admin/index.php:906 +#, php-format +msgid "The attribute \"%s\" has been added to %s." +msgstr "Atribut '%s' byl pøidán do %s." + +#: admin/index.php:1006 +msgid "The attribute has been deleted." +msgstr "Atribut byl vymazán." + +#: admin/index.php:974 +msgid "The attribute has been modified." +msgstr "Atribut byl modifikován." + +#: admin/index.php:1015 +msgid "The attribute was not deleted." +msgstr "Atribut nebyl vymazán." + +#: admin/index.php:642 +msgid "The default priority has been set." +msgstr "Nastavena výchozí priorita." + +#: admin/index.php:506 +msgid "The default state has been set." +msgstr "Nastaven výchozí stav." + +#: admin/index.php:1043 +#, php-format +msgid "The form reply \"%s\" has been added to %s." +msgstr "Byla pøidán vzoru odpovìdi '%s' do %s." + +#: admin/index.php:1135 +msgid "The form reply has been deleted." +msgstr "Vzor odpovìdi byl vymazán." + +#: admin/index.php:1108 +msgid "The form reply has been modified." +msgstr "Vzor odpovìdi byl modifikován." + +#: admin/index.php:1144 +msgid "The form reply was not deleted." +msgstr "Vzor odpovìdi nebyl vymazán." + +#: admin/index.php:556 +#, php-format +msgid "The priority \"%s\" has been added to %s." +msgstr "Byla pøidána priorita '%s' do %s." + +#: admin/index.php:661 +msgid "The priority has been deleted." +msgstr "Priorita byla vymazána." + +#: admin/index.php:609 +msgid "The priority has been modified." +msgstr "Priorita byla modifikována." + +#: admin/index.php:670 +msgid "The priority was not deleted." +msgstr "Priorita nebyla vymazána." + +#: lib/Forms/Query.php:463 +#, php-format +msgid "The query \"%s\" couldn't be deleted: %s" +msgstr "Nelze smazat frontu \"%s\": %s" + +#: lib/Forms/Query.php:465 +#, php-format +msgid "The query \"%s\" has been deleted." +msgstr "Fronta \"%s\" byla vymazána." + +#: lib/Forms/Query.php:430 +#, php-format +msgid "The query couldn't be loaded:" +msgstr "Nelze nahrát dotaz" + +#: admin/index.php:300 +#, php-format +msgid "The queue \"%s\" has been created." +msgstr "Byla vytvoøena fronta '%s'" + +#: admin/index.php:392 +msgid "The queue has been deleted." +msgstr "Fronta smazána." + +#: admin/index.php:359 +msgid "The queue has been modified." +msgstr "Fronta upravena." + +#: admin/index.php:400 +msgid "The queue was not deleted." +msgstr "Fronta nebyla smazána" + +#: lib/MIME/Viewer/zip.php:58 +msgid "The requested file does not exist in the Zip attachment." +msgstr "Po¾adovaný soubor v zip pøíloze neexistuje." + +#: data.php:26 +msgid "The requested template does not exist." +msgstr "Po¾adovaný vzor neexistuje." + +#: admin/index.php:422 +#, php-format +msgid "The state \"%s\" has been added to %s." +msgstr "Stav '%s' byl pøidán do %s." + +#: admin/index.php:525 +msgid "The state has been deleted." +msgstr "Stav byl vymazán." + +#: admin/index.php:475 +msgid "The state has been modified." +msgstr "Stav byl modifikován." + +#: admin/index.php:533 +msgid "The state was not deleted." +msgstr "Stav nebyl vymazán." + +#: ticket/delete.php:78 +msgid "The ticket was not deleted." +msgstr "Lístek nebyl vymazán." + +#: admin/index.php:223 +#, php-format +msgid "The type \"%s\" has been modified." +msgstr "Typ '%s' byl modifikován." + +#: admin/index.php:272 +msgid "The type has been deleted." +msgstr "Typ byl vymazán." + +#: admin/index.php:280 +msgid "The type was not deleted." +msgstr "Typ nebyl vymazán." + +#: admin/index.php:776 +#, php-format +msgid "The version \"%s\" has been added to %s." +msgstr "Verze '%s' byla pøidána do %s." + +#: admin/index.php:865 +msgid "The version has been deleted." +msgstr "Verze byla vymazána." + +#: admin/index.php:835 +msgid "The version has been modified." +msgstr "Verze byla modifikována." + +#: admin/index.php:873 +msgid "The version was not deleted." +msgstr "Verze nebyla vymazána." + +#: lib/Forms/Admin/Attribute.php:70 +msgid "There are no attribute types to edit" +msgstr "Nejsou zde ¾ádné typy, které lze zmìnit" + +#: lib/Forms/Query.php:281 +msgid "There are no attributes defined." +msgstr "Nejsou definovány stavy." + +#: lib/Forms/Admin/Reply.php:48 +msgid "There are no form replies to edit" +msgstr "Nejsou zde ¾ádné vzory odpovìdi, které lze zmìnit" + +#: lib/Block/queuesummary.php:44 +msgid "There are no open tickets." +msgstr "®ádné otevøené lístky." + +#: lib/Forms/Admin/Priority.php:44 lib/Forms/Admin/Priority.php:90 +msgid "There are no priorities to edit" +msgstr "Nejsou zde ¾ádné priority, které lze zmìnit" + +#: lib/Forms/Admin.php:31 +msgid "There are no queues available." +msgstr "Není dostupná ¾ádná fronta" + +#: lib/Forms/Admin/Queue.php:57 +msgid "There are no queues to edit" +msgstr "Nejsou ¾ádné fronty k úpravì." + +#: lib/Forms/CreateTicket.php:35 +msgid "There are no queues which you can create tickets in." +msgstr "Není ¾ádná fronta, ve které mù¾ete vytváøet lístky." + +#: lib/Forms/Search.php:38 +msgid "There are no queues which you can search." +msgstr "Není ¾ádná fronta, ve které mù¾ete hledat." + +#: lib/Forms/Admin/State.php:43 lib/Forms/Admin/State.php:92 +msgid "There are no states to edit" +msgstr "Nejsou zde ¾ádné stavy, které lze zmìnit" + +#: lib/Forms/CreateTicket.php:72 +msgid "" +"There are no ticket types associated with this queue; until there are, you " +"cannot create any tickets in this queue." +msgstr "" +"Tato fronta nemá ¾ádné typy lístkù. Dokud se tyto typy nevytvoøí, není mo¾né " +"zadat lístek." + +#: lib/Forms/Admin/Type.php:45 +msgid "There are no types to edit" +msgstr "Nejsou zde ¾ádné typy, které lze zmìnit" + +#: lib/Forms/Admin/User.php:75 +msgid "There are no users responsible for this queue." +msgstr "Nejsou zde ¾ádní u¾ivatelé zodpovìdní za tuto frontu" + +#: lib/Forms/CreateTicket.php:242 +msgid "There are no users to which this ticket can be assigned." +msgstr "Není komu pøiøadit lístek" + +#: lib/Forms/Admin/Version.php:44 +msgid "There are no versions to edit" +msgstr "Nejsou zde ¾ádné verze, které lze zmìnit" + +#: lib/Reports.php:143 +msgid "There is no data for this report." +msgstr "Pro tento report nejdou k dispozici ¾ádná data" + +#: admin/index.php:705 +#, php-format +msgid "There was an error adding \"%s\" to the responsible list for \"%s\":" +msgstr "Nastala chyba pøi pøidávání '%s' do seznamu zodpovìdných pro '%s':" + +#: admin/index.php:911 +msgid "There was an error creating the attribute:" +msgstr "Nastala chyba pøi vytváøení atributu:" + +#: admin/index.php:1051 +msgid "There was an error creating the form reply:" +msgstr "Nastala chyba pøi vytváøení vzoru odpovìdi." + +#: admin/index.php:561 +msgid "There was an error creating the priority:" +msgstr "Nastala chyba pøi vytváøení priority:" + +#: admin/index.php:309 +msgid "There was an error creating the queue:" +msgstr "Nastala chyba pøi vytváøení fronty:" + +#: admin/index.php:426 +msgid "There was an error creating the state:" +msgstr "Nastala chyba pøi vytváøení stavu:" + +#: admin/index.php:780 +msgid "There was an error creating the version:" +msgstr "Nastala chyba pøi vytváøení verze:" + +#: admin/index.php:1010 +msgid "There was an error deleting the attribute:" +msgstr "Nastala chyba pøi vymázávání atributu:" + +#: admin/index.php:1139 +msgid "There was an error deleting the form reply:" +msgstr "Nastala chyba pøi vymázávání vzoru odpovìdi:" + +#: admin/index.php:665 +msgid "There was an error deleting the priority:" +msgstr "Nastala chyba pøi vymázávání priority:" + +#: admin/index.php:395 +msgid "There was an error deleting the queue:" +msgstr "Nastala chyba pøi mazání fronty:" + +#: admin/index.php:528 +msgid "There was an error deleting the state:" +msgstr "Nastala chyba pøi vymázávání stavu:" + +#: ticket/delete.php:75 +msgid "There was an error deleting the ticket:" +msgstr "Nastala chyba pøi vymázávání lístku:" + +#: admin/index.php:275 +msgid "There was an error deleting the type:" +msgstr "Nastala chyba pøi vymázávání typu:" + +#: admin/index.php:868 +msgid "There was an error deleting the version:" +msgstr "Nastala chyba pøi vymázávání verze:" + +#: admin/index.php:982 +msgid "There was an error editing the attribute:" +msgstr "Nastala chyba pøi zmìnì atributu:" + +#: admin/index.php:1104 +msgid "There was an error editing the form reply:" +msgstr "Nastala chyba pøi zmìnì vzoru odpovìdi:" + +#: admin/index.php:615 +msgid "There was an error editing the priority:" +msgstr "Nastala chyba pøi zmìnì priority:" + +#: admin/index.php:375 +msgid "There was an error editing the queue:" +msgstr "Nastala chyba pøi úpravì fronty:" + +#: admin/index.php:480 +msgid "There was an error editing the state:" +msgstr "Nastala chyba pøi zmìnì stavu:" + +#: admin/index.php:841 +msgid "There was an error editing the version:" +msgstr "Nastala chyba pøi zmìnì verze:" + +#: lib/Forms/Admin/User.php:35 +#, php-format +msgid "There was an error listing users: %s; %s" +msgstr "Nastala chyba výpisu u¾ivatelù: %s; %s" + +#: queue/index.php:52 +#, php-format +msgid "There was an error locating tickets in this queue: " +msgstr "Nastala chyba pøi hledání lískù: " + +#: admin/index.php:219 +msgid "There was an error modifying the type:" +msgstr "Nastala chyba pøi zmìnì typu:" + +#: search.php:140 +#, php-format +msgid "There was an error performing your search: %s" +msgstr "Chyba pøi hledání: %s" + +#: admin/index.php:750 +#, php-format +msgid "" +"There was an error removing \"%s\" from the responsible list for \"%s\":" +msgstr "Nastala chyba pøi odstraòování '%s' ze seznamu zodpovìdných pro '%s':" + +#: admin/index.php:638 +msgid "There was an error setting the default priority:" +msgstr "Nastala chyba pøi zmìnì implicitní priority." + +#: admin/index.php:502 +msgid "There was an error setting the default state:" +msgstr "Nastala chyba pøi nastavení výchozího stavu:" + +#: lib/Forms/EditTicket.php:166 lib/Forms/AddComment.php:37 +msgid "This comment is visible to everyone" +msgstr "" + +#: lib/Forms/Admin/Queue.php:31 +msgid "" +"This email address will be used when sending notifications for any queue " +"tickets." +msgstr "" + +#: data.php:29 +msgid "This is not a search results template." +msgstr "Toto není ¹ablona výsledkù hledání" + +#: lib/Query.php:435 lib/Query.php:668 +msgid "This query element cannot be edited." +msgstr "Nelze smazat tuto èást dotazu" + +#: ticket/queue.php:81 lib/Forms/CreateTicket.php:88 +msgid "" +"This queue requires that you specify a version, but there are no versions " +"associated with it. Until versions are created for this queue, you will not " +"be able to create tickets." +msgstr "" +"Tato fronta vy¾aduje zadání verze, ale ¾ádná verze není k dispozici. Dokud " +"nebudou pro frontu vytvoøeny verze nebude mo¾no zadat lístek." + +#: lib/Ticket.php:638 lib/Ticket.php:820 +msgid "Ticket" +msgstr "Lístek" + +#: ticket/delete.php:71 +#, php-format +msgid "Ticket %d has been deleted." +msgstr "Lístek %d byl vymazán." + +#: lib/api.php:850 +#, php-format +msgid "Ticket %s - %s" +msgstr "Lístek %s - %s" + +#: lib/Driver/sql.php:1081 +#, php-format +msgid "Ticket %s was not found." +msgstr "Lístek %s nebyl nalezen." + +#: search.php:170 +msgid "Ticket Search" +msgstr "Prohledávání lístkù" + +#: lib/Forms/CreateTicket.php:142 +msgid "Ticket State" +msgstr "Stav oznámení" + +#: templates/reports/stats.inc:1 +msgid "Ticket Stats" +msgstr "Statistiky lístkù" + +#: lib/Forms/CreateTicket.php:80 +msgid "Ticket Type" +msgstr "Typ oznámení" + +#: lib/Forms/Admin/Queue.php:103 +msgid "Ticket Types associated with this Queue" +msgstr "Typy asociované s touto frontou" + +#: lib/Ticket.php:633 +#, php-format +msgid "Ticket URL: %s" +msgstr "URL lístku: %s" + +#: ticket/update.php:94 +msgid "Ticket Updated" +msgstr "Lístek upraven" + +#: lib/api.php:871 +msgid "Tickets" +msgstr "Lístky" + +#: query/rss.php:70 +#, php-format +msgid "Tickets matching the query \"%s\"." +msgstr "" + +#: templates/prefs/sourceselect.inc:322 +msgid "" +"To select multiple fields, hold down the Control (PC) or Command (Mac) while " +"clicking." +msgstr "" +"Pokud si pøejete vybrat více polí, zmáèknìte a dr¾te klávesu Control (PC) " +"nebo Command (Mac) a kliknìte na polo¾ku." + +#: ticket/queue.php:89 lib/Whups.php:677 lib/Ticket.php:608 lib/Ticket.php:805 +#: lib/Ticket.php:945 lib/Renderer/Query.php:108 lib/Forms/Query.php:174 +#: config/prefs.php.dist:48 +msgid "Type" +msgstr "Typ" + +#: lib/Renderer/Comment.php:105 +#, php-format +msgid "Type ⇒ %s" +msgstr "Typ ⇒ %s" + +#: lib/Forms/Admin/Type.php:23 lib/Forms/Admin/Type.php:70 +#: lib/Forms/Admin/Type.php:160 +msgid "Type Description" +msgstr "Popis Typu" + +#: lib/Forms/Admin/Type.php:22 lib/Forms/Admin/Type.php:48 +#: lib/Forms/Admin/Type.php:67 lib/Forms/Admin/Type.php:156 +msgid "Type Name" +msgstr "Jméno Typu" + +#: search/rss.php:39 +#, php-format +msgid "Type: %s; State: %s" +msgstr "Typ: %s; stav: %s" + +#: lib/Ticket.php:961 +msgid "Unassigned" +msgstr "Nepøiøazené" + +#: lib/Block/unassigned.php:3 lib/Block/unassigned.php:24 +msgid "Unassigned Tickets" +msgstr "Nepøiøazené lístky" + +#: lib/Forms/Admin.php:42 +msgid "Unassigned tickets" +msgstr "Nepøiøazené lístky" + +#: lib/Driver.php:196 +msgid "Unconfirmed" +msgstr "Nepotvrzen" + +#: lib/Renderer/Query.php:167 lib/Renderer/Query.php:207 +#, php-format +msgid "Unknown node type %s" +msgstr "Neznámý typ uzlu %s" + +#: lib/api.php:790 +msgid "Update" +msgstr "Aktualizovat" + +#: ticket/update.php:108 +#, php-format +msgid "Update %s" +msgstr "Aktualizovat %s" + +#: templates/admin/mtmatrix.inc:29 +msgid "Update Associations" +msgstr "Ulozit" + +#: lib/Whups.php:683 lib/Ticket.php:981 lib/Renderer/Query.php:146 +msgid "Updated" +msgstr "Upraveno" + +#: lib/Ticket.php:615 lib/Ticket.php:640 +msgid "Updated By" +msgstr "Upravil" + +#: lib/Forms/Query.php:327 lib/Forms/Search.php:58 +msgid "Updated from" +msgstr "Upraveno od" + +#: lib/Forms/Query.php:328 +msgid "Updated to" +msgstr "Upraveno do" + +#: lib/Forms/Admin/User.php:34 lib/Forms/Admin/User.php:44 +#: lib/Forms/Admin/User.php:47 +msgid "User" +msgstr "U¾ivatel" + +#: lib/Forms/Query.php:44 +msgid "User ID" +msgstr "U¾ivatel" + +#: lib/Forms/Admin/Queue.php:131 +msgid "Users responsible for this Queue" +msgstr "U¾ivatelé zodpovìdní za tuto frontu" + +#: lib/Forms/Admin/User.php:79 +msgid "Users responsible for this queue" +msgstr "U¾ivatelé zodpovìdní za tuto frontu" + +#: lib/Ticket.php:607 lib/Ticket.php:804 lib/Renderer/Query.php:102 +#: lib/Forms/Query.php:185 config/prefs.php.dist:51 +msgid "Version" +msgstr "Verze" + +#: lib/Forms/Admin/Version.php:24 lib/Forms/Admin/Version.php:70 +#: lib/Forms/Admin/Version.php:93 +msgid "Version Description" +msgstr "Popis Verze" + +#: lib/Forms/Admin/Version.php:23 lib/Forms/Admin/Version.php:48 +#: lib/Forms/Admin/Version.php:67 lib/Forms/Admin/Version.php:90 +msgid "Version Name" +msgstr "Jméno Verze" + +#: ticket/type.php:43 ticket/queue.php:50 +msgid "Viewable only by members of" +msgstr "Povoleno prohlí¾et pouze èleny skupiny" + +#: lib/Forms/AddComment.php:25 +msgid "Watch this ticket" +msgstr "Sledovat tento lístek?" + +#: ticket/watch.php:78 +#, php-format +msgid "Watchers for %s" +msgstr "Sledující %s" + +#: config/prefs.php.dist:104 +msgid "Weekday Day Month" +msgstr "Den v týdnu Den Mìsíc" + +#: config/prefs.php.dist:105 +msgid "Weekday Day Month HH:MM:SS TZ" +msgstr "Den v týdnu Den Mìsíc HH:MM:SS Zóna" + +#: ticket/delete.php:33 lib/Forms/Query.php:449 lib/Forms/Admin/Version.php:96 +#: lib/Forms/Admin/State.php:121 lib/Forms/Admin/Priority.php:121 +#: lib/Forms/Admin/Queue.php:174 lib/Forms/Admin/Attribute.php:149 +#: lib/Forms/Admin/Reply.php:110 lib/Forms/Admin/Type.php:176 +msgid "Yes" +msgstr "Ano" + +#: view.php:54 +#, php-format +msgid "You are not allowed to view ticket %d." +msgstr "Nejste oprávnìni prohlí¾et lístek %d" + +#: lib/Driver/sql.php:1090 +#, php-format +msgid "You do not have permission to access this ticket (%s)." +msgstr "Nedostateèná práva pro prohlí¾ení tohoto lístku (%s)" + +#: lib/api.php:375 +msgid "You do not have permission to update this ticket." +msgstr "Nedostateèná práva pro úpravu lístku" + +#: lib/Block/myrequests.php:46 +msgid "You have no open requests." +msgstr "Nemáte ¾ádné otevøené po¾adavky" + +#: lib/Forms/Query.php:419 lib/Block/query.php:28 +msgid "You have no saved queries." +msgstr "Nemáte ¾ádné ulo¾ené dotazy" + +#: lib/Whups.php:710 +msgid "You must select at least one queue to send reminders for." +msgstr "Musíte nejdøíve vybrat alespoò jednu frontu," + +#: lib/Forms/CreateTicket.php:132 lib/Forms/AddComment.php:18 +msgid "Your Email Address" +msgstr "Va¹e emailová adresa" + +#: ticket/create.php:60 +#, php-format +msgid "" +"Your ticket ID is %s. An appropriate person has been notified of this " +"request." +msgstr "" +"Vá¹ lístek má ID %s. Nále¾itá osoba byla informována ohlednì tohoto " +"po¾adavku." + +#: lib/Mail.php:244 +msgid "[ Could not render body of message. ]" +msgstr "[ zprávu se nepovedlo zobrazit ]" + +#: lib/Whups.php:774 +msgid "_Admin" +msgstr "_Admin" + +#: lib/Whups.php:298 +msgid "_Comment" +msgstr "_Komentáø" + +#: query/index.php:157 +msgid "_Date Criteria" +msgstr "Kriterium _Data" + +#: lib/Whups.php:316 +msgid "_Delete" +msgstr "_Smazat" + +#: lib/Query.php:237 +msgid "_Delete Query" +msgstr "Vyma¾ frontu" + +#: lib/Query.php:218 +msgid "_Edit Query" +msgstr "_Uprav dotaz" + +#: admin/index.php:33 +msgid "_Edit Queues" +msgstr "Zmìò fronty" + +#: templates/menu.inc:5 +msgid "_Go" +msgstr "Pøejít" + +#: query/index.php:156 +msgid "_Group Criteria" +msgstr "Filtry _skupin" + +#: lib/Whups.php:292 +msgid "_History" +msgstr "_Historie" + +#: lib/Query.php:231 +msgid "_Load Query" +msgstr "_Nahraj dotaz" + +#: lib/Whups.php:765 +#, php-format +msgid "_My %s" +msgstr "_Moje %s" + +#: lib/Whups.php:768 +msgid "_New Ticket" +msgstr "_Nový lístek" + +#: query/index.php:154 +msgid "_Property Criteria" +msgstr "Filtry _vlastností" + +#: lib/Whups.php:769 +msgid "_Query Builder" +msgstr "Tvùrce dotazù" + +#: lib/Whups.php:770 +msgid "_Reports" +msgstr "_Reporty" + +#: lib/Whups.php:767 +msgid "_Search" +msgstr "_Vyhledat" + +#: query/index.php:158 +msgid "_Text Criteria" +msgstr "Filtry _textu" + +#: lib/Whups.php:294 +msgid "_Update" +msgstr "Aktualizovat" + +#: query/index.php:155 +msgid "_User Criteria" +msgstr "Filtry _u¾ivatelù" + +#: lib/Whups.php:302 +msgid "_Watch" +msgstr "_Sledovat" + +#: lib/Renderer/Query.php:187 +msgid "contains (case insensitive) substring" +msgstr "obsahuje znakový øetìzec (nerozli¹ující velká a malá písmena)" + +#: lib/Renderer/Query.php:191 +msgid "contains (case sensitive) substring" +msgstr "obsahuje znakový øetìzec (rozli¹ující velká a malá písmena)" + +#: lib/Renderer/Query.php:195 +msgid "contains the word" +msgstr "obsahuje slovo" + +#: lib/Mail.php:94 lib/Mail.php:118 lib/Mail.php:146 +msgid "current user:" +msgstr "Souèasný u¾ivatel" + +#: lib/api.php:859 +msgid "estimated time" +msgstr "odhad èasu" + +#: lib/Renderer/Query.php:183 +msgid "is" +msgstr "je" + +#: lib/Renderer/Query.php:175 +msgid "is greater than" +msgstr "je vìt¹í ne¾" + +#: lib/Renderer/Query.php:179 +msgid "is less than" +msgstr "je men¹í ne¾" + +#: lib/Renderer/Query.php:199 +msgid "matches the pattern" +msgstr "odpovídá vzoru" + +#: lib/Forms/Search.php:57 lib/Forms/Search.php:59 lib/Forms/Search.php:61 +#: lib/Forms/Search.php:63 lib/Forms/Search.php:65 +msgid "to" +msgstr "" diff --git a/whups/po/de_DE.po b/whups/po/de_DE.po new file mode 100644 index 000000000..eecc9fff4 --- /dev/null +++ b/whups/po/de_DE.po @@ -0,0 +1,2516 @@ +# German translations for Whups. +# Copyright 2002-2009 The Horde Project +# This file is distributed under the same license as the Whups package. +# Jan Schneider , 2002-2008. +# +# query: Abfrage +# search: Suche +# queue: Warteschlange +# resolve: erledigen +msgid "" +msgstr "" +"Project-Id-Version: Whups 1.0-cvs\n" +"Report-Msgid-Bugs-To: dev@lists.horde.org\n" +"POT-Creation-Date: 2008-09-15 15:35+0200\n" +"PO-Revision-Date: 2009-11-19 17:01+0100\n" +"Last-Translator: Jan Schneider \n" +"Language-Team: German \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: admin/index.php:745 +#, php-format +msgid "\"%s\" is no longer among those responsible for \"%s\"" +msgstr "\"%s\" gehört nicht mehr zu den Verantwortlichen für \"%s\"" + +#: templates/menu.inc:5 +msgid "#Id" +msgstr "#Id" + +#: templates/ticket/watchers.inc:3 +#, php-format +msgid "%d people watching, %d people responsible" +msgstr "%d Beobachter, %d Verantwortliche" + +#: queue/rss.php:96 +#, php-format +msgid "%s %s tickets in %s" +msgstr "%s %s Tickets in %s" + +#: queue/rss.php:100 +#, php-format +msgid "%s %s tickets in all queues" +msgstr "%s %s Tickets in allen Warteschlangen." + +#: lib/Renderer/Comment.php:120 +#, php-format +msgid "%s ⇒ %s" +msgstr "%s ⇒ %s" + +#: lib/Driver.php:497 +#, php-format +msgid "%s (%s) wrote:" +msgstr "%s (%s) hat geschrieben:" + +#: admin/index.php:700 +#, php-format +msgid "%s added to those responsible for \"%s\"" +msgstr "%s gehört jetzt zu den Verantwortlichen für \"%s\"" + +#: templates/reports/stats.inc:15 +#, php-format +msgid "%s days" +msgstr "%s Tage" + +#: queue/rss.php:104 +#, php-format +msgid "%s tickets in %s" +msgstr "%s Tickets in %s" + +#: queue/rss.php:108 +#, php-format +msgid "%s tickets in all queues" +msgstr "%s Tickets in allen Warteschlangen" + +#: ticket/watch.php:60 +#, php-format +msgid "%s will be notified when this ticket is updated." +msgstr "%s wird bei einer Aktualisierung dieses Tickets benachrichtigt." + +#: ticket/watch.php:72 +#, php-format +msgid "%s will no longer receive updates for this ticket." +msgstr "%s wird keine Benachrichtigungen mehr über dieses Ticket erhalten." + +#: admin/index.php:109 +msgid "- Stage 1" +msgstr "- Schritt 1" + +#: admin/index.php:114 +msgid "- Stage 2" +msgstr "- Schritt 2" + +#: scripts/mail-filter.php:172 +msgid "--queue-name or --queue-id must specify a valid and public queue." +msgstr "" +"--queue-name oder --queue-id müssen eine gültige und öffentliche " +"Warteschlange bezeichnen." + +#: templates/prevnext.inc:16 +msgid "<>" +msgstr "Ende>>" + +#: lib/Forms/Query.php:411 +msgid "Load Query" +msgstr "Abfrage laden" + +#: lib/Forms/VarRenderer.php:46 +msgid "Loading..." +msgstr "Lade..." + +#: config/prefs.php.dist:106 +msgid "MM/DD/YY" +msgstr "MM/TT/JJ" + +#: config/prefs.php.dist:107 +msgid "MM/DD/YY HH:MM:SS" +msgstr "MM/TT/JJ HH:MM" + +#: lib/Forms/Admin/Type.php:193 +#, php-format +msgid "Make a clone of %s" +msgstr "Kopie von %s erstellen" + +#: lib/Forms/EditTicket.php:167 lib/Forms/AddComment.php:38 +msgid "Make this comment visible only to members of a group?" +msgstr "" +"Diesen Kommentar nur für Mitglieder einer bestimmten Gruppe sichtbar machen?" + +#: lib/Forms/Query.php:274 +msgid "Match" +msgstr "Suchbegriff" + +#: lib/Forms/Query.php:45 lib/Forms/Query.php:129 lib/Forms/Query.php:275 +msgid "Match Operator" +msgstr "Suchoperation" + +#: lib/Query.php:167 +msgid "Match Pattern" +msgstr "Suchmuster" + +#: lib/Query.php:166 +msgid "Match Word" +msgstr "Suchwort" + +#: reports.php:30 +msgid "Maximum time a ticket is unresolved" +msgstr "Längste Zeit bis ein Ticket erledigt wurde" + +#: lib/Block/tree_menu.php:3 +msgid "Menu List" +msgstr "Menüliste" + +#: reports.php:31 +msgid "Minimum time a ticket is unresolved" +msgstr "Kürzeste Zeit bis ein Ticket erledigt wurde" + +#: config/prefs.php.dist:146 +msgid "Most recent first" +msgstr "Neueste zuerst" + +#: templates/prefs/sourceselect.inc:312 +msgid "Move down" +msgstr "Nach unten" + +#: templates/prefs/sourceselect.inc:310 +msgid "Move up" +msgstr "Nach oben" + +#: ticket/queue.php:181 +#, php-format +msgid "Moved ticket %d to \"%s\"" +msgstr "Ticket %d nach \"%s\" verschoben" + +#: mybugs.php:54 +#, php-format +msgid "My %s" +msgstr "Meine %s" + +#: mybugs_edit.php:33 +#, php-format +msgid "My %s :: Add Content" +msgstr "Meine %s :: Inhalt hinzfügen" + +#: search.php:178 lib/Block/myqueries.php:3 lib/Block/myqueries.php:24 +msgid "My Queries" +msgstr "Meine Abfragen" + +#: lib/Block/myrequests.php:3 lib/Block/myrequests.php:24 +msgid "My Requests" +msgstr "Meine Anfragen" + +#: lib/Block/mytickets.php:3 lib/Block/mytickets.php:24 +#: config/prefs.php.dist:75 +msgid "My Tickets" +msgstr "Meine Tickets" + +#: lib/api.php:884 +msgid "My tickets by assignment date" +msgstr "Meine Tickets nach Zuweisungsdatum" + +#: lib/api.php:883 +msgid "My tickets by creation date" +msgstr "Meine Tickets nach Erstelldatum" + +#: lib/api.php:885 +msgid "My tickets by due date" +msgstr "Meine Tickets nach Fälligkeitsdatum" + +#: lib/api.php:886 +msgid "My tickets by resolution date" +msgstr "Meine Tickets nach Erledigungsdatum" + +#: lib/Forms/Query.php:422 +msgid "Name" +msgstr "Name" + +#: lib/Forms/Admin/Type.php:198 +msgid "Name of the cloned copy" +msgstr "Name der Kopie" + +#: lib/Query.php:216 +msgid "Ne_w Query" +msgstr "Ne_ue Abfrage" + +#: lib/Driver.php:197 +msgid "New" +msgstr "Neu" + +#: lib/Ticket.php:618 lib/Ticket.php:711 +msgid "New Attachment" +msgstr "Neue Anlage" + +#: lib/Renderer/Comment.php:58 lib/Renderer/Comment.php:62 +#, php-format +msgid "New Attachment: %s" +msgstr "Neue Anlage: %s" + +#: ticket/queue.php:32 +msgid "New Queue" +msgstr "Neue Warteschlange" + +#: ticket/create.php:67 lib/Block/tree_menu.php:21 +msgid "New Ticket" +msgstr "Neues Ticket" + +#: ticket/type.php:31 +msgid "New Type" +msgstr "Neuer Typ" + +#: templates/prevnext.inc:26 +msgid "Next>" +msgstr "Weiter>" + +#: ticket/delete.php:33 lib/Forms/Query.php:449 lib/Forms/Admin/Version.php:96 +#: lib/Forms/Admin/State.php:121 lib/Forms/Admin/Priority.php:121 +#: lib/Forms/Admin/Queue.php:174 lib/Forms/Admin/Attribute.php:149 +#: lib/Forms/Admin/Reply.php:110 lib/Forms/Admin/Type.php:176 +msgid "No" +msgstr "Nein" + +#: lib/Ticket.php:100 +#, php-format +msgid "" +"No priority for this ticket and no default priority for ticket type \"%s\" " +"specified." +msgstr "" +"Es wurden keine Priorität für dieses Ticket und keine Standard-Priorität für " +"den Ticket-Typ \"%s\" angegeben." + +#: lib/Block/myqueries.php:46 +msgid "No queries have been saved." +msgstr "Es wurden keine Abfragen gespeichert." + +#: lib/Block/query.php:62 lib/Driver/sql.php:553 +msgid "No query to run" +msgstr "Kein Abfrage durchzuführen" + +#: lib/Block/queuecontents.php:25 +msgid "No queues available." +msgstr "Keine Afbragen verfügbar." + +#: lib/Ticket.php:92 +#, php-format +msgid "" +"No state for this ticket and no default state for ticket type \"%s\" " +"specified." +msgstr "" +"Es wurden kein Status für dieses Ticket und kein Standard-Status für den " +"Ticket-Typ \"%s\" angegeben." + +#: reports.php:35 +msgid "No stats available." +msgstr "Keine Statistiken verfügbar." + +#: lib/Driver.php:533 +#, php-format +msgid "No such backend \"%s\" found" +msgstr "Ein Backend \"%s\" konnte nicht gefunden werden" + +#: lib/View.php:33 +#, php-format +msgid "No such view \"%s\" found" +msgstr "Eine Darstellung \"%s\" konnte nicht gefunden werden" + +#: lib/Block/mytickets.php:45 +msgid "No tickets are assigned to you." +msgstr "Keine Tickets sind Ihnen zugewiesen." + +#: lib/Block/unassigned.php:45 +msgid "No tickets are unassigned!" +msgstr "Keine Tickets ohne Zuweisung!" + +#: lib/Block/queuecontents.php:62 lib/Block/queuecontents.php:73 +msgid "No tickets in queue." +msgstr "Keine Tickets in der Warteschlange." + +#: lib/Whups.php:716 +msgid "No tickets matched your search criteria." +msgstr "Keine Tickets entsprachen Ihren Suchkriterien." + +#: lib/Ticket.php:84 +#, php-format +msgid "No type for this ticket and no default type for queue \"%s\" specified." +msgstr "" +"Es wurden kein Typ für dieses Ticket und kein Standard-Typ für die " +"Warteschlange \"%s\" angegeben." + +#: templates/prefs/sourceselect.inc:35 lib/Reports.php:67 +msgid "None" +msgstr "Keine" + +#: lib/Renderer/Query.php:79 lib/Forms/Query.php:26 +msgid "Not" +msgstr "Nicht" + +#: config/prefs.php.dist:17 +msgid "Notification Options" +msgstr "Benachrichtigungs-Einstellungen" + +#: config/prefs.php.dist:117 +msgid "Only notify me of ticket changes from other users?" +msgstr "Nur über Ticketänderungen durch andere Benutzer benachrichtigen?" + +#: config/prefs.php.dist:126 +msgid "Only notify me of ticket changes with comments?" +msgstr "Nur über Ticketänderungen durch andere Benutzer benachrichtigen?" + +#: queue/rss.php:43 +msgid "Open" +msgstr "Offen" + +#: lib/Block/queuesummary.php:49 +msgid "Open Tickets" +msgstr "Offene Tickets" + +#: reports.php:23 +msgid "Open Tickets by Owner" +msgstr "Offene Tickets nach Zuständigen" + +#: reports.php:21 +msgid "Open Tickets by Priority" +msgstr "Offene Tickets nach Priorität" + +#: reports.php:18 +msgid "Open Tickets by Queue" +msgstr "Offene Tickets nach Warteschlange" + +#: reports.php:22 +msgid "Open Tickets by Requester" +msgstr "Offene Tickets nach Anfrager" + +#: reports.php:19 +msgid "Open Tickets by State" +msgstr "Offene Tickets nach Status" + +#: reports.php:20 +msgid "Open Tickets by Type" +msgstr "Offene Tickets nach Typ" + +#: lib/Block/queuecontents.php:47 +#, php-format +msgid "Open Tickets in %s" +msgstr "Offene Tickets in %s" + +#: queue/rss.php:119 queue/index.php:43 queue/index.php:57 +#, php-format +msgid "Open tickets in %s" +msgstr "Offene Tickets in %s" + +#: queue/rss.php:121 +msgid "Open tickets in all queues." +msgstr "Offene Tickets in allen Warteschlangen" + +#: lib/Renderer/Query.php:78 lib/Forms/Query.php:25 +msgid "Or" +msgstr "Oder" + +#: lib/Whups.php:681 lib/Ticket.php:617 lib/Ticket.php:701 lib/Ticket.php:702 +#: lib/Ticket.php:705 lib/Ticket.php:812 lib/Ticket.php:833 lib/Ticket.php:958 +#: lib/Renderer/Query.php:84 lib/Forms/CreateTicket.php:225 +#: lib/Forms/CreateTicket.php:243 lib/Forms/EditTicket.php:104 +msgid "Owners" +msgstr "Zuständige" + +#: lib/Whups.php:866 +#, php-format +msgid "Permanently delete %s?" +msgstr "%s unwiederbringlich löschen?" + +#: ticket/update.php:22 ticket/type.php:74 ticket/delete.php:51 +#: ticket/queue.php:131 ticket/deleteAttachment.php:21 +msgid "Permission Denied" +msgstr "Zugriff verweigert" + +#: ticket/delete.php:40 lib/Forms/EditTicket.php:197 +msgid "Permission Denied." +msgstr "Zugriff verweigert." + +#: query/run.php:44 query/index.php:31 lib/Forms/Query.php:459 +#, php-format +msgid "Permission denied." +msgstr "Zugriff verweigert." + +#: lib/Imple/ContactAutoCompleter.php:227 +msgid "Please resolve ambiguous or invalid addresses." +msgstr "Bitte mehrdeutige oder ungültige Adressen korrigieren." + +#: lib/Forms/Admin/Type.php:93 lib/Forms/Admin/Type.php:171 +msgid "Priorities for this Type" +msgstr "Prioritäten für diesen Typ" + +#: ticket/type.php:66 ticket/queue.php:117 lib/Whups.php:669 lib/Whups.php:678 +#: lib/Ticket.php:610 lib/Ticket.php:807 lib/Ticket.php:953 +#: lib/Renderer/Query.php:125 lib/Forms/CreateTicket.php:147 +#: lib/Forms/EditTicket.php:68 lib/Forms/Query.php:198 +#: config/prefs.php.dist:49 +msgid "Priority" +msgstr "Priorität" + +#: lib/Renderer/Comment.php:115 +#, php-format +msgid "Priority ⇒ %s" +msgstr "Priorität ⇒ %s" + +#: lib/Forms/Admin/Priority.php:24 lib/Forms/Admin/Priority.php:70 +#: lib/Forms/Admin/Priority.php:118 +msgid "Priority Description" +msgstr "Prioritätbeschreibung" + +#: lib/Forms/Admin/Priority.php:23 lib/Forms/Admin/Priority.php:48 +#: lib/Forms/Admin/Priority.php:67 lib/Forms/Admin/Priority.php:94 +#: lib/Forms/Admin/Priority.php:115 +msgid "Priority Name" +msgstr "Prioritätbezeichnung" + +#: search.php:178 +msgid "Public Queries" +msgstr "Öffentliche Abfragen" + +#: query/index.php:172 +msgid "Query Builder" +msgstr "Abfrageeditor" + +#: lib/Forms/Query.php:387 +msgid "Query Name" +msgstr "Abfragename" + +#: lib/Forms/QueryParameterForm.php:20 +msgid "Query Parameters" +msgstr "Abfrageparameter" + +#: query/rss.php:63 query/run.php:79 lib/Block/query.php:3 +#: lib/Block/query.php:49 +msgid "Query Results" +msgstr "Abfrageergebnisse" + +#: lib/Forms/Query.php:389 +msgid "Query Slug" +msgstr "Abfragekurzname" + +#: lib/Block/query.php:33 +msgid "Query to run" +msgstr "Durchzuführende Abfrage" + +#: lib/Whups.php:679 lib/Ticket.php:606 lib/Ticket.php:803 lib/Ticket.php:918 +#: lib/Ticket.php:923 lib/Renderer/Query.php:94 lib/Forms/Query.php:181 +#: lib/Forms/Search.php:40 lib/Block/queuecontents.php:32 +#: lib/Block/queuesummary.php:49 config/prefs.php.dist:50 +msgid "Queue" +msgstr "Warteschlange" + +#: lib/Renderer/Comment.php:100 +#, php-format +msgid "Queue ⇒ %s" +msgstr "Warteschlange ⇒ %s" + +#: lib/Block/queuecontents.php:3 lib/Block/queuecontents.php:49 +msgid "Queue Contents" +msgstr "Warteschlangeninhalte" + +#: lib/Forms/Admin/Queue.php:24 lib/Forms/Admin/Queue.php:89 +#: lib/Forms/Admin/Queue.php:170 +msgid "Queue Description" +msgstr "Warteschlangenbeschreibung" + +#: lib/Forms/Admin/Queue.php:30 lib/Forms/Admin/Queue.php:97 +msgid "Queue Email" +msgstr "Warteschlangen-E-Mail-Adresse" + +#: lib/Forms/CreateTicket.php:34 lib/Forms/CreateTicket.php:45 +#: lib/Forms/Admin/Queue.php:23 lib/Forms/Admin/Queue.php:60 +#: lib/Forms/Admin/Queue.php:85 lib/Forms/Admin/Queue.php:166 +msgid "Queue Name" +msgstr "Warteschlangenname" + +#: lib/Forms/Admin/Queue.php:26 lib/Forms/Admin/Queue.php:93 +msgid "Queue Slug" +msgstr "Warteschlangenkurzname" + +#: lib/Block/queuesummary.php:3 lib/Block/queuesummary.php:24 +msgid "Queue Summary" +msgstr "Warteschlangenbeschreibung" + +#: ticket/queue.php:86 lib/Ticket.php:932 lib/Ticket.php:938 +#: lib/Forms/CreateTicket.php:93 +msgid "Queue Version" +msgstr "Version" + +#: admin/index.php:35 +msgid "Queue/Type Matri_x" +msgstr "Warteschlange/Typ Matri_x" + +#: templates/admin/mtmatrix.inc:6 +msgid "Queue/Type Matrix" +msgstr "Warteschlange/Typ Matrix" + +#: lib/api.php:163 lib/api.php:781 +msgid "Queues" +msgstr "Warteschlangen" + +#: templates/prevnext.inc:32 +msgid "Re_turn to Search Results" +msgstr "_Zurück zu Suchergebnissen" + +#: lib/Forms/Admin/Attribute.php:147 +msgid "Really delete this attribute? This may cause data problems!" +msgstr "" +"Soll dieses Attribut wirlich gelöscht werden? Das kann Datenprobleme " +"verursachen!" + +#: lib/Forms/Admin/Reply.php:108 +msgid "Really delete this form reply?" +msgstr "Diese Standardantwort wirklich löschen?" + +#: lib/Forms/Admin/Priority.php:122 +msgid "Really delete this priority? This may cause data problems!" +msgstr "" +"Soll diese Priorität wirlich gelöscht werden? Das kann Datenprobleme " +"verursachen!" + +#: lib/Forms/Query.php:450 +msgid "Really delete this query? This operation is not undoable." +msgstr "" +"Diese Abfrage wirklich löschen? Dieser Vorgang kann nicht rückgängig gemacht " +"werden." + +#: lib/Forms/Admin/Queue.php:176 +msgid "Really delete this queue? This may cause data problems!" +msgstr "" +"Soll dieses Warteschlange wirklich gelöscht werden? Das kann zu " +"Datenproblemen führen!" + +#: lib/Forms/Admin/State.php:122 +msgid "Really delete this state? This may cause data problems!" +msgstr "" +"Soll dieser Status wirlich gelöscht werden? Das kann Datenprobleme " +"verursachen!" + +#: ticket/delete.php:34 +msgid "" +"Really delete this ticket? It will NOT be archived, and will be gone forever." +msgstr "" +"Dieses Ticket wirklich löschen? Es wird nicht archiviert, sondern geht für " +"immer verloren." + +#: lib/Forms/Admin/Type.php:178 +msgid "Really delete this type? This may cause data problems!" +msgstr "" +"Soll dieser Typ wirlich gelöscht werden? Das kann Datenprobleme verursachen!" + +#: lib/Forms/Admin/Version.php:97 +msgid "Really delete this version? This may cause data problems!" +msgstr "" +"Soll diese Version wirlich gelöscht werden? Das kann Datenprobleme " +"verursachen!" + +#: lib/Mail.php:217 +msgid "Received message:" +msgstr "Empfangene Nachricht:" + +#: search.php:162 +msgid "Refine Search" +msgstr "Suche verfeinern" + +#: admin/index.php:1170 +msgid "Reminders were sent." +msgstr "Erinnerungen wurden verschickt." + +#: lib/Forms/Admin/User.php:59 +msgid "Remove User" +msgstr "Benutzer entfernen" + +#: ticket/watch.php:49 +msgid "Remove Watcher" +msgstr "Beobachter entfernen" + +#: templates/prefs/sourceselect.inc:300 +msgid "Remove source" +msgstr "Quelle entfernen" + +#: lib/Renderer/Comment.php:95 +msgid "Reply to this comment" +msgstr "Diesen Kommentar beantworten" + +#: reports.php:40 +msgid "Reports" +msgstr "Berichte" + +#: lib/Whups.php:680 lib/Ticket.php:965 lib/Renderer/Query.php:86 +msgid "Requester" +msgstr "Anfrager" + +#: lib/Forms/Admin/Attribute.php:28 lib/Forms/Admin/Attribute.php:99 +msgid "Required Attribute?" +msgstr "Notwendiges Attribute?" + +#: lib/Whups.php:685 lib/Ticket.php:991 lib/Driver.php:199 lib/api.php:927 +#: lib/Renderer/Query.php:150 config/prefs.php.dist:54 +msgid "Resolved" +msgstr "Erledigt" + +#: lib/Forms/Query.php:330 lib/Forms/Search.php:60 +msgid "Resolved from" +msgstr "Erledigt seit" + +#: lib/Forms/Query.php:331 +msgid "Resolved to" +msgstr "Erledigt bis" + +#: lib/Forms/Admin/User.php:61 +msgid "Responsible Users" +msgstr "Verantwortliche Benutzer" + +#: lib/Whups.php:306 +msgid "S_et Queue" +msgstr "_Warteschlange festlegen" + +#: lib/Query.php:234 +msgid "Sa_ve Query" +msgstr "Abfrage s_peichern" + +#: templates/view/results.inc:96 lib/Forms/Query.php:385 +msgid "Save" +msgstr "Speichern" + +#: query/index.php:233 +msgid "Save Criterion" +msgstr "Kriterium speichern" + +#: lib/Forms/Query.php:384 +msgid "Save Query" +msgstr "Abfrage speichern" + +#: search.php:69 lib/Forms/Search.php:19 +msgid "Save as Query" +msgstr "Als Abfrage speichern" + +#: search.php:155 lib/Block/tree_menu.php:30 +msgid "Search" +msgstr "Suche" + +#: lib/Forms/Query.php:278 +#, php-format +msgid "Search %s Attribute" +msgstr "Attribut %s durchsuchen" + +#: lib/Forms/Query.php:272 lib/Forms/Query.php:281 +msgid "Search Attribute" +msgstr "Attribut suchen" + +#: lib/Forms/Query.php:48 lib/Forms/Query.php:131 +msgid "Search Comments" +msgstr "Kommentare durchsuchen" + +#: lib/Forms/Query.php:46 +msgid "Search Owners" +msgstr "Zuständige durchsuchen" + +#: lib/Forms/Query.php:47 +msgid "Search Requester" +msgstr "Anfrager durchsuchen" + +#: search.php:147 search/rss.php:55 search/rss.php:59 +msgid "Search Results" +msgstr "Suchergebnisse" + +#: templates/prevnext.inc:38 +#, php-format +msgid "Search Results: %s of %s" +msgstr "Suchergebnisse: %s von %s" + +#: lib/Forms/Query.php:130 +msgid "Search Summary" +msgstr "Zusammenfassungen durchsuchen" + +#: config/prefs.php.dist:76 +msgid "Search Tickets" +msgstr "Tickets suchen" + +#: config/prefs.php.dist:25 +msgid "Select address book sources for adding and searching for addresses." +msgstr "" +"Wählen Sie die Adressbücher zum Suchen nach und Hinzufügen von neuen " +"Adressen aus." + +#: templates/prefs/sourceselect.inc:319 +msgid "Select all fields to search when expanding addresses." +msgstr "Wählen Sie die Felder aus, in denen nach Namen gesucht werden soll." + +#: config/prefs.php.dist:78 +msgid "Select the view to display after login:" +msgstr "" +"Wählen Sie die Standardansicht aus, die nach dem Anmelden angezeigt werden " +"soll:" + +#: templates/prefs/sourceselect.inc:303 templates/prefs/sourceselect.inc:305 +msgid "Selected Address books:" +msgstr "Ausgewählte Adressbücher:" + +#: admin/index.php:36 +msgid "Sen_d Reminders" +msgstr "Erinner_ungen versenden" + +#: lib/Forms/Admin.php:23 +msgid "Send Reminders" +msgstr "Erinnerungen versenden" + +#: lib/Forms/Admin.php:34 +msgid "Send only for this list of ticket ids" +msgstr "Nur für diese Liste von Ticket-IDs versenden" + +#: lib/Forms/Admin/Priority.php:80 lib/Forms/Admin/Priority.php:82 +msgid "Set Default Priority" +msgstr "Standardpriorität festlegen" + +#: lib/Forms/Admin/State.php:80 lib/Forms/Admin/State.php:82 +msgid "Set Default State" +msgstr "Standardstatus festlegen" + +#: ticket/queue.php:201 ticket/queue.php:210 ticket/queue.php:222 +msgid "Set Queue - Step 1" +msgstr "Warteschlange festlegen - Schritt 1" + +#: ticket/queue.php:202 ticket/queue.php:211 +msgid "Set Queue - Step 2" +msgstr "Warteschlange festlegen - Schritt 2" + +#: ticket/queue.php:212 +msgid "Set Queue - Step 3" +msgstr "Warteschlange festlegen - Schritt 3" + +#: ticket/queue.php:189 +#, php-format +msgid "Set Queue for %s" +msgstr "Warteschlange für %s festlegen" + +#: lib/api.php:800 +msgid "Set Requester" +msgstr "Anfrager festlegen" + +#: ticket/type.php:139 ticket/type.php:148 +msgid "Set Type - Step 1" +msgstr "Typ festlegen - Schritt 1" + +#: ticket/type.php:140 +msgid "Set Type - Step 2" +msgstr "Typ festlegen - Schritt 2" + +#: ticket/type.php:127 +#, php-format +msgid "Set Type for %s" +msgstr "Typ für %s festlegen" + +#: lib/Whups.php:311 +msgid "Set _Type" +msgstr "_Typ festlegen" + +#: config/prefs.php.dist:144 +msgid "Show comments in chronological order, or most recent first?" +msgstr "" +"Kommentare in chronologischer Reihenfolge anzeigen oder neueste zuerst?" + +#: config/prefs.php.dist:95 +msgid "Show ticket IDs in the summary view?" +msgstr "Ticket-IDs auf der Portalseite anzeigen?" + +#: config/prefs.php.dist:87 +msgid "Show tickets you have requested in the summary view?" +msgstr "Tickets, die Sie erstellt haben, auf der Portalseite anzeigen?" + +#: config/templates.php.dist:16 +msgid "Simple HTML Report" +msgstr "Einfacher HTML-Bericht" + +#: lib/Forms/Admin/Queue.php:27 +#, php-format +msgid "" +"Slugs allows direct access to this queue's open tickets by visiting: %s. " +"
Slug names may contain only letters, numbers or the _ (underscore) " +"character." +msgstr "" +"Kurznamen ermöglichen den direkten Zugriff auf die offenen Tickets einer " +"Warteschlange über: %s.
Kurznamen dürfen Buchstaben, Zahlen und " +"Unterstriche enthalten." + +#: templates/view/results.inc:37 templates/view/results.inc:41 +#, php-format +msgid "Sort by %s" +msgstr "Sortieren nach %s" + +#: lib/Forms/CreateTicket.php:136 lib/Forms/CreateTicket.php:175 +#: lib/Forms/AddComment.php:20 lib/Forms/AddComment.php:51 +msgid "Spam protection" +msgstr "Spamschutz" + +#: ticket/type.php:65 ticket/queue.php:116 lib/Whups.php:670 lib/Whups.php:676 +#: lib/Ticket.php:609 lib/Ticket.php:806 lib/Ticket.php:949 +#: lib/Renderer/Query.php:117 lib/Forms/EditTicket.php:62 +#: lib/Forms/Query.php:193 config/prefs.php.dist:47 +msgid "State" +msgstr "Status" + +#: lib/Renderer/Comment.php:110 +#, php-format +msgid "State ⇒ %s" +msgstr "Status ⇒ %s" + +#: lib/Forms/Admin/State.php:25 lib/Forms/Admin/State.php:70 +msgid "State Category" +msgstr "Statuskategorie" + +#: lib/Forms/Admin/State.php:24 lib/Forms/Admin/State.php:67 +#: lib/Forms/Admin/State.php:118 +msgid "State Description" +msgstr "Statusbeschreibung" + +#: lib/Forms/Admin/State.php:23 lib/Forms/Admin/State.php:47 +#: lib/Forms/Admin/State.php:64 lib/Forms/Admin/State.php:96 +#: lib/Forms/Admin/State.php:115 +msgid "State Name" +msgstr "Statusbezeichnung" + +#: lib/Forms/Admin/Type.php:76 lib/Forms/Admin/Type.php:165 +msgid "States for this Type" +msgstr "Status für diesen Typ" + +#: templates/ticket/watchers.inc:1 +msgid "Status" +msgstr "Status" + +#: ticket/create.php:146 +msgid "Submit" +msgstr "Abschicken" + +#: query/run.php:93 query/run.php:94 +msgid "Subscribe to this query" +msgstr "Diese Abfrage abonnieren" + +#: admin/index.php:198 +#, php-format +msgid "Successfully Cloned %s to %s." +msgstr "%s wurde erfolgreich nach %s kopiert." + +#: ticket/type.php:118 +msgid "Successfully changed ticket type." +msgstr "Tickettyp erfolgreich geändert." + +#: ticket/delete.php:30 lib/Whups.php:668 lib/Whups.php:675 lib/Ticket.php:616 +#: lib/Ticket.php:643 lib/Ticket.php:646 lib/Ticket.php:650 lib/Ticket.php:812 +#: lib/Ticket.php:821 lib/Ticket.php:912 lib/Renderer/Query.php:89 +#: lib/Forms/CreateTicket.php:152 lib/Forms/EditTicket.php:58 +#: config/prefs.php.dist:46 +msgid "Summary" +msgstr "Zusammenfassung" + +#: lib/Renderer/Comment.php:51 +#, php-format +msgid "Summary ⇒ %s" +msgstr "Zusammenfassung ⇒ %s" + +#: lib/Forms/Search.php:43 +msgid "Summary like" +msgstr "Zusammenfassung" + +#: lib/Renderer/Comment.php:79 +#, php-format +msgid "Taken from %s" +msgstr "Genommen von %s" + +#: lib/Forms/Query.php:128 +msgid "Text" +msgstr "Text" + +#: lib/Driver/sql.php:80 lib/Driver/sql.php:1306 +msgid "That queue slug is already taken. Please select another." +msgstr "Dieser Kurzname ist bereits vergeben. Bitte wählen Sie einen anderen." + +#: lib/Forms/CreateTicket.php:129 +msgid "The Requester's Email Address" +msgstr "Die E-Mail-Adresse des Anfragers" + +#: view.php:58 lib/Ticket.php:439 lib/Ticket.php:487 +msgid "The VFS backend needs to be configured to enable attachment uploads." +msgstr "" +"Das VFS-Backend muss konfiguriert sein, um das Hochladen von Dateien zu " +"erlauben." + +#: admin/index.php:906 +#, php-format +msgid "The attribute \"%s\" has been added to %s." +msgstr "Das Attribut \"%s\" wurde zu %s hinzugefügt." + +#: admin/index.php:1006 +msgid "The attribute has been deleted." +msgstr "Das Attribut wurde gelöscht." + +#: admin/index.php:974 +msgid "The attribute has been modified." +msgstr "Das Attribut wurde geändert." + +#: admin/index.php:1015 +msgid "The attribute was not deleted." +msgstr "Das Attribut wurde nicht gelöscht." + +#: admin/index.php:642 +msgid "The default priority has been set." +msgstr "Die Standard-Priorität wurde gespeichert." + +#: admin/index.php:506 +msgid "The default state has been set." +msgstr "Der Standard-Status wurde gespeichert." + +#: admin/index.php:1043 +#, php-format +msgid "The form reply \"%s\" has been added to %s." +msgstr "Die Standardantwort \"%s\" wurde zu %s hinzugefügt." + +#: admin/index.php:1135 +msgid "The form reply has been deleted." +msgstr "Der Standardantwort wurde gelöscht." + +#: admin/index.php:1108 +msgid "The form reply has been modified." +msgstr "Die Standardantwort wurde geändert." + +#: admin/index.php:1144 +msgid "The form reply was not deleted." +msgstr "Die Standardantwort wurde nicht gelöscht." + +#: admin/index.php:556 +#, php-format +msgid "The priority \"%s\" has been added to %s." +msgstr "Die Priorität \"%s\" wurde zu %s hinzugefügt." + +#: admin/index.php:661 +msgid "The priority has been deleted." +msgstr "Die Priorität wurde gelöscht." + +#: admin/index.php:609 +msgid "The priority has been modified." +msgstr "Die Priorität wurde geändert." + +#: admin/index.php:670 +msgid "The priority was not deleted." +msgstr "Die Priorität wurde nicht gelöscht." + +#: lib/Forms/Query.php:463 +#, php-format +msgid "The query \"%s\" couldn't be deleted: %s" +msgstr "Die Abfrage \"%s\" konnte nicht gelöscht werden: %s" + +#: lib/Forms/Query.php:465 +#, php-format +msgid "The query \"%s\" has been deleted." +msgstr "Die Abfrage \"%s\" wurde gelöscht." + +#: lib/Forms/Query.php:430 +#, php-format +msgid "The query couldn't be loaded:" +msgstr "Die Abfrage konnte nicht geladen werden:" + +#: admin/index.php:300 +#, php-format +msgid "The queue \"%s\" has been created." +msgstr "Die Warteschlange \"%s\" wurde erstellt." + +#: admin/index.php:392 +msgid "The queue has been deleted." +msgstr "Die Warteschlange wurde gelöscht." + +#: admin/index.php:359 +msgid "The queue has been modified." +msgstr "Die Warteschlange wurde geändert." + +#: admin/index.php:400 +msgid "The queue was not deleted." +msgstr "Die Warteschlange wurde nicht gelöscht." + +#: lib/MIME/Viewer/zip.php:58 +msgid "The requested file does not exist in the Zip attachment." +msgstr "Die ausgewählte Datei existiert nicht in dem ZIP-Anhang." + +#: data.php:26 +msgid "The requested template does not exist." +msgstr "Die ausgewählte Vorlage existiert nicht." + +#: admin/index.php:422 +#, php-format +msgid "The state \"%s\" has been added to %s." +msgstr "Der Status \"%s\" wurde zu %s hinzugefügt." + +#: admin/index.php:525 +msgid "The state has been deleted." +msgstr "Der Status wurde gelöscht." + +#: admin/index.php:475 +msgid "The state has been modified." +msgstr "Der Status wurde geändert." + +#: admin/index.php:533 +msgid "The state was not deleted." +msgstr "Der Status wurde nicht gelöscht." + +#: ticket/delete.php:78 +msgid "The ticket was not deleted." +msgstr "Das Ticket wurde nicht gelöscht." + +#: admin/index.php:223 +#, php-format +msgid "The type \"%s\" has been modified." +msgstr "Der Typ \"%s\" wurde geändert." + +#: admin/index.php:272 +msgid "The type has been deleted." +msgstr "Der Typ wurde gelöscht." + +#: admin/index.php:280 +msgid "The type was not deleted." +msgstr "Der Typ wurde nicht gelöscht." + +#: admin/index.php:776 +#, php-format +msgid "The version \"%s\" has been added to %s." +msgstr "Die Version \"%s\" wurde zu %s hinzugefügt." + +#: admin/index.php:865 +msgid "The version has been deleted." +msgstr "Die Version wurde gelöscht." + +#: admin/index.php:835 +msgid "The version has been modified." +msgstr "Die Version wurde geändert." + +#: admin/index.php:873 +msgid "The version was not deleted." +msgstr "Die Version wurde nicht gelöscht." + +#: lib/Forms/Admin/Attribute.php:70 +msgid "There are no attribute types to edit" +msgstr "Keine Attributarten zum Bearbeiten" + +#: lib/Forms/Query.php:281 +msgid "There are no attributes defined." +msgstr "Es sind keine Attribute angelegt." + +#: lib/Forms/Admin/Reply.php:48 +msgid "There are no form replies to edit" +msgstr "Es gibt keine Standardantworten, die bearbeitet werden können" + +#: lib/Block/queuesummary.php:44 +msgid "There are no open tickets." +msgstr "Es gibt keine offenen Tickets." + +#: lib/Forms/Admin/Priority.php:44 lib/Forms/Admin/Priority.php:90 +msgid "There are no priorities to edit" +msgstr "Keine Prioritäten zum Bearbeiten" + +#: lib/Forms/Admin.php:31 +msgid "There are no queues available." +msgstr "Es sind keine Warteschlangen verfügbar." + +#: lib/Forms/Admin/Queue.php:57 +msgid "There are no queues to edit" +msgstr "Keine Warteschlangen zum Bearbeiten" + +#: lib/Forms/CreateTicket.php:35 +msgid "There are no queues which you can create tickets in." +msgstr "Es gibt keine Warteschlangen, für die Sie Tickets erstellen dürfen." + +#: lib/Forms/Search.php:38 +msgid "There are no queues which you can search." +msgstr "Es gibt keine Warteschlangen, die Sie durchsuchen dürfen." + +#: lib/Forms/Admin/State.php:43 lib/Forms/Admin/State.php:92 +msgid "There are no states to edit" +msgstr "Kein Status zum Bearbeiten" + +#: lib/Forms/CreateTicket.php:72 +msgid "" +"There are no ticket types associated with this queue; until there are, you " +"cannot create any tickets in this queue." +msgstr "" +"Dieser Warteschlange sind keine Tickettypen zugeordnet; solange können sie " +"keine Tickets für diese Warteschlange erstellen." + +#: lib/Forms/Admin/Type.php:45 +msgid "There are no types to edit" +msgstr "Keine Typen zum Bearbeiten" + +#: lib/Forms/Admin/User.php:75 +msgid "There are no users responsible for this queue." +msgstr "Für diese Warteschlange ist kein Benutzer verantwortlich." + +#: lib/Forms/CreateTicket.php:242 +msgid "There are no users to which this ticket can be assigned." +msgstr "Es gibt keine Benutzer, denen dieses Ticket zugewiesen werden kann." + +#: lib/Forms/Admin/Version.php:44 +msgid "There are no versions to edit" +msgstr "Keine Versionen zum Bearbeiten" + +#: lib/Reports.php:143 +msgid "There is no data for this report." +msgstr "Es liegen keine Daten für diesen Bericht vor." + +#: admin/index.php:705 +#, php-format +msgid "There was an error adding \"%s\" to the responsible list for \"%s\":" +msgstr "" +"Beim Hinzufügen von \"%s\" zu der Liste der Verantwortlichen für \"%s\" ist " +"ein Problem aufgetreten:" + +#: admin/index.php:911 +msgid "There was an error creating the attribute:" +msgstr "Beim Erstellen des Attributs ist ein Fehler aufgetreten:" + +#: admin/index.php:1051 +msgid "There was an error creating the form reply:" +msgstr "Beim Erstellen der Standardantwort ist ein Fehler aufgetreten:" + +#: admin/index.php:561 +msgid "There was an error creating the priority:" +msgstr "Beim Erstellen der Priorität ist ein Fehler aufgetreten:" + +#: admin/index.php:309 +msgid "There was an error creating the queue:" +msgstr "Beim Erstellen der Warteschlange ist ein Fehler aufgetreten:" + +#: admin/index.php:426 +msgid "There was an error creating the state:" +msgstr "Beim Erstellen des Status ist ein Fehler aufgetreten:" + +#: admin/index.php:780 +msgid "There was an error creating the version:" +msgstr "Beim Erstellen der Version ist ein Fehler aufgetreten:" + +#: admin/index.php:1010 +msgid "There was an error deleting the attribute:" +msgstr "Beim Löschen des Attributs ist ein Fehler aufgetreten:" + +#: admin/index.php:1139 +msgid "There was an error deleting the form reply:" +msgstr "Beim Löschen der Standardantwort ist ein Fehler aufgetreten:" + +#: admin/index.php:665 +msgid "There was an error deleting the priority:" +msgstr "Beim Löschen der Priorität ist ein Fehler aufgetreten:" + +#: admin/index.php:395 +msgid "There was an error deleting the queue:" +msgstr "Beim Löschen der Warteschlange ist ein Fehler aufgetreten:" + +#: admin/index.php:528 +msgid "There was an error deleting the state:" +msgstr "Beim Löschen des Status ist ein Fehler aufgetreten:" + +#: ticket/delete.php:75 +msgid "There was an error deleting the ticket:" +msgstr "Beim Löschen des Tickets ist ein Fehler aufgetreten:" + +#: admin/index.php:275 +msgid "There was an error deleting the type:" +msgstr "Beim Löschen des Typs ist ein Fehler aufgetreten:" + +#: admin/index.php:868 +msgid "There was an error deleting the version:" +msgstr "Beim Löschen der Version ist ein Fehler aufgetreten:" + +#: admin/index.php:982 +msgid "There was an error editing the attribute:" +msgstr "Beim Bearbeiten des Attributs ist ein Fehler aufgetreten:" + +#: admin/index.php:1104 +msgid "There was an error editing the form reply:" +msgstr "Beim Bearbeiten der Standardantwort ist ein Fehler aufgetreten:" + +#: admin/index.php:615 +msgid "There was an error editing the priority:" +msgstr "Beim Bearbeiten der Priorität ist ein Fehler aufgetreten:" + +#: admin/index.php:375 +msgid "There was an error editing the queue:" +msgstr "Beim Bearbeiten der Warteschlange ist ein Fehler aufgetreten:" + +#: admin/index.php:480 +msgid "There was an error editing the state:" +msgstr "Beim Bearbeiten des Status ist ein Fehler aufgetreten:" + +#: admin/index.php:841 +msgid "There was an error editing the version:" +msgstr "Beim Bearbeiten der Version ist ein Fehler aufgetreten:" + +#: lib/Forms/Admin/User.php:35 +#, php-format +msgid "There was an error listing users: %s; %s" +msgstr "Beim Anzeigen der Benutzer ist ein Fehler aufgetreten: %s; %s" + +#: queue/index.php:52 +#, php-format +msgid "There was an error locating tickets in this queue: " +msgstr "" +"Beim Suchen von Tickets in dieser Warteschlange ist ein Fehler aufgetreten: " + +#: admin/index.php:219 +msgid "There was an error modifying the type:" +msgstr "Beim Bearbeiten des Typs ist ein Fehler aufgetreten:" + +#: search.php:140 +#, php-format +msgid "There was an error performing your search: %s" +msgstr "Bei der Ausführung Ihrer Suchanfrage ist ein Fehler aufgetreten: %s" + +#: admin/index.php:750 +#, php-format +msgid "" +"There was an error removing \"%s\" from the responsible list for \"%s\":" +msgstr "" +"Beim Löschen von \"%s\" aus der Liste der Verantwortlichen für \"%s\" ist " +"ein Fehler aufgetreten:" + +#: admin/index.php:638 +msgid "There was an error setting the default priority:" +msgstr "Beim Festlegen der Standard-Priorität ist ein Fehler aufgetreten:" + +#: admin/index.php:502 +msgid "There was an error setting the default state:" +msgstr "Beim Festlegen des Standard-Status ist ein Fehler aufgetreten:" + +#: lib/Forms/EditTicket.php:166 lib/Forms/AddComment.php:37 +msgid "This comment is visible to everyone" +msgstr "Dieser Kommentar ist für jedermann sichtbar" + +#: lib/Forms/Admin/Queue.php:31 +msgid "" +"This email address will be used when sending notifications for any queue " +"tickets." +msgstr "" +"Diese E-Mail-Adresse wird zum Versenden aller Benachrichtigungen für diese " +"Warteschlange benutzt." + +#: data.php:29 +msgid "This is not a search results template." +msgstr "Dies ist keine Vorlage für Suchergebnisse." + +#: lib/Query.php:435 lib/Query.php:668 +msgid "This query element cannot be edited." +msgstr "Diese Abfragekriterium kann nicht bearbeitet werden." + +#: ticket/queue.php:81 lib/Forms/CreateTicket.php:88 +msgid "" +"This queue requires that you specify a version, but there are no versions " +"associated with it. Until versions are created for this queue, you will not " +"be able to create tickets." +msgstr "" +"Für diese Warteschlange müssen Sie eine Version angeben, aber es sind noch " +"keine Versionen zugeordnet. Solange keine Versionen erzeugt worden sind, " +"können Sie keine Tickets anlegen." + +#: lib/Ticket.php:638 lib/Ticket.php:820 +msgid "Ticket" +msgstr "Ticket" + +#: ticket/delete.php:71 +#, php-format +msgid "Ticket %d has been deleted." +msgstr "Das Ticket %d wurde gelöscht." + +#: lib/api.php:850 +#, php-format +msgid "Ticket %s - %s" +msgstr "Ticket %s - %s" + +#: lib/Driver/sql.php:1081 +#, php-format +msgid "Ticket %s was not found." +msgstr "Ticket %s nicht gefunden." + +#: search.php:170 +msgid "Ticket Search" +msgstr "Ticketsuche" + +#: lib/Forms/CreateTicket.php:142 +msgid "Ticket State" +msgstr "Ticket-Status" + +#: templates/reports/stats.inc:1 +msgid "Ticket Stats" +msgstr "Ticket-Statistiken" + +#: lib/Forms/CreateTicket.php:80 +msgid "Ticket Type" +msgstr "Ticket-Typ" + +#: lib/Forms/Admin/Queue.php:103 +msgid "Ticket Types associated with this Queue" +msgstr "Dieser Warteschlange zugehörige Tickettypen" + +#: lib/Ticket.php:633 +#, php-format +msgid "Ticket URL: %s" +msgstr "Ticket-URL: %s" + +#: ticket/update.php:94 +msgid "Ticket Updated" +msgstr "Ticket aktualisiert" + +#: lib/api.php:871 +msgid "Tickets" +msgstr "Tickets" + +#: query/rss.php:70 +#, php-format +msgid "Tickets matching the query \"%s\"." +msgstr "Zur Abfrage \"%s\" passende Tickets." + +#: templates/prefs/sourceselect.inc:322 +msgid "" +"To select multiple fields, hold down the Control (PC) or Command (Mac) while " +"clicking." +msgstr "" +"Halten Sie beim Klicken Strg (PC) bzw. Command (Mac) gedrückt, um mehrere " +"Einträge auszuwählen." + +#: ticket/queue.php:89 lib/Whups.php:677 lib/Ticket.php:608 lib/Ticket.php:805 +#: lib/Ticket.php:945 lib/Renderer/Query.php:108 lib/Forms/Query.php:174 +#: config/prefs.php.dist:48 +msgid "Type" +msgstr "Typ" + +#: lib/Renderer/Comment.php:105 +#, php-format +msgid "Type ⇒ %s" +msgstr "Typ ⇒ %s" + +#: lib/Forms/Admin/Type.php:23 lib/Forms/Admin/Type.php:70 +#: lib/Forms/Admin/Type.php:160 +msgid "Type Description" +msgstr "Typbeschreibung" + +#: lib/Forms/Admin/Type.php:22 lib/Forms/Admin/Type.php:48 +#: lib/Forms/Admin/Type.php:67 lib/Forms/Admin/Type.php:156 +msgid "Type Name" +msgstr "Typbezeichnung" + +#: search/rss.php:39 +#, php-format +msgid "Type: %s; State: %s" +msgstr "Typ: %s; Status: %s" + +#: lib/Ticket.php:961 +msgid "Unassigned" +msgstr "Nicht zugewiesen" + +#: lib/Block/unassigned.php:3 lib/Block/unassigned.php:24 +msgid "Unassigned Tickets" +msgstr "Nicht zugewiesene Tickets" + +#: lib/Forms/Admin.php:42 +msgid "Unassigned tickets" +msgstr "Nicht zugewiesene Tickets" + +#: lib/Driver.php:196 +msgid "Unconfirmed" +msgstr "Unbestätigt" + +#: lib/Renderer/Query.php:166 lib/Renderer/Query.php:206 +#, php-format +msgid "Unknown node type %s" +msgstr "Unbekannter Knotentyp %s" + +#: lib/api.php:790 +msgid "Update" +msgstr "Aktualisierung" + +#: ticket/update.php:108 +#, php-format +msgid "Update %s" +msgstr "%s aktualisieren" + +#: templates/admin/mtmatrix.inc:29 +msgid "Update Associations" +msgstr "Zuordnungen aktualisieren" + +#: lib/Whups.php:683 lib/Ticket.php:981 lib/Renderer/Query.php:145 +msgid "Updated" +msgstr "Aktualisiert" + +#: lib/Ticket.php:615 lib/Ticket.php:640 +msgid "Updated By" +msgstr "Aktualisiert Von" + +#: lib/Forms/Query.php:327 lib/Forms/Search.php:58 +msgid "Updated from" +msgstr "Aktualisiert seit" + +#: lib/Forms/Query.php:328 +msgid "Updated to" +msgstr "Aktualisiert bis" + +#: lib/Forms/Admin/User.php:34 lib/Forms/Admin/User.php:44 +#: lib/Forms/Admin/User.php:47 +msgid "User" +msgstr "Benutzer" + +#: lib/Forms/Query.php:44 +msgid "User ID" +msgstr "Benutzerkennung" + +#: lib/Forms/Admin/Queue.php:131 +msgid "Users responsible for this Queue" +msgstr "Für diese Warteschlange verantwortliche Benutzer" + +#: lib/Forms/Admin/User.php:79 +msgid "Users responsible for this queue" +msgstr "Für diese Warteschlange verantwortliche Benutzer" + +#: lib/Ticket.php:607 lib/Ticket.php:804 lib/Renderer/Query.php:102 +#: lib/Forms/Query.php:185 config/prefs.php.dist:51 +msgid "Version" +msgstr "Version" + +#: lib/Forms/Admin/Version.php:24 lib/Forms/Admin/Version.php:70 +#: lib/Forms/Admin/Version.php:93 +msgid "Version Description" +msgstr "Versionsbeschreibung" + +#: lib/Forms/Admin/Version.php:23 lib/Forms/Admin/Version.php:48 +#: lib/Forms/Admin/Version.php:67 lib/Forms/Admin/Version.php:90 +msgid "Version Name" +msgstr "Versionsbezeichnung" + +#: ticket/type.php:43 ticket/queue.php:50 +msgid "Viewable only by members of" +msgstr "Nur einsehbar für Mitglieder von" + +#: lib/Forms/AddComment.php:25 +msgid "Watch this ticket" +msgstr "Dieses Ticket beobachten" + +#: ticket/watch.php:78 +#, php-format +msgid "Watchers for %s" +msgstr "Beobachter für %s" + +#: config/prefs.php.dist:104 +msgid "Weekday Day Month" +msgstr "Wochentag Tag Monat" + +#: config/prefs.php.dist:105 +msgid "Weekday Day Month HH:MM:SS TZ" +msgstr "Wochentag Tag Monat HH:MM:SS TZ" + +#: ticket/delete.php:33 lib/Forms/Query.php:449 lib/Forms/Admin/Version.php:96 +#: lib/Forms/Admin/State.php:121 lib/Forms/Admin/Priority.php:121 +#: lib/Forms/Admin/Queue.php:174 lib/Forms/Admin/Attribute.php:149 +#: lib/Forms/Admin/Reply.php:110 lib/Forms/Admin/Type.php:176 +msgid "Yes" +msgstr "Ja" + +#: view.php:54 +#, php-format +msgid "You are not allowed to view ticket %d." +msgstr "Sie haben keine Berechtigung das Ticket %d anzuzeigen." + +#: lib/Driver/sql.php:1090 +#, php-format +msgid "You do not have permission to access this ticket (%s)." +msgstr "Sie haben nicht genügend Rechte, um dieses Ticket (%s) anzuzeigen." + +#: lib/api.php:375 +msgid "You do not have permission to update this ticket." +msgstr "Sie haben nicht genügend Rechte, um dieses Ticket zu aktualisieren." + +#: lib/Block/myrequests.php:46 +msgid "You have no open requests." +msgstr "Sie haben keine offenen Anfragen." + +#: lib/Forms/Query.php:419 lib/Block/query.php:28 +msgid "You have no saved queries." +msgstr "Sie haben keine gespeicherten Abfragen." + +#: lib/Whups.php:710 +msgid "You must select at least one queue to send reminders for." +msgstr "" +"Sie müssen erst mindestens ein Warteschlange auswählen, für die Erinnerungen " +"verschickt werden sollen." + +#: lib/Forms/CreateTicket.php:132 lib/Forms/AddComment.php:18 +msgid "Your Email Address" +msgstr "Ihre E-Mail-Adresse" + +#: ticket/create.php:60 +#, php-format +msgid "" +"Your ticket ID is %s. An appropriate person has been notified of this " +"request." +msgstr "" +"Ihre Ticketnummer lautet %s. Eine zuständige Person wurde benachrichtigt." + +#: lib/Mail.php:244 +msgid "[ Could not render body of message. ]" +msgstr "[ Der Nachrichtentext konnte nicht dargestellt werden. ]" + +#: lib/Whups.php:774 +msgid "_Admin" +msgstr "A_dministration" + +#: lib/Whups.php:298 +msgid "_Comment" +msgstr "_Kommentar" + +#: query/index.php:157 +msgid "_Date Criteria" +msgstr "Datums_kriterien" + +#: lib/Whups.php:316 +msgid "_Delete" +msgstr "Lös_chen" + +#: lib/Query.php:237 +msgid "_Delete Query" +msgstr "Abfrage löschen" + +#: lib/Query.php:218 +msgid "_Edit Query" +msgstr "Abfrage bea_rbeiten" + +#: admin/index.php:33 +msgid "_Edit Queues" +msgstr "_Warteschlangen bearbeiten" + +#: templates/menu.inc:5 +msgid "_Go" +msgstr "_Los" + +#: query/index.php:156 +msgid "_Group Criteria" +msgstr "_Gruppenkriterien" + +#: lib/Whups.php:292 +msgid "_History" +msgstr "_Geschichte" + +#: lib/Query.php:231 +msgid "_Load Query" +msgstr "Ab_frage laden" + +#: lib/Whups.php:765 +#, php-format +msgid "_My %s" +msgstr "_Meine %s" + +#: lib/Whups.php:768 +msgid "_New Ticket" +msgstr "_Neues Ticket" + +#: query/index.php:154 +msgid "_Property Criteria" +msgstr "Eigens_chaftenkriterien" + +#: lib/Whups.php:769 +msgid "_Query Builder" +msgstr "_Abfrageeditor" + +#: lib/Whups.php:770 +msgid "_Reports" +msgstr "_Berichte" + +#: lib/Whups.php:767 +msgid "_Search" +msgstr "_Suche" + +#: query/index.php:158 +msgid "_Text Criteria" +msgstr "_Textkriterien" + +#: lib/Whups.php:294 +msgid "_Update" +msgstr "Akt_ualisierung" + +#: query/index.php:155 +msgid "_User Criteria" +msgstr "Benut_zerkriterien" + +#: lib/Whups.php:302 +msgid "_Watch" +msgstr "Be_obachten" + +#: lib/Renderer/Query.php:186 +msgid "contains (case insensitive) substring" +msgstr "enthält Teilzeichenkette (Groß-/Kleinschreibung ignoriert)" + +#: lib/Renderer/Query.php:190 +msgid "contains (case sensitive) substring" +msgstr "enthält Teilzeichenkette (Groß-/Kleinschreibung beachtet)" + +#: lib/Renderer/Query.php:194 +msgid "contains the word" +msgstr "enthält das Wort" + +#: lib/Mail.php:94 lib/Mail.php:118 lib/Mail.php:146 +msgid "current user:" +msgstr "aktueller Benutzer:" + +#: lib/api.php:859 +msgid "estimated time" +msgstr "geschätzte Zeit" + +#: lib/Renderer/Query.php:182 +msgid "is" +msgstr "ist" + +#: lib/Renderer/Query.php:174 +msgid "is greater than" +msgstr "ist größer als" + +#: lib/Renderer/Query.php:178 +msgid "is less than" +msgstr "ist kleiner als" + +#: lib/Renderer/Query.php:198 +msgid "matches the pattern" +msgstr "entspricht dem Muster" + +#: lib/Forms/Search.php:57 lib/Forms/Search.php:59 lib/Forms/Search.php:61 +#: lib/Forms/Search.php:63 lib/Forms/Search.php:65 +msgid "to" +msgstr "bis" diff --git a/whups/po/es_ES.po b/whups/po/es_ES.po new file mode 100644 index 000000000..3a4f3d5af --- /dev/null +++ b/whups/po/es_ES.po @@ -0,0 +1,2155 @@ +# Spanish translations for whups package +# Traducciones al español para el paquete whups. +# Copyright 2008-2009 The Horde Project +# This file is distributed under the same license as the whups package. +# Automatically generated, 2008. +# +msgid "" +msgstr "" +"Project-Id-Version: Whups 1.0-cvs\n" +"Report-Msgid-Bugs-To: dev@lists.horde.org\n" +"POT-Creation-Date: 2008-03-16 09:38+0100\n" +"PO-Revision-Date: 2008-03-16 09:38+0100\n" +"Last-Translator: Manuel P. Ayala \n" +"Language-Team: i18n@lists.horde.org\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: admin/index.php:720 +#, php-format +msgid "\"%s\" is no longer among those responsible for \"%s\"" +msgstr "\"%s\" ya no está entre los encargados de \"%s\"" + +#: templates/menu.inc:5 +msgid "#Id" +msgstr "#Id" + +#: templates/ticket/watchers.inc:3 +#, php-format +msgid "%d people watching, %d people responsible" +msgstr "%d observadores, %d encargados" + +#: queue/rss.php:96 +#, php-format +msgid "%s %s tickets in %s" +msgstr "%s %s incidencias en %s" + +#: queue/rss.php:100 +#, php-format +msgid "%s %s tickets in all queues" +msgstr "%s %s incidencias en todas las colas" + +#: lib/Renderer/Comment.php:119 +#, php-format +msgid "%s ⇒ %s" +msgstr "%s ⇒ %s" + +#: lib/Driver.php:427 +#, php-format +msgid "%s (%s) wrote:" +msgstr "%s (%s) escribió:" + +#: admin/index.php:677 +#, php-format +msgid "%s added to those responsible for \"%s\"" +msgstr "Se ha añadido a %s a los encargados de \"%s\"" + +#: templates/reports/stats.inc:17 +#, php-format +msgid "%s days" +msgstr "%s días" + +#: queue/rss.php:104 +#, php-format +msgid "%s tickets in %s" +msgstr "%s incidencias en %s" + +#: queue/rss.php:108 +#, php-format +msgid "%s tickets in all queues" +msgstr "%s incidencias en todas las colas" + +#: ticket/watch.php:59 +#, php-format +msgid "%s will be notified when this ticket is updated." +msgstr "Se notificará a %s cuando se actualice esta incidencia" + +#: ticket/watch.php:71 +#, php-format +msgid "%s will no longer receive updates for this ticket." +msgstr "%s no recibirá más actualizaciones de esta incidencia." + +#: admin/index.php:109 +msgid "- Stage 1" +msgstr "- Etapa 1" + +#: admin/index.php:114 +msgid "- Stage 2" +msgstr "- Etapa 2" + +#: scripts/mail-filter.php:172 +msgid "--queue-name or --queue-id must specify a valid and public queue." +msgstr "" +"--nombre-de-cola o --id-de-cola tienen que indicar una cola pública válida." + +#: templates/prevnext.inc:16 +msgid "<>" +msgstr "Último>>" + +#: lib/Forms/Query.php:340 +msgid "Load Query" +msgstr "Cargar consulta" + +#: config/.bak/prefs.php.dist:97 +msgid "MM/DD/YY" +msgstr "DD/MM/YY" + +#: config/.bak/prefs.php.dist:98 +msgid "MM/DD/YY HH:MM:SS" +msgstr "DD/MM/YY HH:MM:SS" + +#: lib/Forms/Admin.php:348 +#, php-format +msgid "Make a clone of %s" +msgstr "Realizar un duplicado de %s" + +#: lib/Forms/Query.php:270 +msgid "Match" +msgstr "Coincidencia" + +#: lib/Forms/Query.php:43 lib/Forms/Query.php:129 lib/Forms/Query.php:271 +msgid "Match Operator" +msgstr "Operador de coincidencia" + +#: lib/Query.php:54 +msgid "Match Pattern" +msgstr "Patrón de coincidencia" + +#: lib/Query.php:53 +msgid "Match Word" +msgstr "Palabra coincidente" + +#: lib/Reports.php:20 +msgid "Maximum time a ticket is unresolved" +msgstr "Tiempo máximo sin resolver una incidencia" + +#: lib/Block/tree_menu.php:3 +msgid "Menu List" +msgstr "Listado del menú" + +#: lib/Reports.php:21 +msgid "Minimum time a ticket is unresolved" +msgstr "Tiempo mínimo sin resolver una incidencia" + +#: config/.bak/prefs.php.dist:128 +msgid "Most recent first" +msgstr "Recientes primero" + +#: ticket/queue.php:174 +#, php-format +msgid "Moved ticket %d to \"%s\"" +msgstr "Se ha trasladado la incidencia %d a \"%s\"" + +#: mybugs.php:51 +#, php-format +msgid "My %s" +msgstr "Mis %s" + +#: mybugs_edit.php:32 +#, php-format +msgid "My %s :: Add Content" +msgstr "Mi %s :: Añadir contenido" + +#: search.php:106 lib/Block/myqueries.php:3 lib/Block/myqueries.php:24 +msgid "My Queries" +msgstr "Mis consultas" + +#: lib/Block/myrequests.php:3 lib/Block/myrequests.php:24 +msgid "My Requests" +msgstr "Mis solicitudes" + +#: lib/Block/mytickets.php:3 lib/Block/mytickets.php:24 +#: config/.bak/prefs.php.dist:66 +msgid "My Tickets" +msgstr "Mis incidencias" + +#: lib/api.php:960 +msgid "My tickets by assignment date" +msgstr "Mis incidencias por fecha de asignación" + +#: lib/api.php:959 +msgid "My tickets by creation date" +msgstr "Mis incidencias por fecha de creación" + +#: lib/api.php:961 +msgid "My tickets by due date" +msgstr "Mis incidencias por fecha de vencimiento" + +#: lib/api.php:962 +msgid "My tickets by resolution date" +msgstr "Mis incidencias por fecha de resolución" + +#: lib/Forms/Query.php:319 lib/Forms/Query.php:351 +msgid "Name" +msgstr "Nombre" + +#: lib/Forms/Admin.php:353 +msgid "Name of the cloned copy" +msgstr "Nombre del duplicado" + +#: lib/Query.php:184 +msgid "Ne_w Query" +msgstr "Aña_dir" + +#: lib/Driver.php:195 +msgid "New" +msgstr "Nueva" + +#: lib/Ticket.php:578 lib/Ticket.php:642 +msgid "New Attachment" +msgstr "Añadir adjunto" + +#: lib/Renderer/Comment.php:58 lib/Renderer/Comment.php:61 +#, php-format +msgid "New Attachment: %s" +msgstr "Añadir adjunto: %s" + +#: ticket/queue.php:31 +msgid "New Queue" +msgstr "Nueva cola" + +#: lib/Block/tree_menu.php:21 ticket/create.php:60 +msgid "New Ticket" +msgstr "Añadir" + +#: ticket/type.php:34 +msgid "New Type" +msgstr "Nuevo tipo" + +#: templates/prevnext.inc:26 +msgid "Next>" +msgstr "Siguiente>" + +#: lib/Forms/Query.php:378 lib/Forms/Admin.php:142 lib/Forms/Admin.php:334 +#: lib/Forms/Admin.php:469 lib/Forms/Admin.php:580 lib/Forms/Admin.php:666 +#: lib/Forms/Admin.php:758 ticket/delete.php:37 +msgid "No" +msgstr "No" + +#: lib/Ticket.php:99 +#, php-format +msgid "" +"No priority for this ticket and no default priority for ticket type \"%s\" " +"specified." +msgstr "" +"No se ha indicado una prioridad para esta incidencia y las incidencias de " +"tipo \"%s\" carecen de prioridad por omisión." + +#: lib/Block/myqueries.php:46 +msgid "No queries have been saved." +msgstr "No se ha guardado ninguna consulta." + +#: lib/Block/query.php:64 lib/Driver/sql.php:467 +msgid "No query to run" +msgstr "No hay consultas a realizar" + +#: lib/Block/queuecontents.php:25 +msgid "No queues available." +msgstr "No se dispone de colas." + +#: lib/Ticket.php:91 +#, php-format +msgid "" +"No state for this ticket and no default state for ticket type \"%s\" " +"specified." +msgstr "" +"No se ha indicado un estado para esta incidencia y las incidencias de tipo " +"\"%s\" carecen de estado por omisión." + +#: reports.php:19 +msgid "No stats available." +msgstr "No se dispone de estadísticas." + +#: lib/Driver.php:463 +#, php-format +msgid "No such backend \"%s\" found" +msgstr "No se encontró el motor \"%s\"" + +#: lib/View.php:33 +#, php-format +msgid "No such view \"%s\" found" +msgstr "No se encontró la vista \"%s\"" + +#: lib/Block/mytickets.php:45 +msgid "No tickets are assigned to you." +msgstr "No se le han asignado incidencias." + +#: lib/Block/unassigned.php:45 +msgid "No tickets are unassigned!" +msgstr "¡No hay incidencias sin asignar!" + +#: lib/Block/queuecontents.php:62 lib/Block/queuecontents.php:73 +msgid "No tickets in queue." +msgstr "No hay incidencias en la cola." + +#: lib/Whups.php:597 +msgid "No tickets matched your search criteria." +msgstr "No hay incidencias que coincidan con su búsqueda." + +#: lib/Ticket.php:83 +#, php-format +msgid "No type for this ticket and no default type for queue \"%s\" specified." +msgstr "" +"Esta incidencia no tiene tipo y no se ha indicado un tipo por omisión para " +"la cola \"%s\"." + +#: lib/Reports.php:88 +msgid "None" +msgstr "Ninguna" + +#: lib/Forms/Query.php:23 lib/Renderer/Query.php:79 +msgid "Not" +msgstr "No" + +#: query.php:80 +msgid "Not yet implemented." +msgstr "Aún no se ha desarrollado." + +#: config/.bak/prefs.php.dist:17 +msgid "Notification Options" +msgstr "Opciones de aviso" + +#: config/.bak/prefs.php.dist:108 +msgid "Only notify me of ticket changes from other users" +msgstr "" +"Comunicarme sólo los cambios de incidencias realizados por otros usuarios" + +#: queue/rss.php:43 +msgid "Open" +msgstr "Abierta" + +#: lib/Block/queuesummary.php:48 +msgid "Open Tickets" +msgstr "Incidencias abiertas" + +#: lib/Reports.php:11 +msgid "Open Tickets by Owner" +msgstr "Incidencias abiertas por propietario" + +#: lib/Reports.php:9 +msgid "Open Tickets by Priority" +msgstr "Incidencias abiertas por prioridad" + +#: lib/Reports.php:6 +msgid "Open Tickets by Queue" +msgstr "Incidencias abiertas por cola" + +#: lib/Reports.php:10 +msgid "Open Tickets by Requester" +msgstr "Incidencias abiertas por solicitante" + +#: lib/Reports.php:7 +msgid "Open Tickets by State" +msgstr "Incidencias abiertas por estado" + +#: lib/Reports.php:8 +msgid "Open Tickets by Type" +msgstr "Incidencias abiertas por tipo" + +#: lib/Block/queuecontents.php:47 +#, php-format +msgid "Open Tickets in %s" +msgstr "Incidencias abiertas en %s" + +#: queue/index.php:43 queue/index.php:57 queue/rss.php:119 +#, php-format +msgid "Open tickets in %s" +msgstr "Incidencias abiertas en %s" + +#: queue/rss.php:121 +msgid "Open tickets in all queues." +msgstr "Incidencias abiertas en todas las colas." + +#: lib/Forms/Query.php:22 lib/Renderer/Query.php:78 +msgid "Or" +msgstr "O" + +#: config/.bak/prefs.php.dist:9 config/.bak/prefs.php.dist:16 +msgid "Other Options" +msgstr "Otras opciones" + +#: lib/Whups.php:562 lib/Ticket.php:577 lib/Ticket.php:634 lib/Ticket.php:635 +#: lib/Ticket.php:637 lib/Ticket.php:731 lib/Ticket.php:748 lib/Ticket.php:857 +#: lib/Forms/EditTicket.php:102 lib/Forms/CreateTicket.php:196 +#: lib/Forms/CreateTicket.php:208 lib/Renderer/Query.php:84 +msgid "Owners" +msgstr "Propietarios" + +#: lib/Whups.php:745 +#, php-format +msgid "Permanently delete %s?" +msgstr "¿Eliminar definitivamente %s?" + +#: ticket/delete.php:17 ticket/queue.php:124 ticket/update.php:23 +#: ticket/deleteAttachment.php:17 ticket/type.php:17 +msgid "Permission Denied" +msgstr "Permiso denegado" + +#: lib/Forms/EditTicket.php:172 ticket/delete.php:44 +msgid "Permission Denied." +msgstr "Permiso denegado." + +#: runquery.php:37 query.php:32 lib/Forms/Query.php:388 +#, php-format +msgid "Permission denied." +msgstr "Permiso denegado." + +#: lib/Forms/Admin.php:285 lib/Forms/Admin.php:331 +msgid "Priorities for this Type" +msgstr "Prioridades de este tipo" + +#: lib/Whups.php:550 lib/Whups.php:559 lib/Ticket.php:570 lib/Ticket.php:725 +#: lib/Ticket.php:853 lib/Forms/Query.php:197 lib/Forms/EditTicket.php:65 +#: lib/Forms/CreateTicket.php:124 lib/Renderer/Query.php:125 +#: ticket/queue.php:110 ticket/type.php:69 config/.bak/prefs.php.dist:40 +msgid "Priority" +msgstr "Prioridad" + +#: lib/Renderer/Comment.php:114 +#, php-format +msgid "Priority ⇒ %s" +msgstr "Prioridad ⇒ %s" + +#: lib/Forms/Admin.php:483 lib/Forms/Admin.php:529 lib/Forms/Admin.php:577 +msgid "Priority Description" +msgstr "Descripción de la prioridad" + +#: lib/Forms/Admin.php:482 lib/Forms/Admin.php:507 lib/Forms/Admin.php:526 +#: lib/Forms/Admin.php:553 lib/Forms/Admin.php:574 +msgid "Priority Name" +msgstr "Nombre de la prioridad" + +#: query.php:156 +msgid "Query Builder" +msgstr "Consultas" + +#: lib/Forms/QueryParameterForm.php:20 +msgid "Query Parameters" +msgstr "Parámetros de la consulta" + +#: runquery.php:72 lib/Block/query.php:3 lib/Block/query.php:51 +msgid "Query Results" +msgstr "Resultados de la consulta" + +#: lib/Block/query.php:33 +msgid "Query to run" +msgstr "Consulta a realizar" + +#: lib/Whups.php:560 lib/Ticket.php:566 lib/Ticket.php:721 lib/Ticket.php:820 +#: lib/Ticket.php:825 lib/Forms/Query.php:180 lib/Forms/Search.php:36 +#: lib/Renderer/Query.php:94 lib/Block/queuecontents.php:32 +#: lib/Block/queuesummary.php:48 config/.bak/prefs.php.dist:41 +msgid "Queue" +msgstr "Cola" + +#: lib/Renderer/Comment.php:99 +#, php-format +msgid "Queue ⇒ %s" +msgstr "Cola ⇒ %s" + +#: lib/Block/queuecontents.php:3 lib/Block/queuecontents.php:49 +msgid "Queue Contents" +msgstr "Contenido de la cola" + +#: lib/Forms/Admin.php:24 lib/Forms/Admin.php:82 lib/Forms/Admin.php:139 +msgid "Queue Description" +msgstr "Descripción de la cola" + +#: lib/Forms/Admin.php:23 lib/Forms/Admin.php:56 lib/Forms/Admin.php:79 +#: lib/Forms/Admin.php:136 lib/Forms/CreateTicket.php:27 +#: lib/Forms/CreateTicket.php:37 +msgid "Queue Name" +msgstr "Nombre de la cola" + +#: lib/Forms/Admin.php:25 lib/Forms/Admin.php:85 +msgid "Queue Slug" +msgstr "ID de seguimiento" + +#: lib/Block/queuesummary.php:3 lib/Block/queuesummary.php:24 +msgid "Queue Summary" +msgstr "Resumen" + +#: lib/Ticket.php:832 lib/Ticket.php:838 lib/Forms/CreateTicket.php:82 +#: ticket/queue.php:79 +msgid "Queue Version" +msgstr "Versión de la cola" + +#: admin/index.php:36 +msgid "Queue/Type Matri_x" +msgstr "Matri_z de Colas/Tipos" + +#: templates/admin/mtmatrix.inc:6 +msgid "Queue/Type Matrix" +msgstr "Matriz de Colas/Tipos" + +#: lib/api.php:179 lib/api.php:885 +msgid "Queues" +msgstr "Colas" + +#: templates/prevnext.inc:32 +msgid "Re_turn to Search Results" +msgstr "Volver a resul_tados de la búsqueda" + +#: lib/Forms/Admin.php:759 +msgid "Really delete this attribute? This may cause data problems!" +msgstr "" +"¿Eliminar realmente este atributo? ¡Puede ocasionar problemas de datos!" + +#: lib/Forms/Admin.php:581 +msgid "Really delete this priority? This may cause data problems!" +msgstr "" +"¿Eliminar realmente esta prioridad? ¡Puede ocasionar problemas de datos!" + +#: lib/Forms/Query.php:379 +msgid "Really delete this query? This operation is not undoable." +msgstr "" +"¿Eliminar realmente esta consulta? Esta operación no se puede deshacer." + +#: lib/Forms/Admin.php:143 +msgid "Really delete this queue? This may cause data problems!" +msgstr "¿Eliminar realmente esta cola? ¡Puede ocasionar problemas de datos!" + +#: lib/Forms/Admin.php:470 +msgid "Really delete this state? This may cause data problems!" +msgstr "¿Eliminar realmente este estado? ¡Puede ocasionar problemas de datos!" + +#: ticket/delete.php:38 +msgid "" +"Really delete this ticket? It will NOT be archived, and will be gone forever." +msgstr "" +"¿Eliminar realmente esta incidencia? NO se archivará y se perderá " +"definitivamente." + +#: lib/Forms/Admin.php:335 +msgid "Really delete this type? This may cause data problems!" +msgstr "¿Eliminar realmente este tipo? ¡Puede ocasionar problemas de datos!" + +#: lib/Forms/Admin.php:667 +msgid "Really delete this version? This may cause data problems!" +msgstr "¿Eliminar realmente esta versión? ¡Puede ocasionar problemas de datos!" + +#: lib/Mail.php:175 +msgid "Received message:" +msgstr "Mensaje recibido:" + +#: search.php:87 +msgid "Refine Search" +msgstr "Concretar búsqueda" + +#: admin/index.php:991 +msgid "Reminders were sent." +msgstr "Se enviaron recordatorios." + +#: lib/Forms/Admin.php:192 +msgid "Remove User" +msgstr "Eliminar usuario" + +#: ticket/watch.php:48 +msgid "Remove Watcher" +msgstr "Eliminar Observador" + +#: lib/Renderer/Comment.php:94 +msgid "Reply to this comment" +msgstr "Contestar a este comentario" + +#: reports.php:24 +msgid "Reports" +msgstr "Informes" + +#: lib/Whups.php:561 lib/Ticket.php:864 lib/Renderer/Query.php:86 +msgid "Requester" +msgstr "Solicitante" + +#: lib/Driver.php:197 lib/api.php:1003 lib/Whups.php:566 lib/Ticket.php:890 +#: config/.bak/prefs.php.dist:45 +msgid "Resolved" +msgstr "Resuelta" + +#: lib/Forms/Admin.php:194 +msgid "Responsible Users" +msgstr "Usuarios encargados" + +#: lib/Forms/EditTicket.php:142 +msgid "Restrict Comment to:" +msgstr "Restringir comentarios a:" + +#: lib/Whups.php:268 +msgid "S_et Queue" +msgstr "_Establecer cola" + +#: lib/Query.php:202 +msgid "Sa_ve Query" +msgstr "_Guardar" + +#: templates/view/results.inc:36 lib/Forms/Query.php:317 +msgid "Save" +msgstr "Guardar" + +#: lib/Forms/Query.php:316 +msgid "Save Query" +msgstr "Guardar consulta" + +#: templates/view/results.inc:30 +msgid "Save these results as: " +msgstr "Guardar estos resultados como: " + +#: search.php:55 lib/Block/tree_menu.php:30 +msgid "Search" +msgstr "Buscar" + +#: lib/Forms/Query.php:274 +#, php-format +msgid "Search %s Attribute" +msgstr "Buscar atributo %s" + +#: lib/Forms/Query.php:277 +msgid "Search Attribute" +msgstr "Buscar atributo" + +#: lib/Forms/Query.php:46 lib/Forms/Query.php:131 +msgid "Search Comments" +msgstr "Buscar comentarios" + +#: lib/Forms/Query.php:44 +msgid "Search Owners" +msgstr "Buscar propietarios" + +#: lib/Forms/Query.php:45 +msgid "Search Requester" +msgstr "Buscar solicitante" + +#: search.php:79 +msgid "Search Results" +msgstr "Resultados de la búsqueda" + +#: templates/prevnext.inc:38 +#, php-format +msgid "Search Results: %s of %s" +msgstr "Resultados de la búsqueda: %s de %s" + +#: lib/Forms/Query.php:130 +msgid "Search Summary" +msgstr "Resumen de la búsqueda" + +#: config/.bak/prefs.php.dist:67 +msgid "Search Tickets" +msgstr "Buscar incidencias" + +#: config/.bak/prefs.php.dist:69 +msgid "Select the view to display after login:" +msgstr "Seleccione la vista mostrada al entrar:" + +#: admin/index.php:37 +msgid "Sen_d Reminders" +msgstr "_Enviar recordatorios" + +#: lib/Forms/Admin.php:770 +msgid "Send Reminders" +msgstr "Enviar recordatorios" + +#: lib/Forms/Admin.php:781 +msgid "Send only for this list of ticket ids" +msgstr "Enviar sólo a este conjunto de ids de incidencias" + +#: lib/Forms/Admin.php:539 lib/Forms/Admin.php:541 +msgid "Set Default Priority" +msgstr "Establecer prioridad por omisión" + +#: lib/Forms/Admin.php:428 lib/Forms/Admin.php:430 +msgid "Set Default State" +msgstr "Establecer estado por omisión" + +#: ticket/queue.php:194 ticket/queue.php:203 ticket/queue.php:215 +msgid "Set Queue - Step 1" +msgstr "Establecer cola - Paso 1" + +#: ticket/queue.php:195 ticket/queue.php:204 +msgid "Set Queue - Step 2" +msgstr "Establecer cola - Paso 2" + +#: ticket/queue.php:205 +msgid "Set Queue - Step 3" +msgstr "Establecer cola - Paso 3" + +#: ticket/queue.php:182 +#, php-format +msgid "Set Queue for %s" +msgstr "Establecer cola para %s" + +#: ticket/type.php:136 ticket/type.php:145 +msgid "Set Type - Step 1" +msgstr "Establecer tipo - Paso 1" + +#: ticket/type.php:137 +msgid "Set Type - Step 2" +msgstr "Establecer tipo - Paso 2" + +#: ticket/type.php:124 +#, php-format +msgid "Set Type for %s" +msgstr "Establecer tipo para %s" + +#: lib/Whups.php:272 +msgid "Set _Type" +msgstr "Establecer _tipo" + +#: config/.bak/prefs.php.dist:126 +msgid "Show comments in chronological order, or most recent first?" +msgstr "" +"¿Mostrar los comentarios en orden cronológico o primero los más recientes?" + +#: config/.bak/prefs.php.dist:86 +msgid "Show ticket IDs in the summary view?" +msgstr "¿Mostrar los IDs de incidencias en la vista de resumen?" + +#: config/.bak/prefs.php.dist:78 +msgid "Show tickets you have requested in the summary view?" +msgstr "¿Mostrar las incidencias solicitadas en la vista de resumen?" + +#: config/.bak/templates.php.dist:16 +msgid "Simple HTML Report" +msgstr "Informe HTML simple" + +#: lib/Forms/Admin.php:26 +#, php-format +msgid "" +"Slugs allows direct access to this queue's open tickets by visiting: %s. " +"
Slug names may contain only letters, numbers or the _ (underscore) " +"character." +msgstr "" +"El ID de seguimiento (slugname) permite acceder directamente a las " +"indicencias abiertas de esta cola visitando: %s.
Los IDs de " +"seguimiento sólo pueden contener letras, números o el carácter _ (subrayado)." + +#: templates/view/results.inc:51 templates/view/results.inc:55 +#, php-format +msgid "Sort by %s" +msgstr "Ordenar por %s" + +#: lib/Forms/AddComment.php:20 lib/Forms/AddComment.php:51 +#: lib/Forms/CreateTicket.php:118 lib/Forms/CreateTicket.php:149 +msgid "Spam protection" +msgstr "Protección anti spam" + +#: lib/Whups.php:551 lib/Whups.php:557 lib/Ticket.php:569 lib/Ticket.php:724 +#: lib/Ticket.php:849 lib/Forms/Query.php:192 lib/Forms/EditTicket.php:59 +#: lib/Renderer/Query.php:117 ticket/queue.php:109 ticket/type.php:68 +#: config/.bak/prefs.php.dist:38 +msgid "State" +msgstr "Estado" + +#: lib/Renderer/Comment.php:109 +#, php-format +msgid "State ⇒ %s" +msgstr "Estado ⇒ %s" + +#: lib/Forms/Admin.php:373 lib/Forms/Admin.php:418 +msgid "State Category" +msgstr "Categoría del estado" + +#: lib/Forms/Admin.php:372 lib/Forms/Admin.php:415 lib/Forms/Admin.php:466 +msgid "State Description" +msgstr "Descripción del estado" + +#: lib/Forms/Admin.php:371 lib/Forms/Admin.php:395 lib/Forms/Admin.php:412 +#: lib/Forms/Admin.php:444 lib/Forms/Admin.php:463 +msgid "State Name" +msgstr "Nombre del estado" + +#: lib/Forms/Admin.php:275 lib/Forms/Admin.php:327 +msgid "States for this Type" +msgstr "Estados de este tipo" + +#: templates/ticket/watchers.inc:1 +msgid "Status" +msgstr "Estado" + +#: ticket/create.php:137 +msgid "Submit" +msgstr "Enviar" + +#: admin/index.php:195 +#, php-format +msgid "Successfully Cloned %s to %s." +msgstr "Se ha duplicado correctamente %s como %s." + +#: ticket/type.php:115 +msgid "Successfully changed ticket type." +msgstr "Se ha cambiado correctamente el tipo de incidencia." + +#: lib/Whups.php:549 lib/Whups.php:556 lib/Ticket.php:576 lib/Ticket.php:599 +#: lib/Ticket.php:600 lib/Ticket.php:602 lib/Ticket.php:731 lib/Ticket.php:739 +#: lib/Ticket.php:815 lib/Forms/EditTicket.php:55 +#: lib/Forms/CreateTicket.php:127 lib/Renderer/Query.php:89 +#: ticket/delete.php:34 config/.bak/prefs.php.dist:37 +msgid "Summary" +msgstr "Resumen" + +#: lib/Renderer/Comment.php:51 +#, php-format +msgid "Summary ⇒ %s" +msgstr "Resumen ⇒ %s" + +#: lib/Forms/Search.php:39 +msgid "Summary like" +msgstr "Resumen contiene" + +#: lib/Renderer/Comment.php:78 +#, php-format +msgid "Taken from %s" +msgstr "Obtenido de %s" + +#: lib/Forms/Query.php:128 +msgid "Text" +msgstr "Texto" + +#: lib/Driver/sql.php:77 lib/Driver/sql.php:1142 +msgid "That queue slug is already taken. Please select another." +msgstr "Este ID de seguimiento ya está en uso. Seleccione otro." + +#: view.php:55 lib/Ticket.php:409 lib/Ticket.php:454 +msgid "The VFS backend needs to be configured to enable attachment uploads." +msgstr "Hay que configurar el motor VFS para permitir la carga de adjuntos." + +#: admin/index.php:869 +#, php-format +msgid "The attribute \"%s\" has been added to %s." +msgstr "Se ha añadido el atributo \"%s\" a %s." + +#: admin/index.php:958 +msgid "The attribute has been deleted." +msgstr "Se ha eliminado el atributo." + +#: admin/index.php:927 +msgid "The attribute has been modified." +msgstr "Se ha modificado el atributo." + +#: admin/index.php:967 +msgid "The attribute was not deleted." +msgstr "No se ha eliminado el atributo." + +#: admin/index.php:621 +msgid "The default priority has been set." +msgstr "Se ha establecido la prioridad por omisión." + +#: admin/index.php:490 +msgid "The default state has been set." +msgstr "Se ha establecido el estado por omisión." + +#: admin/index.php:538 +#, php-format +msgid "The priority \"%s\" has been added to %s." +msgstr "Se ha añadido la prioridad \"%s\" a %s." + +#: admin/index.php:639 +msgid "The priority has been deleted." +msgstr "Se ha eliminado la prioridad." + +#: admin/index.php:589 +msgid "The priority has been modified." +msgstr "Se ha modificado la prioridad." + +#: admin/index.php:648 +msgid "The priority was not deleted." +msgstr "No se eliminó la prioridad." + +#: lib/Forms/Query.php:392 +#, php-format +msgid "The query \"%s\" couldn't be deleted: %s" +msgstr "No se pudo eliminar la cola \"%s\": %s" + +#: lib/Forms/Query.php:394 +#, php-format +msgid "The query \"%s\" has been deleted." +msgstr "Se ha eliminado la cola \"%s\"." + +#: lib/Forms/Query.php:359 +#, php-format +msgid "The query couldn't be loaded:" +msgstr "No se pudo cargar la consulta:" + +#: admin/index.php:291 +#, php-format +msgid "The queue \"%s\" has been created." +msgstr "Se ha creado la cola \"%s\"." + +#: admin/index.php:380 +msgid "The queue has been deleted." +msgstr "Se ha eliminado la cola." + +#: admin/index.php:348 +msgid "The queue has been modified." +msgstr "Se ha modificado la cola." + +#: admin/index.php:388 +msgid "The queue was not deleted." +msgstr "No se eliminó la cola." + +#: lib/MIME/Viewer/zip.php:58 +msgid "The requested file does not exist in the Zip attachment." +msgstr "El archivo solicitado no existe en el adjunto Zip." + +#: data.php:26 +msgid "The requested template does not exist." +msgstr "La plantilla solicitada no existe." + +#: admin/index.php:409 +#, php-format +msgid "The state \"%s\" has been added to %s." +msgstr "Se ha añadido el estado \"%s\" a %s." + +#: admin/index.php:508 +msgid "The state has been deleted." +msgstr "Se ha eliminado el estado." + +#: admin/index.php:460 +msgid "The state has been modified." +msgstr "Se ha modificado el estado." + +#: admin/index.php:516 +msgid "The state was not deleted." +msgstr "No se eliminó el estado." + +#: ticket/delete.php:75 +msgid "The ticket was not deleted." +msgstr "No se eliminó la incidencia." + +#: admin/index.php:219 +#, php-format +msgid "The type \"%s\" has been modified." +msgstr "Se ha modificado el tipo \"%s\"." + +#: admin/index.php:265 +msgid "The type has been deleted." +msgstr "Se ha eliminado el tipo." + +#: admin/index.php:273 +msgid "The type was not deleted." +msgstr "No se eliminó el tipo." + +#: admin/index.php:750 +#, php-format +msgid "The version \"%s\" has been added to %s." +msgstr "Se ha añadido la versión \"%s\" a %s." + +#: admin/index.php:836 +msgid "The version has been deleted." +msgstr "Se ha eliminado la versión." + +#: admin/index.php:807 +msgid "The version has been modified." +msgstr "Se ha modificado la versión." + +#: admin/index.php:844 +msgid "The version was not deleted." +msgstr "No se eliminó la versión." + +#: lib/Forms/Admin.php:706 +msgid "There are no attribute types to edit" +msgstr "No hay tipos de atributo a modificar." + +#: lib/Forms/Query.php:277 +msgid "There are no attributes defined." +msgstr "No se han definido atributos." + +#: lib/Block/queuesummary.php:43 +msgid "There are no open tickets." +msgstr "No hay incidencias abiertas." + +#: lib/Forms/Admin.php:503 lib/Forms/Admin.php:549 +msgid "There are no priorities to edit" +msgstr "No hay prioridades a modificar" + +#: lib/Forms/Admin.php:778 +msgid "There are no queues available." +msgstr "No hay colas disponibles." + +#: lib/Forms/Admin.php:53 +msgid "There are no queues to edit" +msgstr "No hay colas a modificar" + +#: lib/Forms/CreateTicket.php:27 +msgid "There are no queues which you can create tickets in." +msgstr "No hay colas a las que pueda añadir incidencias." + +#: lib/Forms/Search.php:34 +msgid "There are no queues which you can search." +msgstr "No hay colas en las que pueda buscar." + +#: lib/Forms/Admin.php:391 lib/Forms/Admin.php:440 +msgid "There are no states to edit" +msgstr "No hay estados a modificar" + +#: lib/Forms/CreateTicket.php:62 +msgid "" +"There are no ticket types associated with this queue; until there are, you " +"cannot create any tickets in this queue." +msgstr "" +"No hay tipos de incidencias asociados a esta cola; mientras no los haya no " +"podrá añadir incidencias a la misma." + +#: lib/Forms/Admin.php:246 +msgid "There are no types to edit" +msgstr "No hay tipos a modificar" + +#: lib/Forms/Admin.php:208 +msgid "There are no users responsible for this queue." +msgstr "No hay usuarios encargados de esta cola." + +#: lib/Forms/CreateTicket.php:207 +msgid "There are no users to which this ticket can be assigned." +msgstr "No hay usuarios a los que asignar esta incidencia." + +#: lib/Forms/Admin.php:614 +msgid "There are no versions to edit" +msgstr "No hay versiones a modificar" + +#: lib/Reports.php:161 +msgid "There is no data for this report." +msgstr "No hay datos para este informe." + +#: admin/index.php:682 +#, php-format +msgid "There was an error adding \"%s\" to the responsible list for \"%s\":" +msgstr "" +"Se produjo un error al añadir a \"%s\" a la lista de encargados de \"%s\":" + +#: admin/index.php:874 +msgid "There was an error creating the attribute:" +msgstr "Se produjo un error al crear el atributo:" + +#: admin/index.php:543 +msgid "There was an error creating the priority:" +msgstr "Se produjo un error al crear la prioridad:" + +#: admin/index.php:300 +msgid "There was an error creating the queue:" +msgstr "Se produjo un error al crear la cola:" + +#: admin/index.php:413 +msgid "There was an error creating the state:" +msgstr "Se produjo un error al crear el estado:" + +#: admin/index.php:754 +msgid "There was an error creating the version:" +msgstr "Se produjo un error al crear la versión:" + +#: admin/index.php:962 +msgid "There was an error deleting the attribute:" +msgstr "Se produjo un error al eliminar el atributo:" + +#: admin/index.php:643 +msgid "There was an error deleting the priority:" +msgstr "Se produjo un error al eliminar la prioridad:" + +#: admin/index.php:383 +msgid "There was an error deleting the queue:" +msgstr "Se produjo un error al eliminar la cola:" + +#: admin/index.php:511 +msgid "There was an error deleting the state:" +msgstr "Se produjo un error al eliminar el estado:" + +#: ticket/delete.php:72 +#, php-format +msgid "There was an error deleting the ticket: %s" +msgstr "Se produjo un error al eliminar la incidencia: %s" + +#: admin/index.php:268 +msgid "There was an error deleting the type:" +msgstr "Se produjo un error al eliminar el tipo:" + +#: admin/index.php:839 +msgid "There was an error deleting the version:" +msgstr "Se produjo un error al eliminar la versión:" + +#: admin/index.php:935 +msgid "There was an error editing the attribute:" +msgstr "Se produjo un error al modificar el atributo:" + +#: admin/index.php:595 +msgid "There was an error editing the priority:" +msgstr "Se produjo un error al modificar la prioridad:" + +#: admin/index.php:364 +msgid "There was an error editing the queue:" +msgstr "Se produjo un error al modificar la cola:" + +#: admin/index.php:465 +msgid "There was an error editing the state:" +msgstr "Se produjo un error al modificar el estado:" + +#: admin/index.php:813 +msgid "There was an error editing the version:" +msgstr "Se produjo un error al modificar la versión:" + +#: lib/Forms/Admin.php:168 +#, php-format +msgid "There was an error listing users: %s; %s" +msgstr "Se produjo un error al listar los usuarios: %s; %s" + +#: queue/index.php:52 +#, php-format +msgid "There was an error locating tickets in this queue: " +msgstr "Se produjo un error al localizar las incidencias de esta cola:" + +#: admin/index.php:215 +msgid "There was an error modifying the type:" +msgstr "Se produjo un error al modificar el tipo:" + +#: search.php:72 +#, php-format +msgid "There was an error performing your search: %s" +msgstr "Se produjo un error al realizar la búsqueda: %s" + +#: admin/index.php:725 +#, php-format +msgid "" +"There was an error removing \"%s\" from the responsible list for \"%s\":" +msgstr "" +"Se produjo un error al eliminar a \"%s\" de la lista de encargados de \"%s\":" + +#: admin/index.php:617 +msgid "There was an error setting the default priority:" +msgstr "Se produjo un error al establecer la prioridad por omisión:" + +#: admin/index.php:486 +msgid "There was an error setting the default state:" +msgstr "Se produjo un error al establecer el estado por omisión:" + +#: data.php:29 +msgid "This is not a search results template." +msgstr "Ésta no es una plantilla de resultados de búsqueda." + +#: lib/Forms/CreateTicket.php:77 ticket/queue.php:74 +msgid "" +"This queue requires that you specify a version, but there are no versions " +"associated with it. Until versions are created for this queue, you will not " +"be able to create tickets." +msgstr "" +"Esta cola precisa que indique una versión, pero no se le han asociado " +"versiones. Hasta que no se creen versiones para esta cola, no podrá generar " +"incidencias." + +#: lib/Ticket.php:596 lib/Ticket.php:738 +msgid "Ticket" +msgstr "Incidencia" + +#: ticket/delete.php:68 +#, php-format +msgid "Ticket %d has been deleted." +msgstr "Se ha eliminado la incidencia %d." + +#: lib/api.php:931 +#, php-format +msgid "Ticket %s - %s" +msgstr "Incidencia %s - %s" + +#: lib/Driver/sql.php:954 +#, php-format +msgid "Ticket %s was not found." +msgstr "No se encontró la incidencia %s." + +#: search.php:98 +msgid "Ticket Search" +msgstr "Búsqueda de incidencias" + +#: lib/Forms/CreateTicket.php:122 +msgid "Ticket State" +msgstr "Estado de la incidencia" + +#: templates/reports/stats.inc:3 +msgid "Ticket Stats" +msgstr "Estadísticas de incidencias" + +#: lib/Forms/CreateTicket.php:70 +msgid "Ticket Type" +msgstr "Tipo de incidencia" + +#: lib/Forms/Admin.php:89 +msgid "Ticket Types associated with this Queue" +msgstr "Tipos de incidencias asociadas a esta cola" + +#: lib/Ticket.php:592 +#, php-format +msgid "Ticket URL: %s" +msgstr "URL de la incidencia: %s" + +#: ticket/update.php:96 +msgid "Ticket Updated" +msgstr "Incidencia actualizada" + +#: lib/api.php:952 +msgid "Tickets" +msgstr "Incidencias" + +#: lib/Whups.php:558 lib/Ticket.php:568 lib/Ticket.php:723 lib/Ticket.php:845 +#: lib/Forms/Query.php:173 lib/Renderer/Query.php:108 ticket/queue.php:82 +#: config/.bak/prefs.php.dist:39 +msgid "Type" +msgstr "Tipo" + +#: lib/Renderer/Comment.php:104 +#, php-format +msgid "Type ⇒ %s" +msgstr "Tipo ⇒ %s" + +#: lib/Forms/Admin.php:226 lib/Forms/Admin.php:270 lib/Forms/Admin.php:323 +msgid "Type Description" +msgstr "Descripción del tipo" + +#: lib/Forms/Admin.php:225 lib/Forms/Admin.php:249 lib/Forms/Admin.php:267 +#: lib/Forms/Admin.php:320 +msgid "Type Name" +msgstr "Nombre del tipo" + +#: lib/Ticket.php:860 +msgid "Unassigned" +msgstr "Sin asignar" + +#: lib/Block/unassigned.php:3 lib/Block/unassigned.php:24 +msgid "Unassigned Tickets" +msgstr "Incidencias sin asignar" + +#: lib/Forms/Admin.php:789 +msgid "Unassigned tickets" +msgstr "Incidencias sin asignar" + +#: lib/Driver.php:194 +msgid "Unconfirmed" +msgstr "Sin confirmar" + +#: lib/Renderer/Query.php:141 lib/Renderer/Query.php:181 +#, php-format +msgid "Unknown node type %s" +msgstr "Nodo tipo %s desconocido" + +#: lib/api.php:899 +msgid "Update" +msgstr "Actualizar" + +#: ticket/update.php:110 +#, php-format +msgid "Update %s" +msgstr "Actualizar %s" + +#: templates/admin/mtmatrix.inc:29 +msgid "Update Associations" +msgstr "Actualizar asociaciones" + +#: lib/Whups.php:564 lib/Ticket.php:880 +msgid "Updated" +msgstr "Actualizada" + +#: lib/Ticket.php:575 lib/Ticket.php:597 +msgid "Updated By" +msgstr "Actualizado por" + +#: lib/Forms/Admin.php:167 lib/Forms/Admin.php:177 lib/Forms/Admin.php:180 +msgid "User" +msgstr "Usuario" + +#: lib/Forms/Query.php:42 +msgid "User ID" +msgstr "ID de usuario" + +#: lib/Forms/Admin.php:109 +msgid "Users responsible for this Queue" +msgstr "Usuarios encargados de esta cola" + +#: lib/Forms/Admin.php:212 +msgid "Users responsible for this queue" +msgstr "Usuarios encargados de esta cola" + +#: lib/Ticket.php:567 lib/Ticket.php:722 lib/Forms/Query.php:184 +#: lib/Renderer/Query.php:102 config/.bak/prefs.php.dist:42 +msgid "Version" +msgstr "Versión" + +#: lib/Forms/Admin.php:594 lib/Forms/Admin.php:640 lib/Forms/Admin.php:663 +msgid "Version Description" +msgstr "Descripción de la versión" + +#: lib/Forms/Admin.php:593 lib/Forms/Admin.php:618 lib/Forms/Admin.php:637 +#: lib/Forms/Admin.php:660 +msgid "Version Name" +msgstr "Nombre de la versión" + +#: lib/Forms/AddComment.php:38 ticket/queue.php:45 ticket/type.php:46 +msgid "Viewable only by members of" +msgstr "Visible sólo por los miembros de" + +#: lib/Forms/AddComment.php:25 +msgid "Watch this ticket" +msgstr "Observar esta incidencia" + +#: ticket/watch.php:77 +#, php-format +msgid "Watchers for %s" +msgstr "Observadores de %s" + +#: config/.bak/prefs.php.dist:95 +msgid "Weekday Day Month" +msgstr "Día de la semana Día Mes" + +#: config/.bak/prefs.php.dist:96 +msgid "Weekday Day Month HH:MM:SS TZ" +msgstr "Día de la semana Día Mes HH:MM:SS TZ" + +#: lib/Forms/Query.php:378 lib/Forms/Admin.php:142 lib/Forms/Admin.php:334 +#: lib/Forms/Admin.php:469 lib/Forms/Admin.php:580 lib/Forms/Admin.php:666 +#: lib/Forms/Admin.php:758 ticket/delete.php:37 +msgid "Yes" +msgstr "Sí" + +#: view.php:51 +#, php-format +msgid "You are not allowed to view ticket %d." +msgstr "No se le permite ver la incidencia %d." + +#: lib/Driver/sql.php:963 +#, php-format +msgid "You do not have permission to access this ticket (%s)." +msgstr "No dispone de permisos para acceder a esta incidencia (%s)." + +#: lib/api.php:546 +msgid "You do not have permission to update this ticket." +msgstr "No dispone de permisos para actualizar esta incidencia." + +#: lib/Block/myrequests.php:46 +msgid "You have no open requests." +msgstr "No ha abierto solicitudes." + +#: lib/Forms/Query.php:348 lib/Block/query.php:28 +msgid "You have no saved queries." +msgstr "No tiene consultas guardadas." + +#: lib/Whups.php:591 +msgid "You must select at least one queue to send reminders for." +msgstr "" +"Tiene que seleccionar al menos una cola de la que enviar recordatorios." + +#: lib/Forms/AddComment.php:18 lib/Forms/CreateTicket.php:116 +msgid "Your Email Address" +msgstr "Su dirección de correo" + +#: ticket/create.php:53 +#, php-format +msgid "" +"Your ticket ID is %s. An appropriate person has been notified of this " +"request." +msgstr "" +"El ID de su incidencia es %s. Se ha notificado su solicitud a la persona " +"adecuada." + +#: lib/Mail.php:198 +msgid "[ Could not render body of message. ]" +msgstr "[ No se pudo generar el cuerpo del mensaje. ]" + +#: lib/Whups.php:654 +msgid "_Admin" +msgstr "_Administrar" + +#: lib/Whups.php:263 +msgid "_Comment" +msgstr "_Comentario" + +#: lib/Whups.php:273 +msgid "_Delete" +msgstr "_Eliminar" + +#: lib/Query.php:205 +msgid "_Delete Query" +msgstr "_Eliminar consulta" + +#: lib/Query.php:186 +msgid "_Edit Query" +msgstr "Modi_ficar" + +#: admin/index.php:34 +msgid "_Edit Queues" +msgstr "Modificar co_las" + +#: templates/menu.inc:5 +msgid "_Go" +msgstr "_Ir" + +#: query.php:140 +msgid "_Group Criteria" +msgstr "Criterios de gru_pos" + +#: lib/Whups.php:259 +msgid "_History" +msgstr "_Historial" + +#: lib/Query.php:199 +msgid "_Load Query" +msgstr "Ca_rgar" + +#: lib/Whups.php:645 +#, php-format +msgid "_My %s" +msgstr "_Mis %s" + +#: lib/Whups.php:648 +msgid "_New Ticket" +msgstr "_Añadir" + +#: query.php:138 +msgid "_Property Criteria" +msgstr "Criterios de prop_iedades" + +#: lib/Whups.php:649 +msgid "_Query Builder" +msgstr "_Consultas" + +#: lib/Whups.php:650 +msgid "_Reports" +msgstr "_Informes" + +#: lib/Whups.php:647 +msgid "_Search" +msgstr "_Buscar" + +#: query.php:142 +msgid "_Text Criteria" +msgstr "Criterios de te_xto" + +#: lib/Whups.php:261 +msgid "_Update" +msgstr "Act_ualizar" + +#: query.php:139 +msgid "_User Criteria" +msgstr "Criterios de _usuarios" + +#: lib/Whups.php:265 +msgid "_Watch" +msgstr "_Observar" + +#: lib/Renderer/Query.php:161 +msgid "contains (case insensitive) substring" +msgstr "contenga la subcadena (sin diferenciar may. de min.)" + +#: lib/Renderer/Query.php:165 +msgid "contains (case sensitive) substring" +msgstr "contenga la subcadena (diferenciando may. de min.)" + +#: lib/Renderer/Query.php:169 +msgid "contains the word" +msgstr "contenga la palabra" + +#: lib/Mail.php:88 lib/Mail.php:107 lib/Mail.php:133 +msgid "current user:" +msgstr "usuario actual:" + +#: lib/api.php:940 +msgid "estimated time" +msgstr "tiempo estimado" + +#: lib/Renderer/Query.php:157 +msgid "is" +msgstr "es" + +#: lib/Renderer/Query.php:149 +msgid "is greater than" +msgstr "es mayor que" + +#: lib/Renderer/Query.php:153 +msgid "is less than" +msgstr "es menor que" + +#: lib/Renderer/Query.php:173 +msgid "matches the pattern" +msgstr "cumple el patrón" diff --git a/whups/po/fi_FI.po b/whups/po/fi_FI.po new file mode 100644 index 000000000..8d48287cc --- /dev/null +++ b/whups/po/fi_FI.po @@ -0,0 +1,2484 @@ +# Finnish translation for Whups. +# Copyright +# Leena Heino , 2004-2008. +# +msgid "" +msgstr "" +"Project-Id-Version: Whups 1.0-cvs\n" +"Report-Msgid-Bugs-To: dev@lists.horde.org\n" +"POT-Creation-Date: 2008-09-24 17:02+0300\n" +"PO-Revision-Date: 2008-09-12 12:59+0200\n" +"Last-Translator: Leena Heino \n" +"Language-Team: Finnish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: admin/index.php:745 +#, php-format +msgid "\"%s\" is no longer among those responsible for \"%s\"" +msgstr "\"%s\" ei ole enää tästä asiasta vastuullisten joukossa \"%s\"" + +#: templates/menu.inc:5 +msgid "#Id" +msgstr "#Id" + +#: templates/ticket/watchers.inc:3 +#, php-format +msgid "%d people watching, %d people responsible" +msgstr "%d henkilö tarkkailemassa, %d henkilöä vastuullisena" + +#: queue/rss.php:96 +#, php-format +msgid "%s %s tickets in %s" +msgstr "%s %s tikettiä jonossa %s" + +#: queue/rss.php:100 +#, php-format +msgid "%s %s tickets in all queues" +msgstr "%s %s tikettiä kaikissa jonoissa" + +#: lib/Renderer/Comment.php:120 +#, php-format +msgid "%s ⇒ %s" +msgstr "%s ⇒ %s" + +#: lib/Driver.php:497 +#, php-format +msgid "%s (%s) wrote:" +msgstr "%s (%s) kirjoitti:" + +#: admin/index.php:700 +#, php-format +msgid "%s added to those responsible for \"%s\"" +msgstr "%s lisäsi vastuulliset \"%s\"" + +#: templates/reports/stats.inc:15 +#, php-format +msgid "%s days" +msgstr "%s päivää" + +#: queue/rss.php:104 +#, php-format +msgid "%s tickets in %s" +msgstr "%s tikettiä jonossa %s" + +#: queue/rss.php:108 +#, php-format +msgid "%s tickets in all queues" +msgstr "%s tikettiä kaikissa jonoissa" + +#: ticket/watch.php:60 +#, php-format +msgid "%s will be notified when this ticket is updated." +msgstr "%s:lle ilmoitetaan kun tätä tikettiä on päivitetty." + +#: ticket/watch.php:72 +#, php-format +msgid "%s will no longer receive updates for this ticket." +msgstr "%s ei enää saa tietoja koskien tätä tikettiä." + +#: admin/index.php:109 +msgid "- Stage 1" +msgstr "- Vaihe 1" + +#: admin/index.php:114 +msgid "- Stage 2" +msgstr "- Vaihe 2" + +#: scripts/mail-filter.php:172 +msgid "--queue-name or --queue-id must specify a valid and public queue." +msgstr "" +"--queue-name tai --queue-id määritellä jonon, joka on kelvollinen ja " +"julkinen." + +#: templates/prevnext.inc:16 +msgid "<>" +msgstr "Viimeinen>>" + +#: lib/Forms/Query.php:411 +msgid "Load Query" +msgstr "Lataa kysely" + +#: lib/Forms/VarRenderer.php:46 +msgid "Loading..." +msgstr "Ladataan..." + +#: config/prefs.php.dist:106 +msgid "MM/DD/YY" +msgstr "MM/PP/VV" + +#: config/prefs.php.dist:107 +msgid "MM/DD/YY HH:MM:SS" +msgstr "MM/PP/VV TT:MM:SS" + +#: lib/Forms/Admin/Type.php:193 +#, php-format +msgid "Make a clone of %s" +msgstr "Tee kloonaus %s:stä" + +#: lib/Forms/AddComment.php:38 lib/Forms/EditTicket.php:167 +msgid "Make this comment visible only to members of a group?" +msgstr "Laita tämä kommentti näkymään vain ryhmän jäsenille." + +#: lib/Forms/Query.php:274 +msgid "Match" +msgstr "Täsmää" + +#: lib/Forms/Query.php:45 lib/Forms/Query.php:129 lib/Forms/Query.php:275 +msgid "Match Operator" +msgstr "Täsmäävä operaattori" + +#: lib/Query.php:167 +msgid "Match Pattern" +msgstr "Täsmää malliin" + +#: lib/Query.php:166 +msgid "Match Word" +msgstr "Täsmäävä sana" + +#: reports.php:30 +msgid "Maximum time a ticket is unresolved" +msgstr "Pisin aika, jonka tiketti on ollut selvittämättä" + +#: lib/Block/tree_menu.php:3 +msgid "Menu List" +msgstr "Valikkolista" + +#: reports.php:31 +msgid "Minimum time a ticket is unresolved" +msgstr "Lyhin aika, jonka tiketti on ollut selvittämättä" + +#: config/prefs.php.dist:146 +msgid "Most recent first" +msgstr "Tuorein ensin" + +#: templates/prefs/sourceselect.inc:312 +msgid "Move down" +msgstr "Siirrä alas" + +#: templates/prefs/sourceselect.inc:310 +msgid "Move up" +msgstr "Siirrä ylös" + +#: ticket/queue.php:181 +#, php-format +msgid "Moved ticket %d to \"%s\"" +msgstr "Siirrettiin tiketti %d \"%s\":lle" + +#: mybugs.php:54 +#, php-format +msgid "My %s" +msgstr "Minun %s" + +#: mybugs_edit.php:33 +#, php-format +msgid "My %s :: Add Content" +msgstr "Minun %s :: Lisää sisältö" + +#: search.php:178 lib/Block/myqueries.php:3 lib/Block/myqueries.php:24 +msgid "My Queries" +msgstr "Minun kyselyt" + +#: lib/Block/myrequests.php:3 lib/Block/myrequests.php:24 +msgid "My Requests" +msgstr "Minun pyynnöt" + +#: lib/Block/mytickets.php:3 lib/Block/mytickets.php:24 +#: config/prefs.php.dist:75 +msgid "My Tickets" +msgstr "Minun tiketit" + +#: lib/api.php:884 +msgid "My tickets by assignment date" +msgstr "Minun tiketit määräyspäivän mukaan" + +#: lib/api.php:883 +msgid "My tickets by creation date" +msgstr "Minun tiketit luontipäivän mukaan" + +#: lib/api.php:885 +msgid "My tickets by due date" +msgstr "Minun tiketit määräpäivän mukaan" + +#: lib/api.php:886 +msgid "My tickets by resolution date" +msgstr "Minun tiketit selvityspäivän mukaan" + +#: lib/Forms/Query.php:422 +msgid "Name" +msgstr "Nimi" + +#: lib/Forms/Admin/Type.php:198 +msgid "Name of the cloned copy" +msgstr "Kloonatun kopion nimi" + +#: lib/Query.php:216 +msgid "Ne_w Query" +msgstr "Uu_si kysely" + +#: lib/Driver.php:197 +msgid "New" +msgstr "Uusi" + +#: lib/Ticket.php:618 lib/Ticket.php:711 +msgid "New Attachment" +msgstr "Uusi liite" + +#: lib/Renderer/Comment.php:58 lib/Renderer/Comment.php:62 +#, php-format +msgid "New Attachment: %s" +msgstr "Uusi liite: %s" + +#: ticket/queue.php:32 +msgid "New Queue" +msgstr "Uusi jono" + +#: ticket/create.php:67 lib/Block/tree_menu.php:21 +msgid "New Ticket" +msgstr "Uusi tiketti" + +#: ticket/type.php:31 +msgid "New Type" +msgstr "Uuti tyyppi" + +#: templates/prevnext.inc:26 +msgid "Next>" +msgstr "Seuraava>" + +#: ticket/delete.php:33 lib/Forms/Query.php:449 +#: lib/Forms/Admin/Attribute.php:149 lib/Forms/Admin/Priority.php:121 +#: lib/Forms/Admin/Queue.php:174 lib/Forms/Admin/Reply.php:110 +#: lib/Forms/Admin/State.php:121 lib/Forms/Admin/Type.php:176 +#: lib/Forms/Admin/Version.php:96 +msgid "No" +msgstr "Ei" + +#: lib/Ticket.php:100 +#, php-format +msgid "" +"No priority for this ticket and no default priority for ticket type \"%s\" " +"specified." +msgstr "" +"Tälle tiketille tai tikettityypille \"%s\" ei ole määritelty oletustyyppiä." + +#: lib/Block/myqueries.php:46 +msgid "No queries have been saved." +msgstr "Ei kyselyitä talletettuna." + +#: lib/Driver/sql.php:553 lib/Block/query.php:62 +msgid "No query to run" +msgstr "Ei kyselyitä ajettavaksi" + +#: lib/Block/queuecontents.php:25 +msgid "No queues available." +msgstr "Ei jonoja saatavilla." + +#: lib/Ticket.php:92 +#, php-format +msgid "" +"No state for this ticket and no default state for ticket type \"%s\" " +"specified." +msgstr "" +"Tälle tikettityypille \"%s\" ei ole määritelty tilatietoja eikä " +"oletustilatietoja." + +#: reports.php:35 +msgid "No stats available." +msgstr "Tilastoja ei ole saatavilla." + +#: lib/Driver.php:533 +#, php-format +msgid "No such backend \"%s\" found" +msgstr "Taustajärjestelmää \"%s\" ei löytynyt" + +#: lib/View.php:33 +#, php-format +msgid "No such view \"%s\" found" +msgstr "Näkymää \"%s\" ei löytynyt" + +#: lib/Block/mytickets.php:45 +msgid "No tickets are assigned to you." +msgstr "Sinulle ei ole määrätty tikettejä." + +#: lib/Block/unassigned.php:45 +msgid "No tickets are unassigned!" +msgstr "Määrittelemättömiä tikettejä ei ole." + +#: lib/Block/queuecontents.php:62 lib/Block/queuecontents.php:73 +msgid "No tickets in queue." +msgstr "Ei tikettejä tässä jonossa" + +#: lib/Whups.php:716 +msgid "No tickets matched your search criteria." +msgstr "Yksikään tiketti ei vastannut hakukriteetereitäsi." + +#: lib/Ticket.php:84 +#, php-format +msgid "No type for this ticket and no default type for queue \"%s\" specified." +msgstr "" +"Tälle tiketille tai tälle jonolle \"%s\" ei ole määritelty oletustyyppiä." + +#: templates/prefs/sourceselect.inc:35 lib/Reports.php:67 +msgid "None" +msgstr "Ei mitään" + +#: lib/Renderer/Query.php:79 lib/Forms/Query.php:26 +msgid "Not" +msgstr "Ei" + +#: config/prefs.php.dist:17 +msgid "Notification Options" +msgstr "Ilmoituksen asetukset" + +#: config/prefs.php.dist:117 +msgid "Only notify me of ticket changes from other users?" +msgstr "Ilmoita minulle vain jos muut muuttavat tikettejä?" + +#: config/prefs.php.dist:126 +msgid "Only notify me of ticket changes with comments?" +msgstr "Ilmoita minulle vain jos muut muuttavat kommentteja?" + +#: queue/rss.php:43 +msgid "Open" +msgstr "Avoin" + +#: lib/Block/queuesummary.php:49 +msgid "Open Tickets" +msgstr "Avoimet tiketit" + +#: reports.php:23 +msgid "Open Tickets by Owner" +msgstr "Avoimet tiketit omistajan mukaan" + +#: reports.php:21 +msgid "Open Tickets by Priority" +msgstr "Avoimet tiketit prioriteetin mukan" + +#: reports.php:18 +msgid "Open Tickets by Queue" +msgstr "Avoiment tiketit jonon mukaan" + +#: reports.php:22 +msgid "Open Tickets by Requester" +msgstr "Avoimet tiketit asiakkaan mukaan" + +#: reports.php:19 +msgid "Open Tickets by State" +msgstr "Avoimet tiketit tilan mukaan" + +#: reports.php:20 +msgid "Open Tickets by Type" +msgstr "Avoimet tiketit tyypin mukaan" + +#: lib/Block/queuecontents.php:47 +#, php-format +msgid "Open Tickets in %s" +msgstr "Avoimet tiketit jonossa %s" + +#: queue/index.php:43 queue/index.php:57 queue/rss.php:119 +#, php-format +msgid "Open tickets in %s" +msgstr "Avoimet tiketit jonossa %s" + +#: queue/rss.php:121 +msgid "Open tickets in all queues." +msgstr "Avoimia tikettejä kaikissa jonoissa" + +#: lib/Renderer/Query.php:78 lib/Forms/Query.php:25 +msgid "Or" +msgstr "Tai" + +#: lib/Ticket.php:617 lib/Ticket.php:701 lib/Ticket.php:702 lib/Ticket.php:705 +#: lib/Ticket.php:812 lib/Ticket.php:833 lib/Ticket.php:958 lib/Whups.php:681 +#: lib/Renderer/Query.php:84 lib/Forms/CreateTicket.php:225 +#: lib/Forms/CreateTicket.php:243 lib/Forms/EditTicket.php:104 +msgid "Owners" +msgstr "Omistajat" + +#: lib/Whups.php:866 +#, php-format +msgid "Permanently delete %s?" +msgstr "Poistetaanko pysyvästi %s?" + +#: ticket/delete.php:51 ticket/deleteAttachment.php:21 ticket/queue.php:131 +#: ticket/type.php:74 ticket/update.php:22 +msgid "Permission Denied" +msgstr "Käyttö kielletty" + +#: ticket/delete.php:40 lib/Forms/EditTicket.php:197 +msgid "Permission Denied." +msgstr "Käyttö kielletty." + +#: lib/Forms/Query.php:459 query/index.php:31 query/run.php:44 +#, php-format +msgid "Permission denied." +msgstr "Käyttö kielletty." + +#: lib/Imple/ContactAutoCompleter.php:227 +msgid "Please resolve ambiguous or invalid addresses." +msgstr "Korjaa epäselvä tai virheellinen osoite." + +#: lib/Forms/Admin/Type.php:93 lib/Forms/Admin/Type.php:171 +msgid "Priorities for this Type" +msgstr "Prioriteetit tälle tyypille" + +#: ticket/queue.php:117 ticket/type.php:66 lib/Ticket.php:610 +#: lib/Ticket.php:807 lib/Ticket.php:953 lib/Whups.php:669 lib/Whups.php:678 +#: lib/Renderer/Query.php:125 lib/Forms/CreateTicket.php:147 +#: lib/Forms/EditTicket.php:68 lib/Forms/Query.php:198 +#: config/prefs.php.dist:49 +msgid "Priority" +msgstr "Prioriteetti" + +#: lib/Renderer/Comment.php:115 +#, php-format +msgid "Priority ⇒ %s" +msgstr "Prioriteetti &rJärj; %s" + +#: lib/Forms/Admin/Priority.php:24 lib/Forms/Admin/Priority.php:70 +#: lib/Forms/Admin/Priority.php:118 +msgid "Priority Description" +msgstr "Prioriteetin kuvaus" + +#: lib/Forms/Admin/Priority.php:23 lib/Forms/Admin/Priority.php:48 +#: lib/Forms/Admin/Priority.php:67 lib/Forms/Admin/Priority.php:94 +#: lib/Forms/Admin/Priority.php:115 +msgid "Priority Name" +msgstr "Prioriteetin nimi" + +#: search.php:178 +msgid "Public Queries" +msgstr "Julkiset kyselyt" + +#: query/index.php:172 +msgid "Query Builder" +msgstr "Kyselynrakentaja" + +#: lib/Forms/Query.php:387 +msgid "Query Name" +msgstr "Kyselyn nimi" + +#: lib/Forms/QueryParameterForm.php:20 +msgid "Query Parameters" +msgstr "Kyselyn parametrit" + +#: lib/Block/query.php:3 lib/Block/query.php:49 query/rss.php:63 +#: query/run.php:79 +msgid "Query Results" +msgstr "Kyselyn tulokset" + +#: lib/Forms/Query.php:389 +msgid "Query Slug" +msgstr "Kyselyn luoti" + +#: lib/Block/query.php:33 +msgid "Query to run" +msgstr "Ajettava kysely" + +#: lib/Ticket.php:606 lib/Ticket.php:803 lib/Ticket.php:918 lib/Ticket.php:923 +#: lib/Whups.php:679 lib/Renderer/Query.php:94 lib/Forms/Query.php:181 +#: lib/Forms/Search.php:40 lib/Block/queuecontents.php:32 +#: lib/Block/queuesummary.php:49 config/prefs.php.dist:50 +msgid "Queue" +msgstr "Jono" + +#: lib/Renderer/Comment.php:100 +#, php-format +msgid "Queue ⇒ %s" +msgstr "Jono &rJärj; %s" + +#: lib/Block/queuecontents.php:3 lib/Block/queuecontents.php:49 +msgid "Queue Contents" +msgstr "Jonojen sisältö" + +#: lib/Forms/Admin/Queue.php:24 lib/Forms/Admin/Queue.php:89 +#: lib/Forms/Admin/Queue.php:170 +msgid "Queue Description" +msgstr "Jonon kuvaus" + +#: lib/Forms/Admin/Queue.php:30 lib/Forms/Admin/Queue.php:97 +msgid "Queue Email" +msgstr "Jonon sähköpostiosoite" + +#: lib/Forms/CreateTicket.php:34 lib/Forms/CreateTicket.php:45 +#: lib/Forms/Admin/Queue.php:23 lib/Forms/Admin/Queue.php:60 +#: lib/Forms/Admin/Queue.php:85 lib/Forms/Admin/Queue.php:166 +msgid "Queue Name" +msgstr "Jonon nimi" + +#: lib/Forms/Admin/Queue.php:26 lib/Forms/Admin/Queue.php:93 +msgid "Queue Slug" +msgstr "Jono luoti" + +#: lib/Block/queuesummary.php:3 lib/Block/queuesummary.php:24 +msgid "Queue Summary" +msgstr "Jonon yhteenveto" + +#: ticket/queue.php:86 lib/Ticket.php:932 lib/Ticket.php:938 +#: lib/Forms/CreateTicket.php:93 +msgid "Queue Version" +msgstr "Jonon versio" + +#: admin/index.php:35 +msgid "Queue/Type Matri_x" +msgstr "Jono/Tyyppi matrii_si" + +#: templates/admin/mtmatrix.inc:6 +msgid "Queue/Type Matrix" +msgstr "Jono/Tyyppi matriisi" + +#: lib/api.php:163 lib/api.php:781 +msgid "Queues" +msgstr "Jonot" + +#: templates/prevnext.inc:32 +msgid "Re_turn to Search Results" +msgstr "Pa_laa haun tulokset" + +#: lib/Forms/Admin/Attribute.php:147 +msgid "Really delete this attribute? This may cause data problems!" +msgstr "" +"Poistetaanko todella tämä atribuutti? Tämä voi aiheuttaa ongelmia tiedoissa!" + +#: lib/Forms/Admin/Reply.php:108 +msgid "Really delete this form reply?" +msgstr "Poistetaanko todella tämä lomakevastaus?" + +#: lib/Forms/Admin/Priority.php:122 +msgid "Really delete this priority? This may cause data problems!" +msgstr "" +"Poistetaanko todella tämä prioriteetti? Tämä voi aiheuttaa ongelmia " +"tiedoissa!" + +#: lib/Forms/Query.php:450 +msgid "Really delete this query? This operation is not undoable." +msgstr "Poistetaanko todella tämä kysely? Tätä operaatio ei voi perua." + +#: lib/Forms/Admin/Queue.php:176 +msgid "Really delete this queue? This may cause data problems!" +msgstr "Poistetaanko todella tämä jono? Tämä voi aiheuttaa ongelmia tiedoissa!" + +#: lib/Forms/Admin/State.php:122 +msgid "Really delete this state? This may cause data problems!" +msgstr "" +"Poistetaanko todella tämä tila? Tämä voi aiheuttaa ongelmia tiedoissa!" + +#: ticket/delete.php:34 +msgid "" +"Really delete this ticket? It will NOT be archived, and will be gone forever." +msgstr "" +"Poistetaanko todella tämä tiketti? Sitä ei arkistoida, joten se häviää " +"lopullisesti." + +#: lib/Forms/Admin/Type.php:178 +msgid "Really delete this type? This may cause data problems!" +msgstr "" +"Poistetaanko todella tämä tyyppi? Tämä voi aiheuttaa ongelmia tiedoissa!" + +#: lib/Forms/Admin/Version.php:97 +msgid "Really delete this version? This may cause data problems!" +msgstr "" +"Poistetaanko todella tämä versio? Tämä voi aiheuttaa ongelmia tiedoissa!" + +#: lib/Mail.php:217 +msgid "Received message:" +msgstr "Saatu vastaus:" + +#: search.php:162 +msgid "Refine Search" +msgstr "Tarkenna hakua" + +#: admin/index.php:1170 +msgid "Reminders were sent." +msgstr "Muistutukset lähetettiin." + +#: lib/Forms/Admin/User.php:59 +msgid "Remove User" +msgstr "Poista käyttäjä" + +#: ticket/watch.php:49 +msgid "Remove Watcher" +msgstr "Poista tarkkailija" + +#: templates/prefs/sourceselect.inc:300 +msgid "Remove source" +msgstr "Poista lähde" + +#: lib/Renderer/Comment.php:95 +msgid "Reply to this comment" +msgstr "Vastaa tähän kommenttiin" + +#: reports.php:40 +msgid "Reports" +msgstr "Raportit" + +#: lib/Ticket.php:965 lib/Whups.php:680 lib/Renderer/Query.php:86 +msgid "Requester" +msgstr "Asiakas" + +#: lib/Forms/Admin/Attribute.php:28 lib/Forms/Admin/Attribute.php:99 +msgid "Required Attribute?" +msgstr "Vaadittu atribuutti?" + +#: lib/Driver.php:199 lib/Ticket.php:991 lib/Whups.php:685 lib/api.php:927 +#: lib/Renderer/Query.php:151 config/prefs.php.dist:54 +msgid "Resolved" +msgstr "Selvitetty" + +#: lib/Forms/Query.php:330 lib/Forms/Search.php:60 +msgid "Resolved from" +msgstr "Selvitetty alkaen" + +#: lib/Forms/Query.php:331 +msgid "Resolved to" +msgstr "Selvitetty viimeistään" + +#: lib/Forms/Admin/User.php:61 +msgid "Responsible Users" +msgstr "Vastuulliset käyttäjät" + +#: lib/Whups.php:306 +msgid "S_et Queue" +msgstr "As_eta jono" + +#: lib/Query.php:234 +msgid "Sa_ve Query" +msgstr "Talleta k_ysely" + +#: templates/view/results.inc:96 lib/Forms/Query.php:385 +msgid "Save" +msgstr "Talleta" + +#: query/index.php:233 +msgid "Save Criterion" +msgstr "Talleta kriteeri" + +#: lib/Forms/Query.php:384 +msgid "Save Query" +msgstr "Talleta kysely" + +#: search.php:69 lib/Forms/Search.php:19 +msgid "Save as Query" +msgstr "Talleta kyselynä" + +#: search.php:155 lib/Block/tree_menu.php:30 +msgid "Search" +msgstr "Haku" + +#: lib/Forms/Query.php:278 +#, php-format +msgid "Search %s Attribute" +msgstr "Hae %s atribuuttia" + +#: lib/Forms/Query.php:272 lib/Forms/Query.php:281 +msgid "Search Attribute" +msgstr "Hae atribuutti" + +#: lib/Forms/Query.php:48 lib/Forms/Query.php:131 +msgid "Search Comments" +msgstr "Hae kommenttia" + +#: lib/Forms/Query.php:46 +msgid "Search Owners" +msgstr "Hae omistajia" + +#: lib/Forms/Query.php:47 +msgid "Search Requester" +msgstr "Hae asiakasta" + +#: search.php:147 search/rss.php:55 search/rss.php:59 +msgid "Search Results" +msgstr "Haun tulokset" + +#: templates/prevnext.inc:38 +#, php-format +msgid "Search Results: %s of %s" +msgstr "Haun tulokset %s / %s" + +#: lib/Forms/Query.php:130 +msgid "Search Summary" +msgstr "Hae yhteenvetoa" + +#: config/prefs.php.dist:76 +msgid "Search Tickets" +msgstr "Hae tikettiä" + +#: config/prefs.php.dist:25 +msgid "Select address book sources for adding and searching for addresses." +msgstr "Valitse osoitekirjalähteet osoitteiden lisäykselle ja haulle." + +#: templates/prefs/sourceselect.inc:319 +msgid "Select all fields to search when expanding addresses." +msgstr "Valitse kaikki ne kentät, joista etsitään laajennettavia osoitteita." + +#: config/prefs.php.dist:78 +msgid "Select the view to display after login:" +msgstr "Valitse sisäänkirjautumisen jälkeen näytettävä näkymä:" + +#: templates/prefs/sourceselect.inc:303 templates/prefs/sourceselect.inc:305 +msgid "Selected Address books:" +msgstr "Valitut osoitekirjat:" + +#: admin/index.php:36 +msgid "Sen_d Reminders" +msgstr "Lähe_tä muistutukset" + +#: lib/Forms/Admin.php:23 +msgid "Send Reminders" +msgstr "Lähetä muistutukset" + +#: lib/Forms/Admin.php:34 +msgid "Send only for this list of ticket ids" +msgstr "Lähetä vain tälle lista tikettien id:stä" + +#: lib/Forms/Admin/Priority.php:80 lib/Forms/Admin/Priority.php:82 +msgid "Set Default Priority" +msgstr "Aseta oletusprioriteetti" + +#: lib/Forms/Admin/State.php:80 lib/Forms/Admin/State.php:82 +msgid "Set Default State" +msgstr "Aseta oletustila" + +#: ticket/queue.php:201 ticket/queue.php:210 ticket/queue.php:222 +msgid "Set Queue - Step 1" +msgstr "Aseta jono - Askel 1" + +#: ticket/queue.php:202 ticket/queue.php:211 +msgid "Set Queue - Step 2" +msgstr "Aseta jono - Askel 2" + +#: ticket/queue.php:212 +msgid "Set Queue - Step 3" +msgstr "Aseta jono - Askel 3" + +#: ticket/queue.php:189 +#, php-format +msgid "Set Queue for %s" +msgstr "Aseta jono %s:lle" + +#: lib/api.php:800 +msgid "Set Requester" +msgstr "Hae asiakasta" + +#: ticket/type.php:139 ticket/type.php:148 +msgid "Set Type - Step 1" +msgstr "Aseta tyyppi - Askel 1" + +#: ticket/type.php:140 +msgid "Set Type - Step 2" +msgstr "Aseta tyyppi - Askel 2" + +#: ticket/type.php:127 +#, php-format +msgid "Set Type for %s" +msgstr "Aseta tyyppi %s:lle" + +#: lib/Whups.php:311 +msgid "Set _Type" +msgstr "Aseta _tyyppi" + +#: config/prefs.php.dist:144 +msgid "Show comments in chronological order, or most recent first?" +msgstr "Näytä kommentit kronologisessa järjestyksess, tai uusin esin." + +#: config/prefs.php.dist:95 +msgid "Show ticket IDs in the summary view?" +msgstr "Näytä tiketti id:t yhteenvetonäkymässä." + +#: config/prefs.php.dist:87 +msgid "Show tickets you have requested in the summary view?" +msgstr "Näytä aloittamasi tiketit yhteevetonäkymässä." + +#: config/templates.php.dist:16 +msgid "Simple HTML Report" +msgstr "Yksinkertainen raportti HTML-muodossa" + +#: lib/Forms/Admin/Queue.php:27 +#, php-format +msgid "" +"Slugs allows direct access to this queue's open tickets by visiting: %s. " +"
Slug names may contain only letters, numbers or the _ (underscore) " +"character." +msgstr "" +"Luoti mahdollistaa suoran yhteyden tämän jonon avoimiin tiketteihin " +"käymällä: %s.
Luotien nimet voi sisältää vain kirjaimia, numeroita " +"tai _ (alaviiva) -merkin." + +#: templates/view/results.inc:37 templates/view/results.inc:41 +#, php-format +msgid "Sort by %s" +msgstr "Järjestä %s mukaan" + +#: lib/Forms/CreateTicket.php:136 lib/Forms/CreateTicket.php:175 +#: lib/Forms/AddComment.php:20 lib/Forms/AddComment.php:51 +msgid "Spam protection" +msgstr "Roskapostisuojaus" + +#: ticket/queue.php:116 ticket/type.php:65 lib/Ticket.php:609 +#: lib/Ticket.php:806 lib/Ticket.php:949 lib/Whups.php:670 lib/Whups.php:676 +#: lib/Renderer/Query.php:117 lib/Forms/EditTicket.php:62 +#: lib/Forms/Query.php:193 config/prefs.php.dist:47 +msgid "State" +msgstr "Tila" + +#: lib/Renderer/Comment.php:110 +#, php-format +msgid "State ⇒ %s" +msgstr "Tila ⇒ %s" + +#: lib/Forms/Admin/State.php:25 lib/Forms/Admin/State.php:70 +msgid "State Category" +msgstr "Tilan kategoria" + +#: lib/Forms/Admin/State.php:24 lib/Forms/Admin/State.php:67 +#: lib/Forms/Admin/State.php:118 +msgid "State Description" +msgstr "Tilan kuvaus" + +#: lib/Forms/Admin/State.php:23 lib/Forms/Admin/State.php:47 +#: lib/Forms/Admin/State.php:64 lib/Forms/Admin/State.php:96 +#: lib/Forms/Admin/State.php:115 +msgid "State Name" +msgstr "Tilan nimi" + +#: lib/Forms/Admin/Type.php:76 lib/Forms/Admin/Type.php:165 +msgid "States for this Type" +msgstr "Tilat tälle tyypille" + +#: templates/ticket/watchers.inc:1 +msgid "Status" +msgstr "Tila" + +#: ticket/create.php:146 +msgid "Submit" +msgstr "Lähetä" + +#: query/run.php:93 query/run.php:94 +msgid "Subscribe to this query" +msgstr "Tilaa tämä kysely" + +#: admin/index.php:198 +#, php-format +msgid "Successfully Cloned %s to %s." +msgstr "Onnistuttiin kloonaamaan %s %s:ksi." + +#: ticket/type.php:118 +msgid "Successfully changed ticket type." +msgstr "Tiketin tyypin muutos onnistui." + +#: ticket/delete.php:30 lib/Ticket.php:616 lib/Ticket.php:643 +#: lib/Ticket.php:646 lib/Ticket.php:650 lib/Ticket.php:812 lib/Ticket.php:821 +#: lib/Ticket.php:912 lib/Whups.php:668 lib/Whups.php:675 +#: lib/Renderer/Query.php:89 lib/Forms/CreateTicket.php:152 +#: lib/Forms/EditTicket.php:58 config/prefs.php.dist:46 +msgid "Summary" +msgstr "Yhteenveto" + +#: lib/Renderer/Comment.php:51 +#, php-format +msgid "Summary ⇒ %s" +msgstr "Yheenveto &rJärj; %s" + +#: lib/Forms/Search.php:43 +msgid "Summary like" +msgstr "Yhteenveto kuten" + +#: lib/Renderer/Comment.php:79 +#, php-format +msgid "Taken from %s" +msgstr "Otettiin %s:ltä" + +#: lib/Forms/Query.php:128 +msgid "Text" +msgstr "Teksti" + +#: lib/Driver/sql.php:80 lib/Driver/sql.php:1306 +msgid "That queue slug is already taken. Please select another." +msgstr "Tämä jonoluoti on jo varattu. Valitse joku toinen." + +#: lib/Forms/CreateTicket.php:129 +msgid "The Requester's Email Address" +msgstr "Asiakkaan sähköpostiosoite" + +#: view.php:58 lib/Ticket.php:439 lib/Ticket.php:487 +msgid "The VFS backend needs to be configured to enable attachment uploads." +msgstr "" +"VFS-taustajärjestelmä pitää olla asennettu ennenkuin voi tuoda liitteitä." + +#: admin/index.php:906 +#, php-format +msgid "The attribute \"%s\" has been added to %s." +msgstr "Atribuutti \"%s\" on lisätty %s:lle." + +#: admin/index.php:1006 +msgid "The attribute has been deleted." +msgstr "Atribuutti on poistettu." + +#: admin/index.php:974 +msgid "The attribute has been modified." +msgstr "Atribuuttia on muokattu" + +#: admin/index.php:1015 +msgid "The attribute was not deleted." +msgstr "Atribuuttia ei poistettu." + +#: admin/index.php:642 +msgid "The default priority has been set." +msgstr "Oletusprioriteetti on asetettu." + +#: admin/index.php:506 +msgid "The default state has been set." +msgstr "Oletustila on asetettu." + +#: admin/index.php:1043 +#, php-format +msgid "The form reply \"%s\" has been added to %s." +msgstr "Lomakevastaus \"%s\" on lisätty %s:lle." + +#: admin/index.php:1135 +msgid "The form reply has been deleted." +msgstr "Lomakevastaus on poistettu." + +#: admin/index.php:1108 +msgid "The form reply has been modified." +msgstr "Lomakevastausta on muokattu." + +#: admin/index.php:1144 +msgid "The form reply was not deleted." +msgstr "Lomakevastausta ei poistettu." + +#: admin/index.php:556 +#, php-format +msgid "The priority \"%s\" has been added to %s." +msgstr "Prioriteetti \"%s\" on lisätty %s:lle." + +#: admin/index.php:661 +msgid "The priority has been deleted." +msgstr "Prioriteetti on poistettu." + +#: admin/index.php:609 +msgid "The priority has been modified." +msgstr "Prioriteettia on muokattu." + +#: admin/index.php:670 +msgid "The priority was not deleted." +msgstr "Prioriteettiä ei poistettu." + +#: lib/Forms/Query.php:463 +#, php-format +msgid "The query \"%s\" couldn't be deleted: %s" +msgstr "Kyselyä \"%s\" ei voitu poistaa: %s" + +#: lib/Forms/Query.php:465 +#, php-format +msgid "The query \"%s\" has been deleted." +msgstr "Kysely \"%s\" on poistettu." + +#: lib/Forms/Query.php:430 +#, php-format +msgid "The query couldn't be loaded:" +msgstr "Kyselyä ei voitu ladata." + +#: admin/index.php:300 +#, php-format +msgid "The queue \"%s\" has been created." +msgstr "Jono \"%s\" on luotu." + +#: admin/index.php:392 +msgid "The queue has been deleted." +msgstr "Jono on poistettu." + +#: admin/index.php:359 +msgid "The queue has been modified." +msgstr "Jonoa on muokattu." + +#: admin/index.php:400 +msgid "The queue was not deleted." +msgstr "Jonoa ei poistettu." + +#: lib/MIME/Viewer/zip.php:58 +msgid "The requested file does not exist in the Zip attachment." +msgstr "Pyydettyä tiedostoa ei ole Zip-liitteessä." + +#: data.php:26 +msgid "The requested template does not exist." +msgstr "Pyydettyä mallia ei ole olemassa." + +#: admin/index.php:422 +#, php-format +msgid "The state \"%s\" has been added to %s." +msgstr "Tila \"%s\" on lisätty %s:lle." + +#: admin/index.php:525 +msgid "The state has been deleted." +msgstr "Tila on poistettu." + +#: admin/index.php:475 +msgid "The state has been modified." +msgstr "Tilaa on muokattu." + +#: admin/index.php:533 +msgid "The state was not deleted." +msgstr "Tilaa ei poistettu." + +#: ticket/delete.php:78 +msgid "The ticket was not deleted." +msgstr "Tikettiä ei poistettu." + +#: admin/index.php:223 +#, php-format +msgid "The type \"%s\" has been modified." +msgstr "Tyyppiä \"%s\" on muokattu." + +#: admin/index.php:272 +msgid "The type has been deleted." +msgstr "Tyyppi on poistettu." + +#: admin/index.php:280 +msgid "The type was not deleted." +msgstr "Tyyppiä ei poistettu." + +#: admin/index.php:776 +#, php-format +msgid "The version \"%s\" has been added to %s." +msgstr "Versio \"%s\" on lisätty %s:lle." + +#: admin/index.php:865 +msgid "The version has been deleted." +msgstr "Versio on poistettu." + +#: admin/index.php:835 +msgid "The version has been modified." +msgstr "Versiota on muokattu." + +#: admin/index.php:873 +msgid "The version was not deleted." +msgstr "Versiota ei poistettu." + +#: lib/Forms/Admin/Attribute.php:70 +msgid "There are no attribute types to edit" +msgstr "Ei ole atribuuttityyppejä muokattavaksi." + +#: lib/Forms/Query.php:281 +msgid "There are no attributes defined." +msgstr "Ei ole määritelty atribuutteja." + +#: lib/Forms/Admin/Reply.php:48 +msgid "There are no form replies to edit" +msgstr "Ei ole lomakevastauksia muokattavaksi" + +#: lib/Block/queuesummary.php:44 +msgid "There are no open tickets." +msgstr "Ei ole avoimia tikettejä" + +#: lib/Forms/Admin/Priority.php:44 lib/Forms/Admin/Priority.php:90 +msgid "There are no priorities to edit" +msgstr "Ei ole prioriteettejä muokattavaksi" + +#: lib/Forms/Admin.php:31 +msgid "There are no queues available." +msgstr "Ei ole jonoja saatavilla." + +#: lib/Forms/Admin/Queue.php:57 +msgid "There are no queues to edit" +msgstr "Ei ole jonoja muokattavaksi" + +#: lib/Forms/CreateTicket.php:35 +msgid "There are no queues which you can create tickets in." +msgstr "Ei ole jonoja, johon voit luoda tikettejä." + +#: lib/Forms/Search.php:38 +msgid "There are no queues which you can search." +msgstr "Ei ole jonoja, joista voit etsiä." + +#: lib/Forms/Admin/State.php:43 lib/Forms/Admin/State.php:92 +msgid "There are no states to edit" +msgstr "Ei ole tiloja muokattavaksi" + +#: lib/Forms/CreateTicket.php:72 +msgid "" +"There are no ticket types associated with this queue; until there are, you " +"cannot create any tickets in this queue." +msgstr "" +"Tähän jonoon ei ole assosioitu tikettityyppejä: Voit luoda tikettejä vasta " +"tikettityypit on määritelty." + +#: lib/Forms/Admin/Type.php:45 +msgid "There are no types to edit" +msgstr "Ei ole tyyppejä muokattavaksi" + +#: lib/Forms/Admin/User.php:75 +msgid "There are no users responsible for this queue." +msgstr "Tälle jonolle ei ole vastuuhenkilöitä." + +#: lib/Forms/CreateTicket.php:242 +msgid "There are no users to which this ticket can be assigned." +msgstr "Ei ole käyttäjiä joille tämä tiketti voidään määrätä." + +#: lib/Forms/Admin/Version.php:44 +msgid "There are no versions to edit" +msgstr "Ei ole versioita editoitaviksi" + +#: lib/Reports.php:143 +msgid "There is no data for this report." +msgstr "Ei ole tietoja tähän raporttiin." + +#: admin/index.php:705 +#, php-format +msgid "There was an error adding \"%s\" to the responsible list for \"%s\":" +msgstr "" +"Tapahtui virhe lisättäessä \"%s\" vastuullisten henkilöiden listalle \"%s\":" + +#: admin/index.php:911 +msgid "There was an error creating the attribute:" +msgstr "Tapahtui virhe luotaessa atribuuttia:" + +#: admin/index.php:1051 +msgid "There was an error creating the form reply:" +msgstr "Tapahtui virhe luotaessa lomakevastausta:" + +#: admin/index.php:561 +msgid "There was an error creating the priority:" +msgstr "Tapahtui virhe luotaessa prioriteettiä:" + +#: admin/index.php:309 +msgid "There was an error creating the queue:" +msgstr "Tapahtui virhe luotaessa jonoa:" + +#: admin/index.php:426 +msgid "There was an error creating the state:" +msgstr "Tapahtui virhe luotaessa tilaa:" + +#: admin/index.php:780 +msgid "There was an error creating the version:" +msgstr "Tapahtui virhe luotaessa versiota:" + +#: admin/index.php:1010 +msgid "There was an error deleting the attribute:" +msgstr "Tapahtui virhe poistettaesssa atribuuttia:" + +#: admin/index.php:1139 +msgid "There was an error deleting the form reply:" +msgstr "Tapahtui virhe poistettaessa lomakevastausta:" + +#: admin/index.php:665 +msgid "There was an error deleting the priority:" +msgstr "Tapahtui virhe poistettaessa prioriteettiä:" + +#: admin/index.php:395 +msgid "There was an error deleting the queue:" +msgstr "Tapahtui virhe poistettaessa jonoa:" + +#: admin/index.php:528 +msgid "There was an error deleting the state:" +msgstr "Tapahtui virhe poistettaessa tilaa:" + +#: ticket/delete.php:75 +msgid "There was an error deleting the ticket:" +msgstr "Tapahtui virhe poistettaessa tikettiä:" + +#: admin/index.php:275 +msgid "There was an error deleting the type:" +msgstr "Tapahtui virhe poistettaessa tyyppiä:" + +#: admin/index.php:868 +msgid "There was an error deleting the version:" +msgstr "Tapahtui virhe poistettaessa versiota:" + +#: admin/index.php:982 +msgid "There was an error editing the attribute:" +msgstr "Tapahtui virhe muokattaessa atribuuttia:" + +#: admin/index.php:1104 +msgid "There was an error editing the form reply:" +msgstr "Tapahtui virhe muokattaessa lomakevastausta:" + +#: admin/index.php:615 +msgid "There was an error editing the priority:" +msgstr "Tapahtui virhe muokattaessa prioriteettiä:" + +#: admin/index.php:375 +msgid "There was an error editing the queue:" +msgstr "Tapahtui virhe muokattaessa jonoa:" + +#: admin/index.php:480 +msgid "There was an error editing the state:" +msgstr "Tapahtui virhe muokattaessa tilaa:" + +#: admin/index.php:841 +msgid "There was an error editing the version:" +msgstr "Tapahtui virhe muokattaessa versiota:" + +#: lib/Forms/Admin/User.php:35 +#, php-format +msgid "There was an error listing users: %s; %s" +msgstr "Tapahtui virhe käyttäjiä listatessa: %s; %s" + +#: queue/index.php:52 +#, php-format +msgid "There was an error locating tickets in this queue: " +msgstr "Tapahtui virhe etsittäessä tikettejä tästä jonosta: " + +#: admin/index.php:219 +msgid "There was an error modifying the type:" +msgstr "Tapahtui virhe muokattaessa tyyppiä:" + +#: search.php:140 +#, php-format +msgid "There was an error performing your search: %s" +msgstr "Tapahtui virhe tehtäessä hakuasi: %s" + +#: admin/index.php:750 +#, php-format +msgid "" +"There was an error removing \"%s\" from the responsible list for \"%s\":" +msgstr "" +"Tapahtui virhe poistettaessa \"%s\" vastuuhenkilöiden listatalta \"%s\":" + +#: admin/index.php:638 +msgid "There was an error setting the default priority:" +msgstr "Tapahtui virhe muokattaessa oletusprioriteettiä:" + +#: admin/index.php:502 +msgid "There was an error setting the default state:" +msgstr "Tapahtui virhe muokattaessa oletustilaa:" + +#: lib/Forms/AddComment.php:37 lib/Forms/EditTicket.php:166 +msgid "This comment is visible to everyone" +msgstr "Tämä komentti näkyy kaikille" + +#: lib/Forms/Admin/Queue.php:31 +msgid "" +"This email address will be used when sending notifications for any queue " +"tickets." +msgstr "" +"Tätä sähköpostiosoitetta käytetään kun lähdetetään ilmoituksia jonojen " +"tiketeistä." + +#: data.php:29 +msgid "This is not a search results template." +msgstr "Tämä ei ole malli hakutuloksille." + +#: lib/Query.php:435 lib/Query.php:668 +msgid "This query element cannot be edited." +msgstr "Tämän kyselyelementtiä ei voi muokata." + +#: ticket/queue.php:81 lib/Forms/CreateTicket.php:88 +msgid "" +"This queue requires that you specify a version, but there are no versions " +"associated with it. Until versions are created for this queue, you will not " +"be able to create tickets." +msgstr "" +"Tämä jono vaatii että annat version, mutta jonoon ei ole assosioitu " +"versiotietoja. Tähän jonoon voi luoda tikettejä vasta kun siihen on liitetty " +"versiotiedot." + +#: lib/Ticket.php:638 lib/Ticket.php:820 +msgid "Ticket" +msgstr "Tiketti" + +#: ticket/delete.php:71 +#, php-format +msgid "Ticket %d has been deleted." +msgstr "Tiketti %d on poistettu." + +#: lib/api.php:850 +#, php-format +msgid "Ticket %s - %s" +msgstr "Tiketti %s - %s" + +#: lib/Driver/sql.php:1081 +#, php-format +msgid "Ticket %s was not found." +msgstr "Tikettiä %s ei löytynyt." + +#: search.php:170 +msgid "Ticket Search" +msgstr "Tikettien haku" + +#: lib/Forms/CreateTicket.php:142 +msgid "Ticket State" +msgstr "Tiketin tila" + +#: templates/reports/stats.inc:1 +msgid "Ticket Stats" +msgstr "Tikettien tilastot" + +#: lib/Forms/CreateTicket.php:80 +msgid "Ticket Type" +msgstr "Tiketin tyyppi" + +#: lib/Forms/Admin/Queue.php:103 +msgid "Ticket Types associated with this Queue" +msgstr "Tähän jonoon assosioidut tikettityypit" + +#: lib/Ticket.php:633 +#, php-format +msgid "Ticket URL: %s" +msgstr "Tiketti URL: %s" + +#: ticket/update.php:94 +msgid "Ticket Updated" +msgstr "Tiketti päivitetty" + +#: lib/api.php:871 +msgid "Tickets" +msgstr "Tiketit" + +#: query/rss.php:70 +#, php-format +msgid "Tickets matching the query \"%s\"." +msgstr "Kyselyä \"%s\" vastaavat tiketit." + +#: templates/prefs/sourceselect.inc:322 +msgid "" +"To select multiple fields, hold down the Control (PC) or Command (Mac) while " +"clicking." +msgstr "" +"Valitaksesi useita kenttiä, pidä pohjassa Control (PC) tai Command (Mac) kun " +"valitset napsauttamalla." + +#: ticket/queue.php:89 lib/Ticket.php:608 lib/Ticket.php:805 +#: lib/Ticket.php:945 lib/Whups.php:677 lib/Renderer/Query.php:108 +#: lib/Forms/Query.php:174 config/prefs.php.dist:48 +msgid "Type" +msgstr "Tyyppi" + +#: lib/Renderer/Comment.php:105 +#, php-format +msgid "Type ⇒ %s" +msgstr "Tyyppi ⇒ %s" + +#: lib/Forms/Admin/Type.php:23 lib/Forms/Admin/Type.php:70 +#: lib/Forms/Admin/Type.php:160 +msgid "Type Description" +msgstr "Tyypin kuvaus" + +#: lib/Forms/Admin/Type.php:22 lib/Forms/Admin/Type.php:48 +#: lib/Forms/Admin/Type.php:67 lib/Forms/Admin/Type.php:156 +msgid "Type Name" +msgstr "Tyypin nimi" + +#: search/rss.php:39 +#, php-format +msgid "Type: %s; State: %s" +msgstr "Tyyppi: %s; Tila: %s" + +#: lib/Ticket.php:961 +msgid "Unassigned" +msgstr "Määrittelemätön" + +#: lib/Block/unassigned.php:3 lib/Block/unassigned.php:24 +msgid "Unassigned Tickets" +msgstr "Määrittelemättömät tiketit" + +#: lib/Forms/Admin.php:42 +msgid "Unassigned tickets" +msgstr "Määrittelemättömät tiketit" + +#: lib/Driver.php:196 +msgid "Unconfirmed" +msgstr "Varmistamaton" + +#: lib/Renderer/Query.php:167 lib/Renderer/Query.php:207 +#, php-format +msgid "Unknown node type %s" +msgstr "Tuntematon node tyyppi %s" + +#: lib/api.php:790 +msgid "Update" +msgstr "Päivitä" + +#: ticket/update.php:108 +#, php-format +msgid "Update %s" +msgstr "Päivitä %s" + +#: templates/admin/mtmatrix.inc:29 +msgid "Update Associations" +msgstr "Päivitä assosiaatiot" + +#: lib/Ticket.php:981 lib/Whups.php:683 lib/Renderer/Query.php:146 +msgid "Updated" +msgstr "Päivitetty" + +#: lib/Ticket.php:615 lib/Ticket.php:640 +msgid "Updated By" +msgstr "Päivittäjä" + +#: lib/Forms/Query.php:327 lib/Forms/Search.php:58 +msgid "Updated from" +msgstr "Päivitetty alkaen" + +#: lib/Forms/Query.php:328 +msgid "Updated to" +msgstr "Päivitetty viimeistään" + +#: lib/Forms/Admin/User.php:34 lib/Forms/Admin/User.php:44 +#: lib/Forms/Admin/User.php:47 +msgid "User" +msgstr "Käyttäjä" + +#: lib/Forms/Query.php:44 +msgid "User ID" +msgstr "Käyttäjä ID" + +#: lib/Forms/Admin/Queue.php:131 +msgid "Users responsible for this Queue" +msgstr "Tämän jonon vastuukäyttäjät" + +#: lib/Forms/Admin/User.php:79 +msgid "Users responsible for this queue" +msgstr "Tämän jonon vastuukäyttäjät" + +#: lib/Ticket.php:607 lib/Ticket.php:804 lib/Renderer/Query.php:102 +#: lib/Forms/Query.php:185 config/prefs.php.dist:51 +msgid "Version" +msgstr "Versio" + +#: lib/Forms/Admin/Version.php:24 lib/Forms/Admin/Version.php:70 +#: lib/Forms/Admin/Version.php:93 +msgid "Version Description" +msgstr "Version kuvaus" + +#: lib/Forms/Admin/Version.php:23 lib/Forms/Admin/Version.php:48 +#: lib/Forms/Admin/Version.php:67 lib/Forms/Admin/Version.php:90 +msgid "Version Name" +msgstr "Version nimi" + +#: ticket/queue.php:50 ticket/type.php:43 +msgid "Viewable only by members of" +msgstr "Näytetään vain jäsenille" + +#: lib/Forms/AddComment.php:25 +msgid "Watch this ticket" +msgstr "Tarkkaile tätä tikettiä" + +#: ticket/watch.php:78 +#, php-format +msgid "Watchers for %s" +msgstr "Tarkkailijat %s:lle" + +#: config/prefs.php.dist:104 +msgid "Weekday Day Month" +msgstr "Viikonpäivä Päivä Kuukausi" + +#: config/prefs.php.dist:105 +msgid "Weekday Day Month HH:MM:SS TZ" +msgstr "Viikonpäivä Päivä Kuukausi TT:MM:SS TZ" + +#: ticket/delete.php:33 lib/Forms/Query.php:449 +#: lib/Forms/Admin/Attribute.php:149 lib/Forms/Admin/Priority.php:121 +#: lib/Forms/Admin/Queue.php:174 lib/Forms/Admin/Reply.php:110 +#: lib/Forms/Admin/State.php:121 lib/Forms/Admin/Type.php:176 +#: lib/Forms/Admin/Version.php:96 +msgid "Yes" +msgstr "Kyllä" + +#: view.php:54 +#, php-format +msgid "You are not allowed to view ticket %d." +msgstr "Sinulla ei ole oikeuksia nähdä tätä tikettiä %d." + +#: lib/Driver/sql.php:1090 +#, php-format +msgid "You do not have permission to access this ticket (%s)." +msgstr "Sinulla ei ole oikeuksia tähän tikettiin (%s)" + +#: lib/api.php:375 +msgid "You do not have permission to update this ticket." +msgstr "Sinulla ei ole oikeuksia päivittää tätä tikettiä." + +#: lib/Block/myrequests.php:46 +msgid "You have no open requests." +msgstr "Sinulla ei ole avoimia pyyntöjä." + +#: lib/Forms/Query.php:419 lib/Block/query.php:28 +msgid "You have no saved queries." +msgstr "Sinulla ei ole talletettuja kyselyitä." + +#: lib/Whups.php:710 +msgid "You must select at least one queue to send reminders for." +msgstr "Sinun pitää valita ainakin yksi jono johon lähetetän muistutukset." + +#: lib/Forms/CreateTicket.php:132 lib/Forms/AddComment.php:18 +msgid "Your Email Address" +msgstr "Sähköpostiosoitteesi" + +#: ticket/create.php:60 +#, php-format +msgid "" +"Your ticket ID is %s. An appropriate person has been notified of this " +"request." +msgstr "" +"Tikettisi ID on %s. Ilmoitus uudesta tiketistä on lähetetty " +"vastuuhenkilöille." + +#: lib/Mail.php:244 +msgid "[ Could not render body of message. ]" +msgstr "[ Ei voitu renderöidä viestin leipätekstiä ]" + +#: lib/Whups.php:774 +msgid "_Admin" +msgstr "_Ylläpito" + +#: lib/Whups.php:298 +msgid "_Comment" +msgstr "_Kommentti" + +#: query/index.php:157 +msgid "_Date Criteria" +msgstr "_Päivämäärän kriteeri" + +#: lib/Whups.php:316 +msgid "_Delete" +msgstr "_Poista" + +#: lib/Query.php:237 +msgid "_Delete Query" +msgstr "_Poista kysely" + +#: lib/Query.php:218 +msgid "_Edit Query" +msgstr "_Muokkaa kyselyä" + +#: admin/index.php:33 +msgid "_Edit Queues" +msgstr "_Muokkaa jonoja" + +#: templates/menu.inc:5 +msgid "_Go" +msgstr "_Mene" + +#: query/index.php:156 +msgid "_Group Criteria" +msgstr "_Ryhmäkriteeri" + +#: lib/Whups.php:292 +msgid "_History" +msgstr "_Historia" + +#: lib/Query.php:231 +msgid "_Load Query" +msgstr "_Lataa kysely" + +#: lib/Whups.php:765 +#, php-format +msgid "_My %s" +msgstr "_Oma %s" + +#: lib/Whups.php:768 +msgid "_New Ticket" +msgstr "_Uusi tiketti" + +#: query/index.php:154 +msgid "_Property Criteria" +msgstr "_Ominaisuuden kriteeri" + +#: lib/Whups.php:769 +msgid "_Query Builder" +msgstr "_Kyselynrakentaja" + +#: lib/Whups.php:770 +msgid "_Reports" +msgstr "_Raportit" + +#: lib/Whups.php:767 +msgid "_Search" +msgstr "_Haku" + +#: query/index.php:158 +msgid "_Text Criteria" +msgstr "_Tekstin kriteeri" + +#: lib/Whups.php:294 +msgid "_Update" +msgstr "_Päivitä" + +#: query/index.php:155 +msgid "_User Criteria" +msgstr "_Käyttäjä kriteeri" + +#: lib/Whups.php:302 +msgid "_Watch" +msgstr "_Tarkkaile" + +#: lib/Renderer/Query.php:187 +msgid "contains (case insensitive) substring" +msgstr "sisältää (kirjainkokoriippumattoman) osamerkkijonon" + +#: lib/Renderer/Query.php:191 +msgid "contains (case sensitive) substring" +msgstr "sisältää (kirjainkokoriippuvan) osamerkkijonon" + +#: lib/Renderer/Query.php:195 +msgid "contains the word" +msgstr "sisältää sanan" + +#: lib/Mail.php:94 lib/Mail.php:118 lib/Mail.php:146 +msgid "current user:" +msgstr "nykyinen käyttäjä:" + +#: lib/api.php:859 +msgid "estimated time" +msgstr "arvioitu aika" + +#: lib/Renderer/Query.php:183 +msgid "is" +msgstr "on" + +#: lib/Renderer/Query.php:175 +msgid "is greater than" +msgstr "on suurempi kuin" + +#: lib/Renderer/Query.php:179 +msgid "is less than" +msgstr "on pienempi kuin" + +#: lib/Renderer/Query.php:199 +msgid "matches the pattern" +msgstr "täsmää malliin" + +#: lib/Forms/Search.php:57 lib/Forms/Search.php:59 lib/Forms/Search.php:61 +#: lib/Forms/Search.php:63 lib/Forms/Search.php:65 +msgid "to" +msgstr " - " diff --git a/whups/po/fr_FR.po b/whups/po/fr_FR.po new file mode 100644 index 000000000..27ac303be --- /dev/null +++ b/whups/po/fr_FR.po @@ -0,0 +1,1519 @@ +# WHUPS French translation. +# Copyright 2002 Thierry Thomas . +# This file is distributed under the same license as the WHUPS package. +# Thierry Thomas , 2002. +# +msgid "" +msgstr "" +"Project-Id-Version: Whups-0.0.1-cvs\n" +"POT-Creation-Date: 2003-06-23 11:17+0200\n" +"PO-Revision-Date: 2003-06-22 23:21+0200\n" +"Last-Translator: Thierry Thomas \n" +"Language-Team: French \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#, c-format +msgid "%s added to those responsible for '%s'" +msgstr "%s fait désormais partie des responsables de « %s »" + +#, c-format +msgid "%s days" +msgstr " (il y a %s jours)" + +#, c-format +msgid "'%s' is no longer among those responsible for '%s'" +msgstr "« %s » ne fait plus partie des responsables de « %s »" + +msgid "- Stage 1" +msgstr "- Étape 1" + +msgid "- Stage 2" +msgstr "- Étape 2" + +#, c-format +msgid "-Added By: %s\n" +msgstr "-Ajouté par : %s\n" + +#, c-format +msgid "-Assigned By: %s" +msgstr "-Assigné par : %s" + +#, c-format +msgid "-Assigned To: %s" +msgstr "-Assigner à  : %s" + +#, c-format +msgid "-Comment by %s on %s:" +msgstr "-Commentaire par %s sur %s :" + +#, c-format +msgid "-Created By: %s\n" +msgstr "-Créé par : %s\n" + +#, c-format +msgid "-Queue: %s" +msgstr "-Queue : %s" + +#, c-format +msgid "-Queue: %s\n" +msgstr "-Queue : %s\n" + +#, c-format +msgid "-New Priority: %s" +msgstr "-Nouvelle priorité : %s" + +#, c-format +msgid "-New State: %s" +msgstr "-Nouvel état : %s" + +#, c-format +msgid "-State: %s" +msgstr "-État  : %s" + +msgid "-Summary:" +msgstr "-Résumé :" + +#, c-format +msgid "-Ticket %s" +msgstr "-Ticket %s" + +#, c-format +msgid "-Ticket %s\n" +msgstr "-Ticket %s\n" + +msgid "1. Low" +msgstr "1. Bas" + +msgid "2. Medium" +msgstr "2. Moyen" + +msgid "3. High" +msgstr "3. Haut" + +msgid "No summary" +msgstr "Pas de résumé" + +msgid "A ticket has been reported but not yet analyzed." +msgstr "Un ticket a été pris en compte mais pas encore analysé." + +msgid "Accepted" +msgstr "Accepté" + +msgid "Add Attribute Criterion" +msgstr "Ajouter un critère sur l'attribut" + +msgid "Add Attribute" +msgstr "Ajouter un attribut" + +msgid "Add Comment Succeeded" +msgstr "Commentaire ajouté" + +msgid "Add Comment" +msgstr "Ajouter un commentaire" + +msgid "Add Criterion" +msgstr "Ajouter un critère" + +msgid "Add Queue" +msgstr "Ajouter un module" + +msgid "Add Priority" +msgstr "Ajouter une priorité" + +msgid "Add Property Criterion" +msgstr "Ajouter un critère sur la propriété" + +msgid "Add State" +msgstr "Ajouter un état" + +msgid "Add Subject" +msgstr "Ajouter un sujet" + +msgid "Add Text Criterion" +msgstr "Ajouter un critère sur le texte" + +#, c-format +msgid "Add Type %s" +msgstr "Ajouter le type %s" + +msgid "Add Type" +msgstr "Ajouter un type" + +msgid "Add User Criterion" +msgstr "Ajouter un critère sur l'utilisateur" + +msgid "Add Users" +msgstr "Ajouter des utilisateurs" + +msgid "Add Version" +msgstr "Ajouter une version" + +#, c-format +msgid "Adding your ticket failed: %s." +msgstr "L'ajout de votre ticket a échoué : %s." + +msgid "Additional Comment" +msgstr "Commentaire additionnel" + +msgid "Admin" +msgstr "Admin." + +msgid "Administration" +msgstr "Administration" + +msgid "An appropriate person has been notified of this request." +msgstr "Cette requête a été notifiée à la personne appropriée." + +msgid "And" +msgstr "Et" + +msgid "Any Group" +msgstr "Groupe quelconque" + +msgid "Any" +msgstr "Quelconque" + +msgid "Ascending" +msgstr "Croissant" + +msgid "Assign Ticket Succeeded" +msgstr "Assignation du ticket réussie" + +msgid "Assign Ticket" +msgstr "Assigner un ticket" + +#, c-format +msgid "Assigned ticket to %s" +msgstr "Assigner un ticket à %s" + +msgid "Assigned" +msgstr "Assigné" + +msgid "Assignee" +msgstr "Responsable" + +msgid "Associations updated successfully." +msgstr "Associations mises à jour." + +msgid "Attribute Criteria" +msgstr "Critère d'attribut" + +msgid "Attribute Description" +msgstr "Description de l'attribut" + +msgid "Attribute Name" +msgstr "Nom de l'attribut" + +msgid "Attributes for this Type" +msgstr "Attribut pour ce type" + +msgid "Autolink to other tickets in comments" +msgstr "Lien vers d'autres tickets dans les commentaires" + +msgid "Average days to close by Queue" +msgstr "Délai moyen de clôture par modules" + +msgid "Average days to close by Owner" +msgstr "Délai moyen de clôture par propriétaires" + +msgid "Average days to close by Requester" +msgstr "Délai moyen de clôture par demandeurs" + +msgid "Average time a ticket is unresolved" +msgstr "Délai moyen des tickets non résolus" + +msgid "Branch Type" +msgstr "Type de branche" + +msgid "Canceled" +msgstr "Annulé" + +msgid "Case Insensitive Substring" +msgstr "Sous-chaîne non sensible à la casse" + +msgid "Case Sensitive Substring" +msgstr "Sous-chaîne sensible à la casse" + +msgid "Change Ticket Type" +msgstr "Modifier le type du ticket" + +msgid "Change display options such as how search results are sorted." +msgstr "" +"Changer les options d'affichage de la même manière que l'ordre des résultats " +"de recherches." + +msgid "" +"Change display options such as the color scheme and how search results are " +"sorted." +msgstr "" +"Changer les options d'affichage tels que le thème coloré et la manière dont " +"les résultats de recherches sont classés." + +msgid "Change options for email notifications of ticket activity." +msgstr "" +"Changer les options de notifications par courrier de l'activité des tickets." + +msgid "Change" +msgstr "Modifier" + +msgid "Choose Action:" +msgstr "Choisir une action :" + +msgid "Chronological (oldest first)" +msgstr "Chronologique (les plus ancien en premier)" + +msgid "Clone Description" +msgstr "Description du clone" + +msgid "Clone Type" +msgstr "Type de clone" + +msgid "Clone" +msgstr "Dupliquer" + +msgid "Comma Separated Values (CSV file)" +msgstr "Texte CSV (fichier CSV)" + +#, c-format +msgid "Comment from %s on %s" +msgstr "Commentaire de %s sur %s" + +msgid "Comment" +msgstr "Commentaire" + +msgid "Commentor" +msgstr "Commentateur" + +#, c-format +msgid "Copy of %s" +msgstr "Copie de %s" + +msgid "Create Default Priorities" +msgstr "Créer les priorités par défaut" + +msgid "Create Default States" +msgstr "Créer les états par défaut" + +msgid "Create Ticket - Stage 1" +msgstr "Créer un ticket - Étape 1" + +msgid "Create Ticket - Stage 2" +msgstr "Créer un ticket - Étape 2" + +msgid "Create Ticket - Stage 3" +msgstr "Créer un ticket - Étape 3" + +msgid "Create Ticket - Stage 4" +msgstr "Créer un ticket - Étape 4" + +msgid "Create Ticket" +msgstr "Créer un ticket" + +msgid "Create Tickets" +msgstr "Créer des tickets" + +msgid "Created" +msgstr "Créé" + +msgid "Current Query" +msgstr "Requête courante" + +msgid "Current Type" +msgstr "Type courant" + +msgid "Date Criteria" +msgstr "Critère sur la date" + +msgid "Date/Time format for search results" +msgstr "Format de la date et de l'heure pour les résultats de recherche" + +msgid "Default sorting criteria:" +msgstr "Critère de classement par défaut" + +msgid "Default sorting direction:" +msgstr "Sens de classement par défaut" + +msgid "Delete Attribute Confirmation" +msgstr "Confirmation de la suppression de l'attribut" + +msgid "Delete Attribute" +msgstr "Supprimer l'attribut" + +msgid "Delete Queue Confirmation" +msgstr "Confirmation de la suppression de module" + +msgid "Delete Queue" +msgstr "Supprimer le module" + +msgid "Delete Priority Confirmation" +msgstr "Confirmation de la suppression de priorité" + +msgid "Delete Priority" +msgstr "Supprimer la priorité" + +msgid "Delete State Confirmation" +msgstr "Confirmation de la suppression de l'état" + +msgid "Delete State" +msgstr "Supprimer l'état" + +msgid "Delete Subject Confirmation" +msgstr "Confirmation de la suppression du sujet" + +msgid "Delete Subject" +msgstr "Supprimer le sujet" + +msgid "Delete Ticket Succeeded" +msgstr "Suppression du ticket effectué" + +msgid "Delete Ticket" +msgstr "Supprimer un ticket" + +msgid "Delete Type Confirmation" +msgstr "Confirmation de la suppression du type" + +msgid "Delete Type" +msgstr "Supprimer le type" + +msgid "Delete Version Confirmation" +msgstr "Confirmation de la suppression de la version" + +msgid "Delete Version" +msgstr "Supprimer la version" + +msgid "Delete" +msgstr "Supprimer" + +msgid "Descending" +msgstr "Décroissant" + +msgid "Description" +msgstr "Description" + +msgid "Display Options" +msgstr "Options d'affichage" + +#, c-format +msgid "Edit %s" +msgstr "Éditer %s" + +msgid "Edit Attribute" +msgstr "Éditer l'attribut" + +msgid "Edit Attributes" +msgstr "Éditer les attributs" + +msgid "Edit Queue" +msgstr "Éditer le module" + +msgid "Edit Queues" +msgstr "Éditer des modules" + +msgid "Edit Priorities" +msgstr "Éditer les priorités" + +msgid "Edit Priority" +msgstr "Éditer la priorité" + +msgid "Edit Query" +msgstr "Éditer une requête" + +msgid "Edit State" +msgstr "Éditer l'état" + +msgid "Edit States" +msgstr "Éditer les états" + +msgid "Edit Subject" +msgstr "Éditer le sujet" + +msgid "Edit Subjects" +msgstr "Éditer les sujets" + +msgid "Edit Type" +msgstr "Éditer le type" + +msgid "Edit Types" +msgstr "Éditer les types" + +msgid "Edit Version" +msgstr "Éditer la version" + +msgid "Edit or Delete Attributes" +msgstr "Éditer ou supprimer les attributs" + +msgid "Edit or Delete Queues" +msgstr "Éditer ou supprimer les modules" + +msgid "Edit or Delete Priorities" +msgstr "Éditer ou supprimer les priorités" + +msgid "Edit or Delete States" +msgstr "Éditer ou supprimer les états" + +msgid "Edit or Delete Subjects" +msgstr "Éditer ou supprimer les sujets" + +msgid "Edit or Delete Types" +msgstr "Éditer ou supprimer les types" + +msgid "Edit or Delete Versions" +msgstr "Éditer ou supprimer les versions" + +msgid "Edit the permissions on this module" +msgstr "Éditer les permissions de ce module" + +msgid "Edit the users responsible for this module" +msgstr "Éditer les utilisateurs responsables pour ce module" + +msgid "Edit the versions for this module" +msgstr "Éditer les versions de ce module" + +msgid "Edit" +msgstr "Éditer" + +#, c-format +msgid "Error: Unknown query form %s, defaulting to properties" +msgstr "" +"Erreur : formulaire de recherche %s inconnu, utilisation des propriétés par " +"défaut" + +msgid "Exact Match" +msgstr "Correspondance exacte" + +msgid "Execute Query" +msgstr "Exécution de la requête" + +msgid "For tickets from these modules" +msgstr "Pour les tickets de ce module" + +msgid "For tickets which are" +msgstr "Pour les tickets qui sont" + +msgid "Go" +msgstr "Lancer" + +msgid "Help" +msgstr "Aide" + +msgid "Hide Assigned" +msgstr "Cacher les tickets affectés" + +msgid "Hide New" +msgstr "Cacher les nouveaux" + +msgid "Hide Resolved" +msgstr "Cacher les résolus" + +msgid "Hide Unconfirmed" +msgstr "Cacher les non-confirmés" + +msgid "Hoist" +msgstr "Monter" + +msgid "Id" +msgstr "Id." + +#, c-format +msgid "If you believe you have recieved this mail in error, please contact %s." +msgstr "Si vous avez reçu ce courrier par erreur, veuillez contacter %s." + +msgid "" +"If you don't select any categories, no filtering will be done on ticket " +"category." +msgstr "" +"Si vous ne sélectionnez aucune catégorie, aucun filtre ne sera appliqué sur " +"la catégorie." + +msgid "" +"If you don't select any types, no filtering will be done on ticket type." +msgstr "" +"Si vous ne sélectionnez aucun type, aucun filtre ne sera appliqué sur le " +"type de ticket." + +msgid "" +"If you select any tickets that do not have an owner, who should we send " +"email to?" +msgstr "" +"Si vous sélectionnez un ticket sans propriétaire, à qui envoyer le courrier ?" + +#, c-format +msgid "Initial priority of '%s' set by %s on %s." +msgstr "Priorité initiale de « %s » modifié par %s sur %s." + +#, c-format +msgid "Initial state of '%s' set by %s on %s" +msgstr "État initial de « %s » modifié par %s sur %s" + +msgid "Insert And" +msgstr "Insérer « Et »" + +msgid "Insert Branch" +msgstr "Insérer une branche" + +msgid "Insert Not" +msgstr "Insérer « Non »" + +msgid "Insert Or" +msgstr "Insérer « Ou »" + +msgid "Insert Query" +msgstr "Insérer une requête »" + +msgid "Keep a set of versions for this queue?" +msgstr "Conserver un jeu de versions pour ce module ?" + +msgid "Language" +msgstr "Langue" + +msgid "Load Query" +msgstr "Charger une requête" + +msgid "Login" +msgstr "Connexion" + +msgid "MM/DD/YY HH:MM:SS" +msgstr "MM/JJ/AA HH:MM:SS" + +msgid "MM/DD/YY" +msgstr "MM/JJ/AA" + +#, c-format +msgid "Make a clone of %s" +msgstr "Dupliquer %s" + +msgid "Match Operator" +msgstr "Faire correspondre l'opérateur" + +msgid "Match Pattern" +msgstr "Faire correspondre le motif" + +msgid "Match Word" +msgstr "Faire correspondre le mot" + +msgid "Match" +msgstr "Correspond" + +msgid "Maximum time a ticket is unresolved" +msgstr "Temps maximum pour un ticket non résolu" + +msgid "Minimum time a ticket is unresolved" +msgstr "Temps minimum pour un ticket non résolu" + +msgid "Queue Description" +msgstr "Description du module" + +msgid "Queue Name" +msgstr "Nom de module" + +msgid "Queue Version" +msgstr "Version du module" + +msgid "Queue" +msgstr "Queue" + +msgid "Queue/Type Matrix" +msgstr "Matrice Queue/Type" + +#, c-format +msgid "Queue: %s, Ticket: %s, Category: %s, Type: %s" +msgstr "Queue : %s, Ticket : %s, Catégorie : %s, Type : %s" + +msgid "Most recent first" +msgstr "Les plus récent en premier" + +msgid "Move" +msgstr "Déplacer" + +#, c-format +msgid "My %s" +msgstr "Mon %s" + +msgid "My Assigned Tickets" +msgstr "Les tickets qui me sont assignés" + +msgid "My Bugs" +msgstr "Mes tickets" + +msgid "My Open Requests" +msgstr "Mes requête en cours" + +msgid "My Searches" +msgstr "Mes requêtes" + +msgid "Name of the cloned copy" +msgstr "Nom du clone" + +msgid "Name" +msgstr "Nom" + +msgid "Name, Email Report" +msgstr "Nom, rapport par courrier" + +msgid "New Priority" +msgstr "Nouvelle priorité" + +msgid "New Query" +msgstr "Nouvelle requête" + +msgid "New State" +msgstr "Nouvel état" + +msgid "New Ticket" +msgstr "Nouveau tickets" + +#, c-format +msgid "New comment for ticket %s" +msgstr "Nouveau commentaire pour le ticket %s" + +#, c-format +msgid "New ticket (%s): %s" +msgstr "Nouveau ticket (%s) : %s" + +msgid "New" +msgstr "Nouveau" + +msgid "No configuration information specified for SQL Bugs." +msgstr "Pas d'information de configuration spécifiée pour la base de Whups." + +msgid "No stats available." +msgstr "Aucun état disponible." + +#, c-format +msgid "No such backend '%s' found" +msgstr "Aucune interface « %s »" + +msgid "No such ticket." +msgstr "Aucun ticket de ce type." + +msgid "No tickets matched your search criteria." +msgstr "Aucun ticket ne correspond à vos critères de recherche." + +msgid "No tickets to display" +msgstr "Aucun ticket a afficher" + +msgid "No" +msgstr "Non" + +msgid "None" +msgstr "Aucun" + +msgid "Not yet implemented..." +msgstr "Pas encore implémenté..." + +msgid "Not" +msgstr "Non" + +msgid "Notification Options" +msgstr "Options de notification" + +msgid "Only notify me of ticket changes from other users" +msgstr "" +"Me notifier uniquement des changements portant sur les tickets d'autres " +"utilisateurs" + +msgid "Open Tickets by Queue" +msgstr "Mes ticket ouvert par module" + +msgid "Open Tickets by Owner" +msgstr "Tickets ouvert par propriétaire" + +msgid "Open Tickets by Priority" +msgstr "Ticket ouvert par priorité" + +msgid "Open Tickets by Requester" +msgstr "Ticket ouvert par demandeur" + +msgid "Open Tickets by State" +msgstr "Ticket ouvert par état" + +msgid "Open Tickets by Type" +msgstr "Ticket ouvert par type" + +msgid "Open Tickets by Version" +msgstr "Ticket ouvert par version" + +msgid "Options" +msgstr "Options" + +msgid "Or" +msgstr "Ou" + +msgid "Other Options" +msgstr "Autres options" + +msgid "Owners" +msgstr "Propriétaire" + +msgid "Path" +msgstr "Chemin" + +msgid "Permission Denied." +msgstr "Permission refusée." + +msgid "Priorities for this Type" +msgstr "Priorités pour ce type" + +msgid "Priority Description" +msgstr "Description de la priorité" + +msgid "Priority Name" +msgstr "Nom de la priorité" + +#, c-format +msgid "Priority changed to '%s' by %s on %s." +msgstr "Priorité passée à « %s » par %s sur %s." + +msgid "Priority" +msgstr "Priorité" + +msgid "Private" +msgstr "Privé" + +msgid "Property Criteria" +msgstr "critère de priorité" + +msgid "Query Builder" +msgstr "Construction de requête" + +msgid "Query Parameters" +msgstr "Paramètre de recherche" + +msgid "Query Results" +msgstr "Résultat de la recherche" + +msgid "Re-execute Query" +msgstr "Ré-exécution de la requête" + +msgid "Really delete this attribute? This may cause data problems!!" +msgstr "" +"Suppression définitive de cet état ? Cela peut provoquer des problèmes avec " +"les données !" + +msgid "Really delete this queue? This may cause data problems!!" +msgstr "" +"Suppression définitive de ce module ? Cela peut provoquer des problèmes avec " +"les données !" + +msgid "Really delete this priority? This may cause data problems!!" +msgstr "" +"Suppression définitive de cette priorité ? Cela peut provoquer des problèmes " +"avec les données !" + +msgid "Really delete this state? This may cause data problems!!" +msgstr "" +"Suppression définitive de cet état ? Cela peut provoquer des problèmes avec " +"les données !" + +msgid "Really delete this subject? This may cause data problems!!" +msgstr "" +"Suppression définitive de ce sujet ? Cela peut provoquer des problèmes avec " +"les données !" + +msgid "" +"Really delete this ticket? It will NOT be archived, and will be gone forever." +msgstr "" +"Suppression définitive de ce ticket ? Il NE sera PAS archivé, et sera perdu " +"définitivement." + +msgid "Really delete this type? This may cause data problems!!" +msgstr "" +"Suppression définitive de ce type ? Cela peut provoquer des problèmes avec " +"les données !" + +msgid "Really delete this version? This may cause data problems!!" +msgstr "" +"Suppression définitive de cette version ? Cela peut provoquer des problèmes " +"avec les données !" + +msgid "Refine Search" +msgstr "Affiner la recherche" + +msgid "Refine search" +msgstr "Affiner la recherche" + +msgid "Reminders were sent." +msgstr "Les rappels on été envoyés." + +msgid "Remove User" +msgstr "Retirer un utilisateur" + +msgid "Reports" +msgstr "Rapport" + +msgid "Requester" +msgstr "Demandeur" + +msgid "Required 'database' not specified in bugs configuration." +msgstr "" +"Le paramètre obligatoire 'database' n'est pas spécifié dans la configuration " +"de Whups." + +msgid "Required 'hostspec' not specified in bugs configuration." +msgstr "" +"Le paramètre obligatoire 'hostspec' n'est pas spécifié dans la configuration " +"de Whups." + +msgid "Required 'password' not specified in bugs configuration." +msgstr "" +"Le paramètre obligatoire 'password' n'est pas spécifié dans la configuration " +"de Whups." + +msgid "Required 'phptype' not specified in bugs configuration." +msgstr "" +"Le paramètre obligatoire 'phptype' n'est pas spécifié dans la configuration " +"de Whups." + +msgid "Required 'username' not specified in bugs configuration." +msgstr "" +"Le paramètre obligatoire 'username' n'est pas spécifié dans la configuration " +"de Whups." + +msgid "Resolved" +msgstr "Résolu" + +msgid "Responsible Users" +msgstr "Utilisateurs responsables" + +msgid "Restrict ticket subjects to a specified list?" +msgstr "Restreindre les sujets des tickets à une liste définie ?" + +msgid "Save Query" +msgstr "Enregistrer la requête ?" + +msgid "Save these results as: " +msgstr "Sauver ses résultats en : " + +msgid "Save" +msgstr "Enregistrer" + +#, c-format +msgid "Search %s Attribute" +msgstr "Rechercher l'attribut %s" + +msgid "Search Assignee" +msgstr "Rechercher une personne affectée" + +msgid "Search Attribute" +msgstr "Attribut de recherche" + +msgid "Search Comments" +msgstr "Rechercher des commentaires" + +msgid "Search Requester" +msgstr "Rechercher un demandeur" + +msgid "Search Results" +msgstr "Résultats de recherche" + +msgid "Search Summary" +msgstr "Rechercher un résumé" + +msgid "Search Tickets" +msgstr "Rechercher des tickets" + +msgid "Search" +msgstr "Recherche" + +msgid "Select the view to display after login:" +msgstr "Sélectionnez la vue à afficher après l'identification" + +msgid "Select your preferred language:" +msgstr "Sélectionnez votre langue de travail :" + +msgid "Send Reminders" +msgstr "Envoyer des rappels" + +msgid "Send only for this list of ticket ids" +msgstr "Envoyer seulement pour cette liste d'identifiants de tickets" + +msgid "Set Priority" +msgstr "Affecter une priorité" + +msgid "Set State" +msgstr "Affecter un état" + +msgid "Set Ticket Attributes" +msgstr "Affecter un attribut au ticket" + +msgid "Set Ticket Priority" +msgstr "Affecter une priorité au ticket" + +msgid "Set Ticket State Succeeded" +msgstr "État du ticket mis à jour" + +msgid "Set your preferred display language." +msgstr "Affecter la langue utilisée pour l'affichage." + +msgid "Show \"(X Days Ago)\" in Date field of search results?" +msgstr "" +"Afficher « (Il y a n jours) » dans les champs de type date des résultats de " +"recherche ?" + +msgid "Show comments in chronological order, or most recent first?" +msgstr "" +"Afficher les commentaires par ordre chronologique, ou les plus récents en " +"premier ?" + +msgid "Show ticket IDs in the summary view?" +msgstr "Afficher les identifiants des tickets sur la vue du sommaire ?" + +msgid "Show tickets you have requested in the summary view?" +msgstr "Afficher les tickets demandés sur la vue du sommaire ?" + +msgid "Simple HTML Report" +msgstr "Rapport HTML simple" + +msgid "Some of Whups' configuration files are missing:" +msgstr "Il manque certains fichiers de configuration de WHUPS :" + +msgid "Someone has accepted responsibility for the ticket." +msgstr "Quelqu'un a accepté la responsabilité pour le ticket." + +msgid "Sort Direction" +msgstr "Direction du classement" + +#, c-format +msgid "Sort by %s" +msgstr "Classer par %s" + +msgid "State Category" +msgstr "Catégorie de l'état" + +msgid "State Description" +msgstr "Description de l'état" + +msgid "State Name" +msgstr "Nom de l'état" + +#, c-format +msgid "State changed to '%s' by %s on %s" +msgstr "État modifié en « %s » par %s sur %s" + +msgid "State" +msgstr "État" + +msgid "States for this Type" +msgstr "États pour ce type" + +msgid "Subject Name" +msgstr "Nom du sujet" + +msgid "Subject" +msgstr "Sujet" + +msgid "Subjects associated with this Queue" +msgstr "Sujets associés à ce module" + +msgid "Submit" +msgstr "Envoi" + +#, c-format +msgid "Successfully Cloned %s to %s." +msgstr "Duplication effective de %s vers %s." + +msgid "Summary" +msgstr "Résumé" + +msgid "Text Criteria" +msgstr "Critère textuel" + +msgid "Text" +msgstr "Texte" + +#, c-format +msgid "The attribute '%s' has been added to %s." +msgstr "L'attribut « %s » a été ajouté à %s." + +msgid "The attribute has been deleted." +msgstr "L'attribut a été supprimé." + +msgid "The attribute has been modified." +msgstr "L'attribut a été modifié." + +msgid "The attribute was not deleted." +msgstr "L'attribut n'a pas été supprimé." + +#, c-format +msgid "The queue '%s' has been created." +msgstr "Le queue « %s » a été créé." + +msgid "The queue has been deleted." +msgstr "Le queue a été supprimé." + +msgid "The queue has been modified." +msgstr "Le queue a été modifié." + +msgid "The queue was not deleted." +msgstr "Le queue n'a pas été supprimé." + +#, c-format +msgid "The priority '%s' has been added to %s." +msgstr "La priorité « %s » a été ajoutée à %s." + +msgid "The priority has been deleted." +msgstr "La priorité a été supprimée." + +msgid "The priority has been modified." +msgstr "La priorité a été modifiée." + +msgid "The priority was not deleted." +msgstr "La priorité n'a pas été supprimée." + +msgid "The requested template does not exist." +msgstr "Le modèle demandé n'existe pas." + +#, c-format +msgid "The state '%s' has been added to %s." +msgstr "L'état « %s » a été ajouté à %s." + +msgid "The state has been deleted." +msgstr "L'état a été supprimé." + +msgid "The state has been modified." +msgstr "L'état a été modifié." + +msgid "The state was not deleted." +msgstr "L'état n'a pas été supprimé." + +#, c-format +msgid "The subject '%s' has been added." +msgstr "Le sujet « %s » a été ajouté." + +msgid "The subject has been deleted." +msgstr "Le sujet a été supprimé." + +msgid "The subject has been modified." +msgstr "Le sujet a été modifié." + +msgid "The subject was not deleted." +msgstr "Le sujet n'a pas été supprimé." + +msgid "The ticket has been analyzed and accepted as valid." +msgstr "Le ticket a été analysé et validé." + +msgid "The ticket has been resolved." +msgstr "Le type a été résolu." + +msgid "The ticket is no longer valid for one reason or another." +msgstr "Le ticket n'est plus valide pour une raison quelconque." + +msgid "The ticket is very urgent." +msgstr "Le ticket est très urgent." + +msgid "The ticket was not deleted." +msgstr "Le ticket n'a pas été supprimé." + +#, c-format +msgid "The type '%s' has been modified." +msgstr "Le type « %s » a été modifié." + +msgid "The type has been deleted." +msgstr "Le type a été supprimé." + +msgid "The type was not deleted." +msgstr "Le type n'a pas été supprimé." + +#, c-format +msgid "The version '%s' has been added to %s." +msgstr "La version « %s » a été ajoutée à %s." + +msgid "The version has been deleted." +msgstr "La version a été supprimée." + +msgid "The version has been modified." +msgstr "La version a été modifiée." + +msgid "The version was not deleted." +msgstr "La version n'a pas été supprimée." + +msgid "There are no attribute types to edit" +msgstr "Aucun type d'attribut à éditer" + +msgid "There are no attributes defined for the current type" +msgstr "Il n'y a aucun attribut défini pour le type courant" + +msgid "There are no queues available." +msgstr "Il n'y a aucun queue disponible." + +msgid "There are no queues to edit" +msgstr "Aucun queue à éditer" + +msgid "There are no queues which you can create tickets in." +msgstr "Il n'y a aucun queues pour lequel vous pouvez créer un ticket." + +msgid "There are no queues which you can search." +msgstr "Il n'y a aucun queues dans lequel vous pouvez rechercher." + +msgid "There are no priorities to edit" +msgstr "Aucune priorité à éditer" + +msgid "There are no states to edit" +msgstr "Aucun état à éditer" + +msgid "There are no subjects to edit" +msgstr "Aucun sujet à éditer" + +msgid "" +"There are no ticket types associated with this module; until there are, you " +"cannot create any tickets in this module." +msgstr "" +"Il n'y a aucun type de ticket associé à ce module ; tant qu'il n'y en aura " +"pas, vous ne pourrez associer aucun ticket à ce module." + +msgid "There are no types to edit" +msgstr "Aucun type à éditer" + +msgid "There are no users responsible for this module." +msgstr "Aucun utilisateur n'est responsable de ce module." + +msgid "There are no users to which this ticket can be assigned." +msgstr "Il n'y a aucun utilisateur à qui ce ticket peut être assigne." + +msgid "There are no versions to edit" +msgstr "Aucune version à éditer" + +msgid "There is no data for this graph." +msgstr "Aucune donnée ne correspond à ce graphique." + +msgid "There is no data for this report." +msgstr "Aucune donnée ne correspond à ce rapport." + +#, c-format +msgid "There was an error adding '%s' to the responsible list for '%s': %s" +msgstr "" +"Une erreur s'est produite lors de l'ajout de « %s » à la liste des " +"responsables de « %s » : %s" + +#, c-format +msgid "There was an error adding the subject: %s." +msgstr "Une erreur s'est produite lors de l'ajout du sujet : %s." + +#, c-format +msgid "There was an error creating the attribute: %s." +msgstr "Une erreur s'est produite lors de la création de l'attribut : %s." + +#, c-format +msgid "There was an error creating the module: %s." +msgstr "Une erreur s'est produite lors de la création du module : %s." + +#, c-format +msgid "There was an error creating the priority: %s." +msgstr "Une erreur s'est produite lors de la création de la priorité : %s." + +#, c-format +msgid "There was an error creating the state: %s." +msgstr "Une erreur s'est produite lors de la création de l'état : %s." + +#, c-format +msgid "There was an error creating the version: %s." +msgstr "Une erreur s'est produite lors de la création de la version : %s." + +#, c-format +msgid "There was an error deleting the attribute: %s." +msgstr "Une erreur s'est produite lors de la suppression de l'attribut : %s." + +#, c-format +msgid "There was an error deleting the module: %s." +msgstr "Une erreur s'est produite lors de la suppression du module : %s." + +#, c-format +msgid "There was an error deleting the priority: %s." +msgstr "Une erreur s'est produite lors de la suppression de la priorité : %s." + +#, c-format +msgid "There was an error deleting the state: %s." +msgstr "Une erreur s'est produite lors de la suppression de l'état : %s." + +#, c-format +msgid "There was an error deleting the subject: %s." +msgstr "Une erreur s'est produite lors de la suppression du sujet : %s." + +#, c-format +msgid "There was an error deleting the ticket: %s" +msgstr "Une erreur s'est produite lors de la suppression du ticket : %s." + +#, c-format +msgid "There was an error deleting the type: %s." +msgstr "Une erreur s'est produite lors de la suppression du type : %s." + +#, c-format +msgid "There was an error deleting the version: %s." +msgstr "Une erreur s'est produite lors de la suppression de la version : %s." + +#, c-format +msgid "There was an error editing the attribute: %s." +msgstr "Une erreur s'est produite lors de l'édition de l'attribut : %s." + +#, c-format +msgid "There was an error editing the module: %s." +msgstr "Une erreur s'est produite lors de l'édition du module : %s." + +#, c-format +msgid "There was an error editing the priority: %s." +msgstr "Une erreur s'est produite lors de l'édition de la priorité : %s." + +#, c-format +msgid "There was an error editing the state: %s." +msgstr "Une erreur s'est produite lors de l'édition de l'état : %s." + +#, c-format +msgid "There was an error editing the subject: %s." +msgstr "Une erreur s'est produite lors de l'édition du sujet : %s." + +#, c-format +msgid "There was an error editing the version: %s." +msgstr "Une erreur s'est produite lors de l'édition de la version : %s." + +#, c-format +msgid "There was an error listing your assigned tickets: %s" +msgstr "" +"Une erreur s'est produite lors de la récupération des tickets qui vous sont " +"assignés : %s." + +#, c-format +msgid "There was an error listing your open requests: %s" +msgstr "Une erreur s'est produite en listant vos requêtes ouvertes : %s" + +#, c-format +msgid "There was an error modifying the type: %s." +msgstr "Une erreur s'est produite lors de la modification du type : %s." + +#, c-format +msgid "There was an error performing your search: %s" +msgstr "Une erreur s'est produite lors de votre recherche : %s" + +#, c-format +msgid "There was an error removing '%s' from the responsible list for '%s': %s" +msgstr "" +"Une erreur s'est produite lors du retrait de « %s » de la liste des " +"responsables de « %s » : %s." + +msgid "" +"This file controls the default preferences for Whups, and also controls " +"which preferences users can alter." +msgstr "" +"Ce fichier contrôle les préférences de Whups, ainsi que les préférences " +"modifiables par les utilisateurs." + +msgid "" +"This file controls the stylesheet that is used to set colors and fonts in " +"addition to or overriding Horde defaults." +msgstr "" +"Ce fichier contrôle la feuille de style utilisée pour positionner les " +"couleurs et les polices supplémentaires ou en remplacement des défauts de " +"Horde." + +msgid "" +"This file defines the templates that various parts of Whups use to format " +"data." +msgstr "" +"Ce fichier définit les gabarits de mise en forme des données utilisables par " +"Whups à différents endroits." + +msgid "This is a very low priority ticket." +msgstr "Ceci est ticket de très faible priorité." + +msgid "This is an important task, but not urgent." +msgstr "Ceci est une tâche importante, mais non urgente." + +msgid "This is not a search results template." +msgstr "Il n'y pas de gabarit de résultat de recherche." + +msgid "This is not a valid subject." +msgstr "Sujet invalide." + +msgid "" +"This is the main Whups configuration file. It contains paths and options for " +"all Whups scripts." +msgstr "" +"C'est le fichier de configuration principal de WHUPS. Il contient les " +"chemins et les options de tous les scripts de WHUPS." + +#, c-format +msgid "This mail was automatically generated by %s" +msgstr "Ce courrier a été généré automatiquement par %s" + +msgid "" +"This queue requires that you specify a version, but there are no versions " +"associated with it. Until versions are created for this module, you will not " +"be able to create tickets." +msgstr "" +"Ce queue nécessite que vous spécifiez une version, mais aucune version n'est " +"associée avec lui. Tant qu'il n'y aura pas de versions créées pour ce " +"module, vous ne pourrez pas créer de ticket." + +msgid "Ticket #" +msgstr "Ticket N°" + +#, c-format +msgid "Ticket %s Comments" +msgstr "Commentaires sur le ticket %s" + +#, c-format +msgid "Ticket %s Details" +msgstr "Détails du ticket %s" + +#, c-format +msgid "Ticket %s has been assigned" +msgstr "Le ticket %s a été affecté" + +#, c-format +msgid "Ticket %s has changed priority" +msgstr "La priorité du ticket %s a été modifiée" + +#, c-format +msgid "Ticket %s has changed state" +msgstr "L'état du ticket %s a été modifié" + +#, c-format +msgid "Ticket %s was not found." +msgstr "Le ticket %s n'a pas été trouvé." + +msgid "Ticket Details" +msgstr "Détails du ticket" + +msgid "Ticket ID" +msgstr "Id. du ticket" + +msgid "Ticket State" +msgstr "État du ticket" + +msgid "Ticket Stats" +msgstr "État du ticket" + +msgid "Ticket Summary" +msgstr "Résumé du ticket" + +msgid "Ticket Type" +msgstr "Type de ticket" + +msgid "Ticket Types associated with this Queue" +msgstr "Types de ticket associés à ce module" + +msgid "Tickets assigned to you" +msgstr "Les tickets à votre charge" + +msgid "Tickets which are" +msgstr "Ticket qui sont" + +msgid "Tickets you requested" +msgstr "Les tickets que vous avez demandé" + +msgid "Type Description" +msgstr "Description du type" + +msgid "Type Name" +msgstr "Nom du type" + +msgid "Type" +msgstr "Type" + +msgid "Types" +msgstr "Types" + +msgid "Unassigned tickets" +msgstr "Ticket non assigné" + +msgid "Unassigned" +msgstr "Non affecté" + +msgid "Unconfirmed" +msgstr "Non confirmé" + +#, c-format +msgid "Unknown node type %s" +msgstr "Type de nœud %s inconnu" + +msgid "Update Associations" +msgstr "Mettre à jour les associations" + +msgid "User Criteria" +msgstr "Critère utilisateur" + +msgid "User ID" +msgstr "ID Utilisateur" + +msgid "User Options" +msgstr "Options utilisateur" + +msgid "User" +msgstr "Utilisateur" + +msgid "Users responsible for this Queue" +msgstr "Utilisateurs responsables de ce module" + +msgid "Users responsible for this module" +msgstr "Utilisateurs responsables de ce module" + +msgid "Version Description" +msgstr "Description de la version" + +msgid "Version Name" +msgstr "Nom de la version" + +msgid "Version" +msgstr "Version" + +msgid "View Graphs" +msgstr "Voir les graphiques" + +msgid "Viewable only by members of" +msgstr "Consultable uniquement par les membres de" + +msgid "Weekday Day Month HH:MM:SS TZ" +msgstr "Jour ouvrable Jour Mois HH:MM:SS FH" + +msgid "Weekday Day Month" +msgstr "Jour ouvrable Jour Mois" + +msgid "Whups is not properly configured" +msgstr "WHUPS n'est pas configuré correctement" + +msgid "Yes" +msgstr "Oui" + +#, c-format +msgid "You do not have permission to access this ticket (%s)." +msgstr "Vous n'avez pas la permission d'accéder ce ticket (%s)." + +msgid "You have no saved queries." +msgstr "Vous n'avez aucune requête sauvegardée." + +msgid "You must select at least one queue to send reminders for." +msgstr "" +"Vous devez sélectionner au moins un queue pour lequel envoyer des rappels." + +msgid "Your Email Address" +msgstr "Votre adresse électronique" + +msgid "Your Information" +msgstr "Vos données" + +#, c-format +msgid "Your ticket id is %s. " +msgstr "L'identifiant de votre ticket est %s." + +msgid "contains (case insensitive) substring" +msgstr "contient une sous-chaîne (non sensible à la casse)" + +msgid "contains (case sensitive) substring" +msgstr "contient une sous-chaîne (sensible à la casse)" + +msgid "contains the word" +msgstr "contient le mot" + +msgid "is greater than" +msgstr "est supérieur à" + +msgid "is less than" +msgstr "est inférieur à" + +msgid "is" +msgstr "est" + +msgid "matches the pattern" +msgstr "correspond au motif" diff --git a/whups/po/it_IT.po b/whups/po/it_IT.po new file mode 100644 index 000000000..74be01c6c --- /dev/null +++ b/whups/po/it_IT.po @@ -0,0 +1,2286 @@ +# Italian translations for Whups package. +# Copyright 2008-2009 The Horde Project +# This file is distributed under the same license as the Whups package. +# Fabio Pedretti , 2008. +# +msgid "" +msgstr "" +"Project-Id-Version: Whups 1.0-cvs\n" +"Report-Msgid-Bugs-To: dev@lists.horde.org\n" +"POT-Creation-Date: 2008-06-16 15:57+0200\n" +"PO-Revision-Date: 2008-06-23 17:43+0200\n" +"Last-Translator: Fabio Pedretti \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: admin/index.php:745 +#, php-format +msgid "\"%s\" is no longer among those responsible for \"%s\"" +msgstr "\"%s\" non è più tra i responsabili di \"%s\"" + +#: templates/menu.inc:5 +msgid "#Id" +msgstr "#Id" + +#: templates/ticket/watchers.inc:3 +#, php-format +msgid "%d people watching, %d people responsible" +msgstr "%d persone stanno guardando, %d persone sono responsabili" + +#: queue/rss.php:96 +#, php-format +msgid "%s %s tickets in %s" +msgstr "%s %s ticket in %s" + +#: queue/rss.php:100 +#, php-format +msgid "%s %s tickets in all queues" +msgstr "%s %s ticket in tutte le code" + +#: lib/Renderer/Comment.php:119 +#, php-format +msgid "%s ⇒ %s" +msgstr "%s ⇒ %s" + +#: lib/Driver.php:480 +#, php-format +msgid "%s (%s) wrote:" +msgstr "%s (%s) ha scritto:" + +#: admin/index.php:700 +#, php-format +msgid "%s added to those responsible for \"%s\"" +msgstr "%s aggiunto tra i responsabili di \"%s\"" + +#: templates/reports/stats.inc:17 +#, php-format +msgid "%s days" +msgstr "%s giorni" + +#: queue/rss.php:104 +#, php-format +msgid "%s tickets in %s" +msgstr "%s ticket in %s" + +#: queue/rss.php:108 +#, php-format +msgid "%s tickets in all queues" +msgstr "%s ticket in tutte le code" + +#: ticket/watch.php:59 +#, php-format +msgid "%s will be notified when this ticket is updated." +msgstr "%s sarà avvisato quando questo ticket sarà aggiornato." + +#: ticket/watch.php:71 +#, php-format +msgid "%s will no longer receive updates for this ticket." +msgstr "%s non riceverà a lungo aggiornamento per questo ticket." + +#: admin/index.php:109 +msgid "- Stage 1" +msgstr "- Fase 1" + +#: admin/index.php:114 +msgid "- Stage 2" +msgstr "- Fase 2" + +#: scripts/mail-filter.php:172 +msgid "--queue-name or --queue-id must specify a valid and public queue." +msgstr "--queue-name o --queue-id deve specificare una coda valida e pubblica." + +#: templates/prevnext.inc:16 +msgid "<>" +msgstr "Ultimo>>" + +#: lib/Forms/Query.php:340 +msgid "Load Query" +msgstr "Carica Richiesta" + +#: lib/Forms/VarRenderer.php:46 +msgid "Loading..." +msgstr "Caricamento..." + +#: config/prefs.php.dist:106 +msgid "MM/DD/YY" +msgstr "MM/GG/AA" + +#: config/prefs.php.dist:107 +msgid "MM/DD/YY HH:MM:SS" +msgstr "MM/GG/AA OO:MM:SS" + +#: lib/Forms/Admin/Type.php:145 +#, php-format +msgid "Make a clone of %s" +msgstr "Fai una copia di %s" + +#: lib/Forms/Query.php:270 +msgid "Match" +msgstr "Abbina" + +#: lib/Forms/Query.php:43 lib/Forms/Query.php:129 lib/Forms/Query.php:271 +msgid "Match Operator" +msgstr "Abbina Operatore" + +#: lib/Query.php:54 +msgid "Match Pattern" +msgstr "Abbina modello" + +#: lib/Query.php:53 +msgid "Match Word" +msgstr "Abbina Parola" + +#: lib/Reports.php:20 +msgid "Maximum time a ticket is unresolved" +msgstr "Tempo massimo, un ticket non è risolto" + +#: lib/Block/tree_menu.php:3 +msgid "Menu List" +msgstr "Lista Menu" + +#: lib/Reports.php:21 +msgid "Minimum time a ticket is unresolved" +msgstr "Tempo Minimo, un ticket non è risolto" + +#: config/prefs.php.dist:146 +msgid "Most recent first" +msgstr "Più recente prima" + +#: templates/prefs/sourceselect.inc:312 +msgid "Move down" +msgstr "Sposta giù" + +#: templates/prefs/sourceselect.inc:310 +msgid "Move up" +msgstr "Sposta su" + +#: ticket/queue.php:180 +#, php-format +msgid "Moved ticket %d to \"%s\"" +msgstr "Ticket %d mosso in \"%s\"" + +#: mybugs.php:54 +#, php-format +msgid "My %s" +msgstr "Mio %s" + +#: mybugs_edit.php:33 +#, php-format +msgid "My %s :: Add Content" +msgstr "Mio %s:: Aggiungi Contenuto" + +#: search.php:106 lib/Block/myqueries.php:3 lib/Block/myqueries.php:24 +msgid "My Queries" +msgstr "Mie Richieste" + +#: lib/Block/myrequests.php:3 lib/Block/myrequests.php:24 +msgid "My Requests" +msgstr "Mie Richieste" + +#: lib/Block/mytickets.php:3 lib/Block/mytickets.php:24 +#: config/prefs.php.dist:75 +msgid "My Tickets" +msgstr "Miei Ticket" + +#: lib/api.php:967 +msgid "My tickets by assignment date" +msgstr "Miei ticket per data di assegnazione" + +#: lib/api.php:966 +msgid "My tickets by creation date" +msgstr "Miei ticket per data di creazione" + +#: lib/api.php:968 +msgid "My tickets by due date" +msgstr "Miei ticket per data di scadenza" + +#: lib/api.php:969 +msgid "My tickets by resolution date" +msgstr "Mie ticket per data di risoluzione" + +#: lib/Forms/Query.php:319 lib/Forms/Query.php:351 +msgid "Name" +msgstr "Nome" + +#: lib/Forms/Admin/Type.php:150 +msgid "Name of the cloned copy" +msgstr "Nome della copia" + +#: lib/Query.php:184 +msgid "Ne_w Query" +msgstr "_Nuova Richiesta" + +#: lib/Driver.php:197 +msgid "New" +msgstr "Nuovo" + +#: lib/Ticket.php:618 lib/Ticket.php:711 +msgid "New Attachment" +msgstr "Nuovo Allegato" + +#: lib/Renderer/Comment.php:57 lib/Renderer/Comment.php:61 +#, php-format +msgid "New Attachment: %s" +msgstr "Nuovo Allegato: %s" + +#: ticket/queue.php:31 +msgid "New Queue" +msgstr "Nuova Coda" + +#: ticket/create.php:66 lib/Block/tree_menu.php:21 +msgid "New Ticket" +msgstr "Nuovo Ticket" + +#: ticket/type.php:30 +msgid "New Type" +msgstr "Nuovo Tipo" + +#: templates/prevnext.inc:26 +msgid "Next>" +msgstr "Prossimo>" + +#: ticket/delete.php:32 lib/Forms/Query.php:378 +#: lib/Forms/Admin/Attribute.php:149 lib/Forms/Admin/Priority.php:121 +#: lib/Forms/Admin/Queue.php:174 lib/Forms/Admin/State.php:121 +#: lib/Forms/Admin/Type.php:131 lib/Forms/Admin/Version.php:96 +msgid "No" +msgstr "No" + +#: lib/Ticket.php:100 +#, php-format +msgid "" +"No priority for this ticket and no default priority for ticket type \"%s\" " +"specified." +msgstr "" +"Nessuna priorità per questo ticket e nessuna priorità di default per il tipo " +"di ticket \"%s\" specificato." + +#: lib/Block/myqueries.php:46 +msgid "No queries have been saved." +msgstr "Non è stata salvata nessuna richiesta." + +#: lib/Driver/sql.php:514 lib/Block/query.php:64 +msgid "No query to run" +msgstr "Nessuna richiesta da caricare" + +#: lib/Block/queuecontents.php:25 +msgid "No queues available." +msgstr "Nessuna coda disponibile." + +#: lib/Ticket.php:92 +#, php-format +msgid "" +"No state for this ticket and no default state for ticket type \"%s\" " +"specified." +msgstr "" +"Nessuno stato per questo ticket e nessuno stato di deafult per il tipo di " +"ticket \"%s\" specificato." + +#: reports.php:19 +msgid "No stats available." +msgstr "Statistiche non disponibili." + +#: lib/Driver.php:516 +#, php-format +msgid "No such backend \"%s\" found" +msgstr "Nessun backend \"%s\" trovato" + +#: lib/View.php:33 +#, php-format +msgid "No such view \"%s\" found" +msgstr "Non abbastanza viste \"%s\" trovate" + +#: lib/Block/mytickets.php:45 +msgid "No tickets are assigned to you." +msgstr "Non hai assegnato nessun ticket" + +#: lib/Block/unassigned.php:45 +msgid "No tickets are unassigned!" +msgstr "Nessun ticket assegnato!" + +#: lib/Block/queuecontents.php:62 lib/Block/queuecontents.php:73 +msgid "No tickets in queue." +msgstr "Nessun ticket in coda." + +#: lib/Whups.php:671 +msgid "No tickets matched your search criteria." +msgstr "Nessun ticket abbinato ai criteri di ricerca." + +#: lib/Ticket.php:84 +#, php-format +msgid "No type for this ticket and no default type for queue \"%s\" specified." +msgstr "" +"Nessun tipo per questo ticket e nessun tipo predefinito per la coda \"%s\" " +"specificata." + +#: templates/prefs/sourceselect.inc:35 lib/Reports.php:88 +msgid "None" +msgstr "Nessuno" + +#: lib/Renderer/Query.php:79 lib/Forms/Query.php:23 +msgid "Not" +msgstr "Not" + +#: query.php:80 +msgid "Not yet implemented." +msgstr "Non ancora implementato" + +#: config/prefs.php.dist:17 +msgid "Notification Options" +msgstr "Opzioni di Notifica" + +#: config/prefs.php.dist:117 +msgid "Only notify me of ticket changes from other users?" +msgstr "Avvisa solo per cambiamenti di ticket fatti da altri utenti?" + +#: config/prefs.php.dist:126 +msgid "Only notify me of ticket changes with comments?" +msgstr "Avvisa solo per cambiamenti di ticket con commento" + +#: queue/rss.php:43 +msgid "Open" +msgstr "Apri" + +#: lib/Block/queuesummary.php:49 +msgid "Open Tickets" +msgstr "Apri Ticket" + +#: lib/Reports.php:11 +msgid "Open Tickets by Owner" +msgstr "Apri Ticket dal Proprietario" + +#: lib/Reports.php:9 +msgid "Open Tickets by Priority" +msgstr "Aori Ticket dalla priorità" + +#: lib/Reports.php:6 +msgid "Open Tickets by Queue" +msgstr "Apri Ticket dalla Coda" + +#: lib/Reports.php:10 +msgid "Open Tickets by Requester" +msgstr "Apri Ticket dalla Richiesta" + +#: lib/Reports.php:7 +msgid "Open Tickets by State" +msgstr "Apri Ticket dallo Stato" + +#: lib/Reports.php:8 +msgid "Open Tickets by Type" +msgstr "Apri Ticket dal Tipo" + +#: lib/Block/queuecontents.php:47 +#, php-format +msgid "Open Tickets in %s" +msgstr "Apri Ticket in %s" + +#: queue/index.php:43 queue/index.php:57 queue/rss.php:119 +#, php-format +msgid "Open tickets in %s" +msgstr "Apri ticket in %s" + +#: queue/rss.php:121 +msgid "Open tickets in all queues." +msgstr "Apri ticket in tutte le code" + +#: lib/Renderer/Query.php:78 lib/Forms/Query.php:22 +msgid "Or" +msgstr "O" + +#: lib/Ticket.php:617 lib/Ticket.php:701 lib/Ticket.php:702 lib/Ticket.php:705 +#: lib/Ticket.php:812 lib/Ticket.php:833 lib/Ticket.php:958 lib/Whups.php:636 +#: lib/Renderer/Query.php:84 lib/Forms/CreateTicket.php:224 +#: lib/Forms/CreateTicket.php:242 lib/Forms/EditTicket.php:104 +msgid "Owners" +msgstr "Proprietari" + +#: lib/Whups.php:821 +#, php-format +msgid "Permanently delete %s?" +msgstr "Cancella definitivamente %s?" + +#: ticket/delete.php:50 ticket/deleteAttachment.php:20 ticket/queue.php:130 +#: ticket/type.php:73 ticket/update.php:21 +msgid "Permission Denied" +msgstr "Permesso Negato" + +#: ticket/delete.php:39 lib/Forms/EditTicket.php:173 +msgid "Permission Denied." +msgstr "Permesso Negato." + +#: query.php:32 runquery.php:37 lib/Forms/Query.php:388 +#, php-format +msgid "Permission denied." +msgstr "Permesso Negato" + +#: lib/Imple/ContactAutoCompleter.php:227 +msgid "Please resolve ambiguous or invalid addresses." +msgstr "Correggi gli indirizzi ambigui o non validi." + +#: lib/Forms/Admin/Type.php:82 lib/Forms/Admin/Type.php:128 +msgid "Priorities for this Type" +msgstr "Priorità per questo Tipo" + +#: ticket/queue.php:116 ticket/type.php:65 lib/Ticket.php:610 +#: lib/Ticket.php:807 lib/Ticket.php:953 lib/Whups.php:624 lib/Whups.php:633 +#: lib/Renderer/Query.php:125 lib/Forms/CreateTicket.php:146 +#: lib/Forms/EditTicket.php:68 lib/Forms/Query.php:197 +#: config/prefs.php.dist:49 +msgid "Priority" +msgstr "Priotità" + +#: lib/Renderer/Comment.php:114 +#, php-format +msgid "Priority ⇒ %s" +msgstr "Priorità ⇒ %s" + +#: lib/Forms/Admin/Priority.php:24 lib/Forms/Admin/Priority.php:70 +#: lib/Forms/Admin/Priority.php:118 +msgid "Priority Description" +msgstr "Descrizione Priorità" + +#: lib/Forms/Admin/Priority.php:23 lib/Forms/Admin/Priority.php:48 +#: lib/Forms/Admin/Priority.php:67 lib/Forms/Admin/Priority.php:94 +#: lib/Forms/Admin/Priority.php:115 +msgid "Priority Name" +msgstr "Nome Priorità" + +#: search.php:106 +msgid "Public Queries" +msgstr "Richieste Pubbliche" + +#: query.php:156 +msgid "Query Builder" +msgstr "Costruttore di richieste" + +#: lib/Forms/QueryParameterForm.php:20 +msgid "Query Parameters" +msgstr "Parametri di Richiesta" + +#: runquery.php:72 lib/Block/query.php:3 lib/Block/query.php:51 +msgid "Query Results" +msgstr "Risultati Richiesta" + +#: lib/Block/query.php:33 +msgid "Query to run" +msgstr "Richieste da caricare" + +#: lib/Ticket.php:606 lib/Ticket.php:803 lib/Ticket.php:918 lib/Ticket.php:923 +#: lib/Whups.php:634 lib/Renderer/Query.php:94 lib/Forms/Query.php:180 +#: lib/Forms/Search.php:36 lib/Block/queuecontents.php:32 +#: lib/Block/queuesummary.php:49 config/prefs.php.dist:50 +msgid "Queue" +msgstr "Coda" + +#: lib/Renderer/Comment.php:99 +#, php-format +msgid "Queue ⇒ %s" +msgstr "Coda ⇒ %s" + +#: lib/Block/queuecontents.php:3 lib/Block/queuecontents.php:49 +msgid "Queue Contents" +msgstr "Contenuto Coda" + +#: lib/Forms/Admin/Queue.php:24 lib/Forms/Admin/Queue.php:89 +#: lib/Forms/Admin/Queue.php:170 +msgid "Queue Description" +msgstr "Descrizione Coda" + +#: lib/Forms/Admin/Queue.php:30 lib/Forms/Admin/Queue.php:97 +msgid "Queue Email" +msgstr "Coda Email" + +#: lib/Forms/CreateTicket.php:33 lib/Forms/CreateTicket.php:44 +#: lib/Forms/Admin/Queue.php:23 lib/Forms/Admin/Queue.php:60 +#: lib/Forms/Admin/Queue.php:85 lib/Forms/Admin/Queue.php:166 +msgid "Queue Name" +msgstr "Nome Coda" + +#: lib/Forms/Admin/Queue.php:26 lib/Forms/Admin/Queue.php:93 +msgid "Queue Slug" +msgstr "Slug Coda" + +#: lib/Block/queuesummary.php:3 lib/Block/queuesummary.php:24 +msgid "Queue Summary" +msgstr "Riassunto Coda" + +#: ticket/queue.php:85 lib/Ticket.php:932 lib/Ticket.php:938 +#: lib/Forms/CreateTicket.php:92 +msgid "Queue Version" +msgstr "Versione Coda" + +#: admin/index.php:35 +msgid "Queue/Type Matri_x" +msgstr "Coda/Tipo _Matrice" + +#: templates/admin/mtmatrix.inc:6 +msgid "Queue/Type Matrix" +msgstr "Coda/Tipo Matrice" + +#: lib/api.php:175 lib/api.php:887 +msgid "Queues" +msgstr "Code" + +#: templates/prevnext.inc:32 +msgid "Re_turn to Search Results" +msgstr "_Ritorna ai Risultati di Ricerca" + +#: lib/Forms/Admin/Attribute.php:147 +msgid "Really delete this attribute? This may cause data problems!" +msgstr "" +"Sicuro di voler eliminare questo attributo? Questo potrebbe causare problemi " +"nei dati!" + +#: lib/Forms/Admin/Priority.php:122 +msgid "Really delete this priority? This may cause data problems!" +msgstr "" +"Sicuro di voler eliminare questa priorità? Questo potrebbe causare problemi " +"nei dati!" + +#: lib/Forms/Query.php:379 +msgid "Really delete this query? This operation is not undoable." +msgstr "" +"Sicuro di voler eliminare questa richiesta? L'operazione non può essere " +"annullata." + +#: lib/Forms/Admin/Queue.php:176 +msgid "Really delete this queue? This may cause data problems!" +msgstr "" +"Sicuro di voler eliminare questa coda? Questo potrebbe causare problemi nei " +"dati!" + +#: lib/Forms/Admin/State.php:122 +msgid "Really delete this state? This may cause data problems!" +msgstr "" +"Sicuro di voler eliminare questo stato? Questo potrebbe causare problemi nei " +"dati!" + +#: ticket/delete.php:33 +msgid "" +"Really delete this ticket? It will NOT be archived, and will be gone forever." +msgstr "" +"Sicuro di voler eliminare questo ticket? L'ticket NON sarà archiviato e sarà " +"perso." + +#: lib/Forms/Admin/Type.php:132 +msgid "Really delete this type? This may cause data problems!" +msgstr "" +"Sicuro di voler eliminare questo tipo? Questo potrebbe causare problemi nei " +"dati!" + +#: lib/Forms/Admin/Version.php:97 +msgid "Really delete this version? This may cause data problems!" +msgstr "" +"Sicuro di voler eliminare questa versione? Questo potrebbe causare problemi " +"nei dati!" + +#: lib/Mail.php:217 +msgid "Received message:" +msgstr "Messaggi ricevuti" + +#: search.php:87 +msgid "Refine Search" +msgstr "Raffina Ricerca" + +#: admin/index.php:1039 +msgid "Reminders were sent." +msgstr "Ricorda dove spedito." + +#: lib/Forms/Admin/User.php:59 +msgid "Remove User" +msgstr "Elimina Utente" + +#: ticket/watch.php:48 +msgid "Remove Watcher" +msgstr "Elimina Spettatore" + +#: templates/prefs/sourceselect.inc:300 +msgid "Remove source" +msgstr "Elimina la sorgente" + +#: lib/Renderer/Comment.php:94 +msgid "Reply to this comment" +msgstr "Rispondi a questo commento" + +#: reports.php:24 +msgid "Reports" +msgstr "Rapporti" + +#: lib/Ticket.php:965 lib/Whups.php:635 lib/Renderer/Query.php:86 +msgid "Requester" +msgstr "Richiedente" + +#: lib/Forms/Admin/Attribute.php:28 lib/Forms/Admin/Attribute.php:99 +msgid "Required Attribute?" +msgstr "Attributo Richiesto?" + +#: lib/Driver.php:199 lib/Ticket.php:991 lib/Whups.php:640 lib/api.php:1010 +#: config/prefs.php.dist:54 +msgid "Resolved" +msgstr "Risolto" + +#: lib/Forms/Admin/User.php:61 +msgid "Responsible Users" +msgstr "Utente Responsabile" + +#: lib/Forms/EditTicket.php:143 +msgid "Restrict Comment to:" +msgstr "Restringi Commenti a:" + +#: lib/Whups.php:275 +msgid "S_et Queue" +msgstr "_Imposta Coda" + +#: lib/Query.php:202 +msgid "Sa_ve Query" +msgstr "Sal_va Richiesta" + +#: templates/view/results.inc:36 lib/Forms/Query.php:317 +msgid "Save" +msgstr "Salva" + +#: lib/Forms/Query.php:316 +msgid "Save Query" +msgstr "Salva Richiesta" + +#: templates/view/results.inc:30 +msgid "Save these results as: " +msgstr "Salva questi risultati come:" + +#: search.php:55 lib/Block/tree_menu.php:30 +msgid "Search" +msgstr "Cerca" + +#: lib/Forms/Query.php:274 +#, php-format +msgid "Search %s Attribute" +msgstr "Cerca Attributo %s" + +#: lib/Forms/Query.php:277 +msgid "Search Attribute" +msgstr "Cerca Attributo" + +#: lib/Forms/Query.php:46 lib/Forms/Query.php:131 +msgid "Search Comments" +msgstr "Cerca Commenti" + +#: lib/Forms/Query.php:44 +msgid "Search Owners" +msgstr "Cerca Proprietari" + +#: lib/Forms/Query.php:45 +msgid "Search Requester" +msgstr "Cerca Richiedenti" + +#: search.php:79 +msgid "Search Results" +msgstr "Risultati Ricerca" + +#: templates/prevnext.inc:38 +#, php-format +msgid "Search Results: %s of %s" +msgstr "Risultati Ricerca: %s of %s" + +#: lib/Forms/Query.php:130 +msgid "Search Summary" +msgstr "Riassunto Ricerca" + +#: config/prefs.php.dist:76 +msgid "Search Tickets" +msgstr "Cerca ticket" + +#: config/prefs.php.dist:25 +msgid "Select address book sources for adding and searching for addresses." +msgstr "Seleziona le fonti della rubrica per aggiungere e cercare indirizzi." + +#: templates/prefs/sourceselect.inc:319 +msgid "Select all fields to search when expanding addresses." +msgstr "" +"Scegli l'ordine in cui ricercare le rubriche quando espandi gli indirizzi" + +#: config/prefs.php.dist:78 +msgid "Select the view to display after login:" +msgstr "Scegli la visualizzazione da mostrare dopo l'accesso:" + +#: templates/prefs/sourceselect.inc:303 templates/prefs/sourceselect.inc:305 +msgid "Selected Address books:" +msgstr "Rubriche Selezionate:" + +#: admin/index.php:36 +msgid "Sen_d Reminders" +msgstr "_Spedisci Promemoria" + +#: lib/Forms/Admin.php:23 +msgid "Send Reminders" +msgstr "Spedisci Promemoria" + +#: lib/Forms/Admin.php:34 +msgid "Send only for this list of ticket ids" +msgstr "Spedisci solo per questa lista di Id di ticket" + +#: lib/Forms/Admin/Priority.php:80 lib/Forms/Admin/Priority.php:82 +msgid "Set Default Priority" +msgstr "Imposta Priorità di Default" + +#: lib/Forms/Admin/State.php:80 lib/Forms/Admin/State.php:82 +msgid "Set Default State" +msgstr "Imposta Stato di Default" + +#: ticket/queue.php:200 ticket/queue.php:209 ticket/queue.php:221 +msgid "Set Queue - Step 1" +msgstr "Imposta Coda - Passo 1" + +#: ticket/queue.php:201 ticket/queue.php:210 +msgid "Set Queue - Step 2" +msgstr "Imposta Coda - Passo 2" + +#: ticket/queue.php:211 +msgid "Set Queue - Step 3" +msgstr "Imposta Coda - Passo 3" + +#: ticket/queue.php:188 +#, php-format +msgid "Set Queue for %s" +msgstr "Imposta Coda per %s" + +#: lib/api.php:906 +msgid "Set Requester" +msgstr "Imposta Richiedente" + +#: ticket/type.php:138 ticket/type.php:147 +msgid "Set Type - Step 1" +msgstr "Imposta Tipo - Passo 1" + +#: ticket/type.php:139 +msgid "Set Type - Step 2" +msgstr "Imposta Tipo - Passo 2" + +#: ticket/type.php:126 +#, php-format +msgid "Set Type for %s" +msgstr "Imposta Tipo per %s" + +#: lib/Whups.php:280 +msgid "Set _Type" +msgstr "Imposta _Tipo" + +#: config/prefs.php.dist:144 +msgid "Show comments in chronological order, or most recent first?" +msgstr "Mostra commenti in ordine cronologico, o prima il più recente?" + +#: config/prefs.php.dist:95 +msgid "Show ticket IDs in the summary view?" +msgstr "Mostra Id ticket nella vista del sommario?" + +#: config/prefs.php.dist:87 +msgid "Show tickets you have requested in the summary view?" +msgstr "Mostra ticket richiesti nella vista del sommario?" + +#: config/templates.php.dist:16 +msgid "Simple HTML Report" +msgstr "Semplice Rapporto HTML" + +#: lib/Forms/Admin/Queue.php:27 +#, php-format +msgid "" +"Slugs allows direct access to this queue's open tickets by visiting: %s. " +"
Slug names may contain only letters, numbers or the _ (underscore) " +"character." +msgstr "" +"Permetti l'accesso diretto alla coda aperta dagli ticket visitati: %s.
I nomi possono contenere solo lettere, numeri o il carattere _ " +"(underscore) " + +#: templates/view/results.inc:51 templates/view/results.inc:55 +#, php-format +msgid "Sort by %s" +msgstr "Ordina per %s" + +#: lib/Forms/AddComment.php:20 lib/Forms/AddComment.php:51 +#: lib/Forms/CreateTicket.php:135 lib/Forms/CreateTicket.php:174 +msgid "Spam protection" +msgstr "Protezione Spam" + +#: ticket/queue.php:115 ticket/type.php:64 lib/Ticket.php:609 +#: lib/Ticket.php:806 lib/Ticket.php:949 lib/Whups.php:625 lib/Whups.php:631 +#: lib/Renderer/Query.php:117 lib/Forms/EditTicket.php:62 +#: lib/Forms/Query.php:192 config/prefs.php.dist:47 +msgid "State" +msgstr "Stato" + +#: lib/Renderer/Comment.php:109 +#, php-format +msgid "State ⇒ %s" +msgstr "Stato ⇒ %s" + +#: lib/Forms/Admin/State.php:25 lib/Forms/Admin/State.php:70 +msgid "State Category" +msgstr "Stato Categoria" + +#: lib/Forms/Admin/State.php:24 lib/Forms/Admin/State.php:67 +#: lib/Forms/Admin/State.php:118 +msgid "State Description" +msgstr "Descrizione Stato" + +#: lib/Forms/Admin/State.php:23 lib/Forms/Admin/State.php:47 +#: lib/Forms/Admin/State.php:64 lib/Forms/Admin/State.php:96 +#: lib/Forms/Admin/State.php:115 +msgid "State Name" +msgstr "Nome Stato" + +#: lib/Forms/Admin/Type.php:72 lib/Forms/Admin/Type.php:124 +msgid "States for this Type" +msgstr "Stato per questo tipo" + +#: templates/ticket/watchers.inc:1 +msgid "Status" +msgstr "Stato" + +#: ticket/create.php:145 +msgid "Submit" +msgstr "Invio" + +#: admin/index.php:198 +#, php-format +msgid "Successfully Cloned %s to %s." +msgstr "Clonazione di %s in %s eseguita con successo" + +#: ticket/type.php:117 +msgid "Successfully changed ticket type." +msgstr "Camnio tipo di ticket eseguito con successo." + +#: ticket/delete.php:29 lib/Ticket.php:616 lib/Ticket.php:643 +#: lib/Ticket.php:646 lib/Ticket.php:650 lib/Ticket.php:812 lib/Ticket.php:821 +#: lib/Ticket.php:912 lib/Whups.php:623 lib/Whups.php:630 +#: lib/Renderer/Query.php:89 lib/Forms/CreateTicket.php:151 +#: lib/Forms/EditTicket.php:58 config/prefs.php.dist:46 +msgid "Summary" +msgstr "Breve Riassunto" + +#: lib/Renderer/Comment.php:50 +#, php-format +msgid "Summary ⇒ %s" +msgstr "Sommario ⇒ %s" + +#: lib/Forms/Search.php:39 +msgid "Summary like" +msgstr "Sommario tipo" + +#: lib/Renderer/Comment.php:78 +#, php-format +msgid "Taken from %s" +msgstr "Preso da %s" + +#: lib/Forms/Query.php:128 +msgid "Text" +msgstr "Testo" + +#: lib/Driver/sql.php:80 lib/Driver/sql.php:1230 +msgid "That queue slug is already taken. Please select another." +msgstr "Quella coda slug è già presa. Per favore sceglierne un'altra." + +#: lib/Forms/CreateTicket.php:128 +msgid "The Requester's Email Address" +msgstr "Indirizzo Email richiedente" + +#: view.php:55 lib/Ticket.php:439 lib/Ticket.php:487 +msgid "The VFS backend needs to be configured to enable attachment uploads." +msgstr "" +"VFS backend necessita di essere configurato per abilitare l'upload di " +"allegati." + +#: admin/index.php:906 +#, php-format +msgid "The attribute \"%s\" has been added to %s." +msgstr "L'attributo \"%s\" è stato aggiunto a %s." + +#: admin/index.php:1005 +msgid "The attribute has been deleted." +msgstr "L'attributo è stato eliminato." + +#: admin/index.php:973 +msgid "The attribute has been modified." +msgstr "L'attributo è stato modificato." + +#: admin/index.php:1014 +msgid "The attribute was not deleted." +msgstr "L'attributo non è stato eliminato." + +#: admin/index.php:642 +msgid "The default priority has been set." +msgstr "La priorità di Default è stata impostata." + +#: admin/index.php:506 +msgid "The default state has been set." +msgstr "Lo stato di Default è stato impostato." + +#: admin/index.php:556 +#, php-format +msgid "The priority \"%s\" has been added to %s." +msgstr "La priorità \"%s\" è stata aggiunta a %s." + +#: admin/index.php:661 +msgid "The priority has been deleted." +msgstr "La priorità è stata eliminata." + +#: admin/index.php:609 +msgid "The priority has been modified." +msgstr "La priorità è stata modificata." + +#: admin/index.php:670 +msgid "The priority was not deleted." +msgstr "La priorità non era eliminata." + +#: lib/Forms/Query.php:392 +#, php-format +msgid "The query \"%s\" couldn't be deleted: %s" +msgstr "La richiesta \"%s\" non può essere elimata: %s" + +#: lib/Forms/Query.php:394 +#, php-format +msgid "The query \"%s\" has been deleted." +msgstr "La richiesta \"%s\" è stata eliminata." + +#: lib/Forms/Query.php:359 +#, php-format +msgid "The query couldn't be loaded:" +msgstr "La richiesta non può essere caricata:" + +#: admin/index.php:300 +#, php-format +msgid "The queue \"%s\" has been created." +msgstr "la coda \"%s\" è stata creata." + +#: admin/index.php:392 +msgid "The queue has been deleted." +msgstr "La coda è stata eliminata." + +#: admin/index.php:359 +msgid "The queue has been modified." +msgstr "La coda è stata eliminata." + +#: admin/index.php:400 +msgid "The queue was not deleted." +msgstr "La coda non è stata eliminata." + +#: lib/MIME/Viewer/zip.php:58 +msgid "The requested file does not exist in the Zip attachment." +msgstr "Il file richiesto non esiste nell'allegato zip." + +#: data.php:26 +msgid "The requested template does not exist." +msgstr "Il template richiesto non esiste." + +#: admin/index.php:422 +#, php-format +msgid "The state \"%s\" has been added to %s." +msgstr "Lo stato \"%s\" è stato aggiunto a %s." + +#: admin/index.php:525 +msgid "The state has been deleted." +msgstr "Lo stato è stato eliminato." + +#: admin/index.php:475 +msgid "The state has been modified." +msgstr "Lo stato è stato modificato." + +#: admin/index.php:533 +msgid "The state was not deleted." +msgstr "lo stato non è stato eliminato." + +#: ticket/delete.php:77 +msgid "The ticket was not deleted." +msgstr "L'ticket non è stato eliminato." + +#: admin/index.php:223 +#, php-format +msgid "The type \"%s\" has been modified." +msgstr "Il tipo \"%s\" è stato modificato." + +#: admin/index.php:272 +msgid "The type has been deleted." +msgstr "Il tipo è stato eliminato." + +#: admin/index.php:280 +msgid "The type was not deleted." +msgstr "Il tipo non è stato eliminato" + +#: admin/index.php:776 +#, php-format +msgid "The version \"%s\" has been added to %s." +msgstr "la versione \"%s\" è stata aggiunta a %s." + +#: admin/index.php:865 +msgid "The version has been deleted." +msgstr "La versione è stata eliminata." + +#: admin/index.php:835 +msgid "The version has been modified." +msgstr "La versione è stata modificata." + +#: admin/index.php:873 +msgid "The version was not deleted." +msgstr "la versione non è stata eliminata." + +#: lib/Forms/Admin/Attribute.php:70 +msgid "There are no attribute types to edit" +msgstr "Non ci sono tipi di attributi da modificare" + +#: lib/Forms/Query.php:277 +msgid "There are no attributes defined." +msgstr "Non ci sono attributi definiti." + +#: lib/Block/queuesummary.php:44 +msgid "There are no open tickets." +msgstr "Non ci sono ticket aperti." + +#: lib/Forms/Admin/Priority.php:44 lib/Forms/Admin/Priority.php:90 +msgid "There are no priorities to edit" +msgstr "Non ci sono priorità da modificare" + +#: lib/Forms/Admin.php:31 +msgid "There are no queues available." +msgstr "Non ci sono code disponibili." + +#: lib/Forms/Admin/Queue.php:57 +msgid "There are no queues to edit" +msgstr "Non ci sono code da modificare" + +#: lib/Forms/CreateTicket.php:34 +msgid "There are no queues which you can create tickets in." +msgstr "Non ci sono code nelle quali è possibile creare ticket." + +#: lib/Forms/Search.php:34 +msgid "There are no queues which you can search." +msgstr "Non ci sono code che puoi cercare." + +#: lib/Forms/Admin/State.php:43 lib/Forms/Admin/State.php:92 +msgid "There are no states to edit" +msgstr "Non ci sono stati da modificare" + +#: lib/Forms/CreateTicket.php:71 +msgid "" +"There are no ticket types associated with this queue; until there are, you " +"cannot create any tickets in this queue." +msgstr "" +"Non ci sono tipi di ticket associati con questa coda; fino a che non ci " +"saranno non si potrà creare nessun ticket in questa coda." + +#: lib/Forms/Admin/Type.php:43 +msgid "There are no types to edit" +msgstr "Non ci sono tipi da modificare." + +#: lib/Forms/Admin/User.php:75 +msgid "There are no users responsible for this queue." +msgstr "Non ci sono utenti responsabili per questa coda." + +#: lib/Forms/CreateTicket.php:241 +msgid "There are no users to which this ticket can be assigned." +msgstr "Non ci sono utenti ai quali può essere assegnato questo ticket." + +#: lib/Forms/Admin/Version.php:44 +msgid "There are no versions to edit" +msgstr "Non ci sono versioni da modificare" + +#: lib/Reports.php:161 +msgid "There is no data for this report." +msgstr "Non ci sono dati per questo rapporto." + +#: admin/index.php:705 +#, php-format +msgid "There was an error adding \"%s\" to the responsible list for \"%s\":" +msgstr "" +"Si è verificato un errore aggiungendo \"%s\" alla lista responsabile per \"%s" +"\":" + +#: admin/index.php:911 +msgid "There was an error creating the attribute:" +msgstr "Si è verificato un errore nella creazione dell'attributo:" + +#: admin/index.php:561 +msgid "There was an error creating the priority:" +msgstr "Si è verificato un errore nella creazione della priorità:" + +#: admin/index.php:309 +msgid "There was an error creating the queue:" +msgstr "Si è verificato un errore nella creazione della coda:" + +#: admin/index.php:426 +msgid "There was an error creating the state:" +msgstr "Si è verificato un errore nella creazione dello stato:" + +#: admin/index.php:780 +msgid "There was an error creating the version:" +msgstr "Si è verificato un errore nella creazione della versione:" + +#: admin/index.php:1009 +msgid "There was an error deleting the attribute:" +msgstr "Si è verificato un errore durante l'eliminazione dell'attributo:" + +#: admin/index.php:665 +msgid "There was an error deleting the priority:" +msgstr "Si è verificato un errore durante l'eliminazione della priorità:" + +#: admin/index.php:395 +msgid "There was an error deleting the queue:" +msgstr "Si è verificato un errore durante l'eliminazione della coda:" + +#: admin/index.php:528 +msgid "There was an error deleting the state:" +msgstr "Si è verificato un errore durante l'eliminazione dello stato:" + +#: ticket/delete.php:74 +#, php-format +msgid "There was an error deleting the ticket: %s" +msgstr "Si è verificato un errore durante l'eliminazione dell'ticket: %s" + +#: admin/index.php:275 +msgid "There was an error deleting the type:" +msgstr "Si è verificato un errore durante l'eliminazione del tipo:" + +#: admin/index.php:868 +msgid "There was an error deleting the version:" +msgstr "Si è verificato un errore durante l'eliminazione della versione:" + +#: admin/index.php:981 +msgid "There was an error editing the attribute:" +msgstr "Si è verificato un errore durante la modifica dell'attributo:" + +#: admin/index.php:615 +msgid "There was an error editing the priority:" +msgstr "Si è verificato un errore durante la modifica della priorità:" + +#: admin/index.php:375 +msgid "There was an error editing the queue:" +msgstr "Si è verificato un errore durante la modifica della coda:" + +#: admin/index.php:480 +msgid "There was an error editing the state:" +msgstr "Si è verificato un errore durante la modifica dello stato:" + +#: admin/index.php:841 +msgid "There was an error editing the version:" +msgstr "Si è verificato un errore durante la modifica della versione:" + +#: lib/Forms/Admin/User.php:35 +#, php-format +msgid "There was an error listing users: %s; %s" +msgstr "" +"Si è verificato un errore durante la catalogazione degli utenti: %s; %s" + +#: queue/index.php:52 +#, php-format +msgid "There was an error locating tickets in this queue: " +msgstr "" +"Si è verificato un errore durante la localizzazione degli ticket in questa " +"coda:" + +#: admin/index.php:219 +msgid "There was an error modifying the type:" +msgstr "Si è verificato un errore durante la modifica del tipo:" + +#: search.php:72 +#, php-format +msgid "There was an error performing your search: %s" +msgstr "Si è verificato un errore durante la ricerca: %s" + +#: admin/index.php:750 +#, php-format +msgid "" +"There was an error removing \"%s\" from the responsible list for \"%s\":" +msgstr "" +"Si è verificato un errore durante la rimozione di \"%s\" dalla lista dei " +"responsabili di \"%s\":" + +#: admin/index.php:638 +msgid "There was an error setting the default priority:" +msgstr "" +"Si è verificato un errore durante l'impostazione delle priorità di default:" + +#: admin/index.php:502 +msgid "There was an error setting the default state:" +msgstr "" +"Si è verificato un errore durante l'impostazione dello stato di default:" + +#: lib/Forms/Admin/Queue.php:31 +msgid "" +"This email address will be used when sending notifications for any queue " +"tickets." +msgstr "" +"Questo indirizzo email sarà usato per mandare notificazioni da qualsiasi " +"ticket della coda." + +#: data.php:29 +msgid "This is not a search results template." +msgstr "Questo non è un risultato di ricerca template." + +#: ticket/queue.php:80 lib/Forms/CreateTicket.php:87 +msgid "" +"This queue requires that you specify a version, but there are no versions " +"associated with it. Until versions are created for this queue, you will not " +"be able to create tickets." +msgstr "" +"Questa coda richiede che venga specificata una versione, non c'è nessuna " +"versione associata con essa. Fino a che una versino non sarà creata per " +"questa coda, non sarà possibile creare ticket." + +#: lib/Ticket.php:638 lib/Ticket.php:820 +msgid "Ticket" +msgstr "Ticket" + +#: ticket/delete.php:70 +#, php-format +msgid "Ticket %d has been deleted." +msgstr "Ticket %d è stato eliminato." + +#: lib/api.php:938 +#, php-format +msgid "Ticket %s - %s" +msgstr "Ticket %s - %s" + +#: lib/Driver/sql.php:1005 +#, php-format +msgid "Ticket %s was not found." +msgstr "L'ticket %s non è stato trovato." + +#: search.php:98 +msgid "Ticket Search" +msgstr "Cerca ticket" + +#: lib/Forms/CreateTicket.php:141 +msgid "Ticket State" +msgstr "Stato ticket" + +#: templates/reports/stats.inc:3 +msgid "Ticket Stats" +msgstr "Statistiche ticket" + +#: lib/Forms/CreateTicket.php:79 +msgid "Ticket Type" +msgstr "Tipo ticket" + +#: lib/Forms/Admin/Queue.php:103 +msgid "Ticket Types associated with this Queue" +msgstr "Tipo ticket associato a questa coda" + +#: lib/Ticket.php:633 +#, php-format +msgid "Ticket URL: %s" +msgstr "URL ticket: %s" + +#: ticket/update.php:93 +msgid "Ticket Updated" +msgstr "Ticket aggiornato" + +#: lib/api.php:959 +msgid "Tickets" +msgstr "Ticket" + +#: templates/prefs/sourceselect.inc:322 +msgid "" +"To select multiple fields, hold down the Control (PC) or Command (Mac) while " +"clicking." +msgstr "" +"Per selezioni multiple, cliccare tenendo premuto CTRL (PC) o Command (Mac)." + +#: ticket/queue.php:88 lib/Ticket.php:608 lib/Ticket.php:805 +#: lib/Ticket.php:945 lib/Whups.php:632 lib/Renderer/Query.php:108 +#: lib/Forms/Query.php:173 config/prefs.php.dist:48 +msgid "Type" +msgstr "Tipo" + +#: lib/Renderer/Comment.php:104 +#, php-format +msgid "Type ⇒ %s" +msgstr "Tipo ⇒ %s" + +#: lib/Forms/Admin/Type.php:23 lib/Forms/Admin/Type.php:67 +#: lib/Forms/Admin/Type.php:120 +msgid "Type Description" +msgstr "Descrizione Tipo" + +#: lib/Forms/Admin/Type.php:22 lib/Forms/Admin/Type.php:46 +#: lib/Forms/Admin/Type.php:64 lib/Forms/Admin/Type.php:117 +msgid "Type Name" +msgstr "Nome Tipo" + +#: lib/Ticket.php:961 +msgid "Unassigned" +msgstr "Non assegnato" + +#: lib/Block/unassigned.php:3 lib/Block/unassigned.php:24 +msgid "Unassigned Tickets" +msgstr "Ticket non assegnati" + +#: lib/Forms/Admin.php:42 +msgid "Unassigned tickets" +msgstr "Ticket non assegnato" + +#: lib/Driver.php:196 +msgid "Unconfirmed" +msgstr "Non confermato" + +#: lib/Renderer/Query.php:141 lib/Renderer/Query.php:181 +#, php-format +msgid "Unknown node type %s" +msgstr "Tipo di nodo %s non conosciuto" + +#: lib/api.php:896 +msgid "Update" +msgstr "Aggiorna" + +#: ticket/update.php:107 +#, php-format +msgid "Update %s" +msgstr "Aggiorna %s" + +#: templates/admin/mtmatrix.inc:29 +msgid "Update Associations" +msgstr "Update associazioni" + +#: lib/Ticket.php:981 lib/Whups.php:638 +msgid "Updated" +msgstr "Updated" + +#: lib/Ticket.php:615 lib/Ticket.php:640 +msgid "Updated By" +msgstr "Updated da" + +#: lib/Forms/Admin/User.php:34 lib/Forms/Admin/User.php:44 +#: lib/Forms/Admin/User.php:47 +msgid "User" +msgstr "Utente" + +#: lib/Forms/Query.php:42 +msgid "User ID" +msgstr "Nome utente" + +#: lib/Forms/Admin/Queue.php:131 +msgid "Users responsible for this Queue" +msgstr "Utenti responsabili per questa coda" + +#: lib/Forms/Admin/User.php:79 +msgid "Users responsible for this queue" +msgstr "Utenti responsabili per questa coda." + +#: lib/Ticket.php:607 lib/Ticket.php:804 lib/Renderer/Query.php:102 +#: lib/Forms/Query.php:184 config/prefs.php.dist:51 +msgid "Version" +msgstr "Versione" + +#: lib/Forms/Admin/Version.php:24 lib/Forms/Admin/Version.php:70 +#: lib/Forms/Admin/Version.php:93 +msgid "Version Description" +msgstr "Descrizione Versione" + +#: lib/Forms/Admin/Version.php:23 lib/Forms/Admin/Version.php:48 +#: lib/Forms/Admin/Version.php:67 lib/Forms/Admin/Version.php:90 +msgid "Version Name" +msgstr "Nome Versione" + +#: ticket/queue.php:49 ticket/type.php:42 lib/Forms/AddComment.php:38 +msgid "Viewable only by members of" +msgstr "Visualizzabile solo dai membri di" + +#: lib/Forms/AddComment.php:25 +msgid "Watch this ticket" +msgstr "Guarda questo ticket" + +#: ticket/watch.php:77 +#, php-format +msgid "Watchers for %s" +msgstr "Spettatori per %s" + +#: config/prefs.php.dist:104 +msgid "Weekday Day Month" +msgstr "Giorno settimana Giorno Mese" + +#: config/prefs.php.dist:105 +msgid "Weekday Day Month HH:MM:SS TZ" +msgstr "Giorno settimana Giorno Mese OO:MM:SS TZ" + +#: ticket/delete.php:32 lib/Forms/Query.php:378 +#: lib/Forms/Admin/Attribute.php:149 lib/Forms/Admin/Priority.php:121 +#: lib/Forms/Admin/Queue.php:174 lib/Forms/Admin/State.php:121 +#: lib/Forms/Admin/Type.php:131 lib/Forms/Admin/Version.php:96 +msgid "Yes" +msgstr "Si" + +#: view.php:51 +#, php-format +msgid "You are not allowed to view ticket %d." +msgstr "Non sei autorizzato a vedere l'ticket %d." + +#: lib/Driver/sql.php:1014 +#, php-format +msgid "You do not have permission to access this ticket (%s)." +msgstr "Non hai permesso di accedere a questo ticket (%s)." + +#: lib/api.php:548 +msgid "You do not have permission to update this ticket." +msgstr "Non hai permesso di aggiornare questo ticket." + +#: lib/Block/myrequests.php:46 +msgid "You have no open requests." +msgstr "Non hai delle richieste aperte." + +#: lib/Forms/Query.php:348 lib/Block/query.php:28 +msgid "You have no saved queries." +msgstr "Non hai delle richieste salvate." + +#: lib/Whups.php:665 +msgid "You must select at least one queue to send reminders for." +msgstr "Devi selezionare come minimo una coda per mandare promemoria." + +#: lib/Forms/AddComment.php:18 lib/Forms/CreateTicket.php:131 +msgid "Your Email Address" +msgstr "Tuo Indirizzo Email" + +#: ticket/create.php:59 +#, php-format +msgid "" +"Your ticket ID is %s. An appropriate person has been notified of this " +"request." +msgstr "" +"Il tuo Id ticket è %s. Una persona appropriata è stata notificata di questa " +"richiesta." + +#: lib/Mail.php:244 +msgid "[ Could not render body of message. ]" +msgstr "[ Non è possibile aprire il corpo del messaggio. ]" + +#: lib/Whups.php:729 +msgid "_Admin" +msgstr "_Amministratore" + +#: lib/Whups.php:267 +msgid "_Comment" +msgstr "_Commento" + +#: lib/Whups.php:285 +msgid "_Delete" +msgstr "_Elimina" + +#: lib/Query.php:205 +msgid "_Delete Query" +msgstr "E_limina Richiesta" + +#: lib/Query.php:186 +msgid "_Edit Query" +msgstr "_Modifica Richiesta" + +#: admin/index.php:33 +msgid "_Edit Queues" +msgstr "_Modifica Code" + +#: templates/menu.inc:5 +msgid "_Go" +msgstr "V_ai a" + +#: query.php:140 +msgid "_Group Criteria" +msgstr "_Criterio Gruppo" + +#: lib/Whups.php:261 +msgid "_History" +msgstr "_Storia" + +#: lib/Query.php:199 +msgid "_Load Query" +msgstr "_Carica Richiesta" + +#: lib/Whups.php:720 +#, php-format +msgid "_My %s" +msgstr "_Mio %s" + +#: lib/Whups.php:723 +msgid "_New Ticket" +msgstr "_Nuovo Ticket" + +#: query.php:138 +msgid "_Property Criteria" +msgstr "_Proprietà criterio" + +#: lib/Whups.php:724 +msgid "_Query Builder" +msgstr "_Costruttore di Richieste" + +#: lib/Whups.php:725 +msgid "_Reports" +msgstr "_Rapporti" + +#: lib/Whups.php:722 +msgid "_Search" +msgstr "_Cerca" + +#: query.php:142 +msgid "_Text Criteria" +msgstr "Criterio di _Testo" + +#: lib/Whups.php:263 +msgid "_Update" +msgstr "_Aggiorna" + +#: query.php:139 +msgid "_User Criteria" +msgstr "Criterio _Utente" + +#: lib/Whups.php:271 +msgid "_Watch" +msgstr "_Guarda" + +#: lib/Renderer/Query.php:161 +msgid "contains (case insensitive) substring" +msgstr "contiene (case insensitive) sottostringhe" + +#: lib/Renderer/Query.php:165 +msgid "contains (case sensitive) substring" +msgstr "contiene (case sensitive) sottostringhe" + +#: lib/Renderer/Query.php:169 +msgid "contains the word" +msgstr "contiene la parola" + +#: lib/Mail.php:94 lib/Mail.php:118 lib/Mail.php:146 +msgid "current user:" +msgstr "utente corrente" + +#: lib/api.php:947 +msgid "estimated time" +msgstr "tempo stimato" + +#: lib/Renderer/Query.php:157 +msgid "is" +msgstr "è" + +#: lib/Renderer/Query.php:149 +msgid "is greater than" +msgstr "è più grande di" + +#: lib/Renderer/Query.php:153 +msgid "is less than" +msgstr "è meno di" + +#: lib/Renderer/Query.php:173 +msgid "matches the pattern" +msgstr "abbina il disegno" diff --git a/whups/po/lt_LT.po b/whups/po/lt_LT.po new file mode 100644 index 000000000..387c6207a --- /dev/null +++ b/whups/po/lt_LT.po @@ -0,0 +1,2006 @@ +# Lithuanian translations for Whups package. +# Copyright 2007-2009 The Horde Project +# This file is distributed under the same license as the Whups package. +# Vilius Sumskas , 2007. +# +msgid "" +msgstr "" +"Project-Id-Version: Whups 1.0-cvs\n" +"Report-Msgid-Bugs-To: dev@lists.horde.org\n" +"POT-Creation-Date: 2007-11-23 16:44+0200\n" +"PO-Revision-Date: 2007-11-23 16:45+0200\n" +"Last-Translator: Vilius Sumskas \n" +"Language-Team: Lithuanian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-13\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%" +"100<10 || n%100>=20) ? 1 : 2);\n" + +#: admin/index.php:605 +#, php-format +msgid "\"%s\" is no longer among those responsible for \"%s\"" +msgstr "\"%s\" jau nebeatsakingas uþ \"%s\"" + +#: templates/menu.inc:5 +msgid "#Id" +msgstr "#Id" + +#: templates/ticket/watchers.inc:3 +#, php-format +msgid "%d people watching, %d people responsible" +msgstr "Stebi %d asmenø, %d asmenys yra atsakingi" + +#: lib/Driver.php:368 +#, php-format +msgid "%s (%s) wrote:" +msgstr "%s (%s) raðë:" + +#: admin/index.php:569 +#, php-format +msgid "%s added to those responsible for \"%s\"" +msgstr "%s nuo ðiol atsakingas uþ \"%s\"" + +#: templates/reports/stats.inc:17 +#, php-format +msgid "%s days" +msgstr "%s dienos" + +#: ticket/watch.php:58 +#, php-format +msgid "%s will be notified when this ticket is updated." +msgstr "%s gaus praneðimus apie bilieto atnaujinimà." + +#: ticket/watch.php:70 +#, php-format +msgid "%s will no longer receive updates for this ticket." +msgstr "%s daugiau nebegaus praneðimø apie bilieto atnaujinimà." + +#: admin/index.php:82 +msgid "- Stage 1" +msgstr "- 1 þingsnis" + +#: admin/index.php:87 +msgid "- Stage 2" +msgstr "- 2 þingnis" + +#: templates/prevnext.inc:12 +msgid "<>" +msgstr "Paskutinis>>" + +#: lib/Query.php:888 +msgid "Load Query" +msgstr "Uþkrauti uþklausà" + +#: config/prefs.php.dist:97 +msgid "MM/DD/YY" +msgstr "MM/DD/YY" + +#: config/prefs.php.dist:98 +msgid "MM/DD/YY HH:MM:SS" +msgstr "MM/DD/YY HH:MM:SS" + +#: lib/Forms/Admin.php:333 +#, php-format +msgid "Make a clone of %s" +msgstr "Kopijuoti %s" + +#: lib/Query.php:818 +msgid "Match" +msgstr "Atitinka" + +#: lib/Query.php:592 lib/Query.php:678 lib/Query.php:819 +msgid "Match Operator" +msgstr "Atitikimo operatorius" + +#: lib/Query.php:54 +msgid "Match Pattern" +msgstr "Atitinkanti forma" + +#: lib/Query.php:53 +msgid "Match Word" +msgstr "Atitinkantis þodis" + +#: lib/Reports.php:20 +msgid "Maximum time a ticket is unresolved" +msgstr "Maksimalus neiðspræsto bilieto laikas" + +#: lib/Block/tree_menu.php:3 +msgid "Menu List" +msgstr "Meniu sàraðas" + +#: lib/Reports.php:21 +msgid "Minimum time a ticket is unresolved" +msgstr "Minimalus neiðspræsto bilieto laikas" + +#: config/prefs.php.dist:128 +msgid "Most recent first" +msgstr "Ið pradþiø naujausi" + +#: ticket/queue.php:174 +#, php-format +msgid "Moved ticket %d to \"%s\"" +msgstr "Bilietas %d perkeltas á \"%s\"" + +#: mybugs.php:52 +#, php-format +msgid "My %s" +msgstr "Mano %s" + +#: mybugs_edit.php:32 +#, php-format +msgid "My %s :: Add Content" +msgstr "Mano %s :: Pridëti turiná" + +#: search.php:106 lib/Block/myqueries.php:3 lib/Block/myqueries.php:24 +msgid "My Queries" +msgstr "Mano uþklausos" + +#: lib/Block/myrequests.php:3 lib/Block/myrequests.php:24 +msgid "My Requests" +msgstr "Mano praðymai" + +#: lib/Block/mytickets.php:3 lib/Block/mytickets.php:24 +#: config/prefs.php.dist:66 +msgid "My Tickets" +msgstr "Mano bilietai" + +#: lib/api.php:902 +msgid "My tickets by assignment date" +msgstr "Mano bilietai pagal paskyrimo datà" + +#: lib/api.php:901 +msgid "My tickets by creation date" +msgstr "Mano bilietai pagal sukûrimo datà" + +#: lib/api.php:903 +msgid "My tickets by due date" +msgstr "Mano bilietai pagal vykdymo datà" + +#: lib/api.php:904 +msgid "My tickets by resolution date" +msgstr "Mano bilietai pagal iðsprendimo datà" + +#: lib/Query.php:867 lib/Query.php:899 +msgid "Name" +msgstr "Pavadinimas" + +#: lib/Forms/Admin.php:338 +msgid "Name of the cloned copy" +msgstr "Kopijos pavadinimas" + +#: lib/Query.php:184 +msgid "Ne_w Query" +msgstr "Nauja uþklausa" + +#: lib/Driver.php:164 +msgid "New" +msgstr "Naujas" + +#: lib/Ticket.php:494 lib/Ticket.php:539 +msgid "New Attachment" +msgstr "Naujas prikabintas failas" + +#: templates/comment.inc:53 templates/comment.inc:55 +#, php-format +msgid "New Attachment: %s" +msgstr "Naujas prikabintas failas: %s" + +#: ticket/queue.php:31 +msgid "New Queue" +msgstr "Nauja eilë" + +#: ticket/create.php:60 lib/Block/tree_menu.php:21 +msgid "New Ticket" +msgstr "Naujas bilietas" + +#: ticket/type.php:34 +msgid "New Type" +msgstr "Naujas tipas" + +#: templates/prevnext.inc:16 +msgid "Next>" +msgstr "Toliau>" + +#: ticket/delete.php:37 lib/Query.php:926 lib/Forms/Admin.php:127 +#: lib/Forms/Admin.php:319 lib/Forms/Admin.php:435 lib/Forms/Admin.php:521 +#: lib/Forms/Admin.php:607 lib/Forms/Admin.php:699 +msgid "No" +msgstr "Ne" + +#: lib/Block/myqueries.php:44 +msgid "No queries have been saved." +msgstr "Neiðsaugota nei viena uþklausa." + +#: lib/Block/query.php:64 lib/Driver/sql.php:420 +msgid "No query to run" +msgstr "Uþklausø nëra" + +#: lib/Block/queuecontents.php:25 +msgid "No queues available." +msgstr "Eiliø nëra." + +#: reports.php:19 +msgid "No stats available." +msgstr "Statistikos nëra." + +#: lib/Driver.php:404 +#, php-format +msgid "No such backend \"%s\" found" +msgstr "Posistemë \"%s\" nerasta" + +#: lib/Block/mytickets.php:45 +msgid "No tickets are assigned to you." +msgstr "Jums nepaskirtas nei vienas bilietas." + +#: lib/Block/unassigned.php:45 +msgid "No tickets are unassigned!" +msgstr "Nepaskirtø bilietø nëra!" + +#: lib/Block/queuecontents.php:62 lib/Block/queuecontents.php:73 +msgid "No tickets in queue." +msgstr "Eilëje bilietø nëra." + +#: lib/Whups.php:530 +msgid "No tickets matched your search criteria." +msgstr "Nerastas nei vienas bilietas atitinkantis jûsø paieðkà." + +#: lib/Reports.php:88 +msgid "None" +msgstr "Nëra" + +#: lib/Query.php:572 templates/queryrenderer.inc:92 +msgid "Not" +msgstr "Ne" + +#: query.php:79 +msgid "Not yet implemented." +msgstr "Dar nerealizuota." + +#: config/prefs.php.dist:17 +msgid "Notification Options" +msgstr "Praneðimø nustatymai" + +#: config/prefs.php.dist:108 +msgid "Only notify me of ticket changes from other users" +msgstr "Perspëti mane tik jeigu bilietà keièia kiti vartotojai" + +#: lib/Block/queuesummary.php:48 +msgid "Open Tickets" +msgstr "Atviri bilietai" + +#: lib/Reports.php:11 +msgid "Open Tickets by Owner" +msgstr "Atviri bilietai pagal savininkà" + +#: lib/Reports.php:9 +msgid "Open Tickets by Priority" +msgstr "Atviri bilietai pagal svarbà" + +#: lib/Reports.php:6 +msgid "Open Tickets by Queue" +msgstr "Atviri bilietai pagal eilæ" + +#: lib/Reports.php:10 +msgid "Open Tickets by Requester" +msgstr "Atviri bilietai pagal uþsakovà" + +#: lib/Reports.php:7 +msgid "Open Tickets by State" +msgstr "Atviri bilietai pagal bûsenà" + +#: lib/Reports.php:8 +msgid "Open Tickets by Type" +msgstr "Atviri bilietai pagal tipà" + +#: lib/Block/queuecontents.php:47 +#, php-format +msgid "Open Tickets in %s" +msgstr "Atviri bilietai eilëje %s" + +#: lib/Query.php:571 templates/queryrenderer.inc:91 +msgid "Or" +msgstr "Arba" + +#: config/prefs.php.dist:9 config/prefs.php.dist:16 +msgid "Other Options" +msgstr "Kiti nustatymai" + +#: lib/Whups.php:495 lib/Ticket.php:493 lib/Ticket.php:531 lib/Ticket.php:532 +#: lib/Ticket.php:534 lib/Ticket.php:604 lib/Ticket.php:621 lib/Ticket.php:669 +#: lib/Forms/CreateTicket.php:186 lib/Forms/CreateTicket.php:198 +#: lib/Forms/EditTicket.php:73 templates/queryrenderer.inc:97 +msgid "Owners" +msgstr "Savininkai" + +#: lib/Whups.php:678 +#, php-format +msgid "Permanently delete %s?" +msgstr "Visiðkai iðtrinti %s?" + +#: ticket/update.php:23 ticket/delete.php:17 ticket/type.php:17 +#: ticket/queue.php:124 ticket/deleteAttachment.php:17 +msgid "Permission Denied" +msgstr "Neuþtenka teisiø" + +#: ticket/delete.php:44 lib/Forms/EditTicket.php:104 +msgid "Permission Denied." +msgstr "Neuþtenka teisiø." + +#: query.php:31 runquery.php:38 lib/Query.php:936 +#, php-format +msgid "Permission denied." +msgstr "Neuþtenka teisiø." + +#: lib/Forms/Admin.php:270 lib/Forms/Admin.php:316 +msgid "Priorities for this Type" +msgstr "Ðio tipo svarbos" + +#: ticket/type.php:69 ticket/queue.php:110 lib/Whups.php:483 lib/Whups.php:492 +#: lib/Ticket.php:484 lib/Ticket.php:598 lib/Ticket.php:667 lib/Query.php:746 +#: lib/Forms/CreateTicket.php:118 lib/Forms/EditTicket.php:30 +#: templates/queryrenderer.inc:138 config/prefs.php.dist:40 +msgid "Priority" +msgstr "Svarba" + +#: templates/comment.inc:98 +#, php-format +msgid "Priority ⇒ %s" +msgstr "Svarba ⇒ %s" + +#: lib/Forms/Admin.php:449 lib/Forms/Admin.php:495 lib/Forms/Admin.php:518 +msgid "Priority Description" +msgstr "Svarbos apraðymas" + +#: lib/Forms/Admin.php:448 lib/Forms/Admin.php:473 lib/Forms/Admin.php:492 +#: lib/Forms/Admin.php:515 +msgid "Priority Name" +msgstr "Svarbos pavadinimas" + +#: query.php:155 +msgid "Query Builder" +msgstr "Uþklausos" + +#: lib/Forms/QueryParameterForm.php:20 +msgid "Query Parameters" +msgstr "Uþklausos parametrai" + +#: runquery.php:81 lib/Block/query.php:3 lib/Block/query.php:51 +msgid "Query Results" +msgstr "Uþklausos rezultatai" + +#: lib/Block/query.php:33 +msgid "Query to run" +msgstr "Paleisti uþklausà" + +#: lib/Whups.php:493 lib/Ticket.php:480 lib/Ticket.php:594 lib/Ticket.php:648 +#: lib/Ticket.php:652 lib/Query.php:729 lib/Block/queuesummary.php:48 +#: lib/Block/queuecontents.php:32 lib/Forms/Search.php:38 +#: templates/queryrenderer.inc:107 config/prefs.php.dist:41 +msgid "Queue" +msgstr "Eilë" + +#: templates/comment.inc:86 +#, php-format +msgid "Queue ⇒ %s" +msgstr "Eilë ⇒ %s" + +#: lib/Block/queuecontents.php:3 lib/Block/queuecontents.php:49 +msgid "Queue Contents" +msgstr "Eilës turinys" + +#: lib/Forms/Admin.php:24 lib/Forms/Admin.php:73 lib/Forms/Admin.php:124 +msgid "Queue Description" +msgstr "Eilës apraðymas" + +#: lib/Forms/CreateTicket.php:27 lib/Forms/CreateTicket.php:37 +#: lib/Forms/Admin.php:23 lib/Forms/Admin.php:52 lib/Forms/Admin.php:70 +#: lib/Forms/Admin.php:121 +msgid "Queue Name" +msgstr "Eilës pavadinimas" + +#: lib/Block/queuesummary.php:3 lib/Block/queuesummary.php:24 +msgid "Queue Summary" +msgstr "Eilës santrauka" + +#: ticket/queue.php:79 lib/Ticket.php:657 lib/Ticket.php:661 +#: lib/Forms/CreateTicket.php:77 +msgid "Queue Version" +msgstr "Eilës versija" + +#: admin/index.php:36 +msgid "Queue/Type Matri_x" +msgstr "Eilës/Tipo matrica" + +#: templates/admin/mtmatrix.inc:6 +msgid "Queue/Type Matrix" +msgstr "Eilës/Tipo matrica" + +#: lib/api.php:167 lib/api.php:827 +msgid "Queues" +msgstr "Eilës" + +#: lib/Forms/Admin.php:700 +msgid "Really delete this attribute? This may cause data problems!" +msgstr "Ar tikrai iðtrinti ðá atributà? Tai sukels problemø su duomenimis!" + +#: lib/Forms/Admin.php:522 +msgid "Really delete this priority? This may cause data problems!" +msgstr "Ar tikrai iðtrinti ðià svarbà? Tai sukels problemø su duomenimis!" + +#: lib/Query.php:927 +msgid "Really delete this query? This operation is not undoable." +msgstr "Ar tikrai iðtrinti ðià uþklausà? Graþinti atgal nebegalësite." + +#: lib/Forms/Admin.php:128 +msgid "Really delete this queue? This may cause data problems!" +msgstr "Ar tikrai iðtrinti ðià eilæ? Tai sukels problemø su duomenimis!" + +#: lib/Forms/Admin.php:436 +msgid "Really delete this state? This may cause data problems!" +msgstr "Ar tikrai iðtrinti ðià bûsenà? Tai sukels problemø su duomenimis!" + +#: ticket/delete.php:38 +msgid "" +"Really delete this ticket? It will NOT be archived, and will be gone forever." +msgstr "" +"Ar tikrai iðtrinti ðá bilietà? Jis NËRA archyvuojamas ir bus iðtrintas " +"amþiams." + +#: lib/Forms/Admin.php:320 +msgid "Really delete this type? This may cause data problems!" +msgstr "Ar tikrai iðtrinti ðá tipà? Tai sukels problemø su duomenimis!" + +#: lib/Forms/Admin.php:608 +msgid "Really delete this version? This may cause data problems!" +msgstr "Ar tikrai iðtrinti ðià versijà? Tai sukels problemø su duomenimis!" + +#: search.php:87 +msgid "Refine Search" +msgstr "Pakeisti paieðkà" + +#: admin/index.php:854 +msgid "Reminders were sent." +msgstr "Priminimai iðsiøsti." + +#: lib/Forms/Admin.php:177 +msgid "Remove User" +msgstr "Iðtrinti vartotojà" + +#: ticket/watch.php:48 +msgid "Remove Watcher" +msgstr "Iðtrinti stebëtojà" + +#: templates/comment.inc:81 +msgid "Reply to this comment" +msgstr "Atsakyti á ðá komentarà" + +#: reports.php:24 +msgid "Reports" +msgstr "Raportai" + +#: lib/Whups.php:494 lib/Ticket.php:672 templates/queryrenderer.inc:99 +msgid "Requester" +msgstr "Uþsakovas" + +#: lib/Whups.php:499 lib/Driver.php:166 lib/Ticket.php:679 lib/api.php:945 +#: config/prefs.php.dist:45 +msgid "Resolved" +msgstr "Iðspræsta" + +#: lib/Forms/Admin.php:179 +msgid "Responsible Users" +msgstr "Atsakingi vartotojai" + +#: lib/Forms/EditTicket.php:97 +msgid "Restrict Comment to:" +msgstr "Leisti komentuoti tik:" + +#: templates/prevnext.inc:26 +msgid "Return to Search Results" +msgstr "Gráþti á paieðkos rezultatus" + +#: lib/Whups.php:201 +msgid "S_et Queue" +msgstr "Nustatyti eilæ" + +#: lib/Query.php:202 +msgid "Sa_ve Query" +msgstr "Iðsaugoti uþklausà" + +#: lib/Query.php:865 templates/searchresults.inc:79 +msgid "Save" +msgstr "Iðsaugoti" + +#: lib/Query.php:864 +msgid "Save Query" +msgstr "Iðsaugoti uþklausà" + +#: templates/searchresults.inc:73 +msgid "Save these results as: " +msgstr "Iðsaugoti ðiuos rezultatus kaip: " + +#: search.php:26 lib/Block/tree_menu.php:30 +msgid "Search" +msgstr "Ieðkoti" + +#: lib/Query.php:822 +#, php-format +msgid "Search %s Attribute" +msgstr "Ieðkoti %s atributo" + +#: lib/Query.php:825 +msgid "Search Attribute" +msgstr "Ieðkoti atribute" + +#: lib/Query.php:595 lib/Query.php:680 +msgid "Search Comments" +msgstr "Ieðkoti komentaruose" + +#: lib/Query.php:593 +msgid "Search Owners" +msgstr "Ieðkoti tarp savininkø" + +#: lib/Query.php:594 +msgid "Search Requester" +msgstr "Ieðkoti tarp uþsakovø" + +#: search.php:82 +msgid "Search Results" +msgstr "Paieðkos rezultatai" + +#: templates/prevnext.inc:22 +#, php-format +msgid "Search Results: %s of %s" +msgstr "Paieðkos rezultatai: %s ið %s" + +#: lib/Query.php:679 +msgid "Search Summary" +msgstr "Paieðkos santrauka" + +#: config/prefs.php.dist:67 +msgid "Search Tickets" +msgstr "Bilietø paieðka" + +#: config/prefs.php.dist:69 +msgid "Select the view to display after login:" +msgstr "Pasirinkite, kurá puslapá rodyti po prisijungimo:" + +#: admin/index.php:37 +msgid "Sen_d Reminders" +msgstr "Siøsti priminimus" + +#: lib/Forms/Admin.php:711 +msgid "Send Reminders" +msgstr "Siøsti priminimus" + +#: lib/Forms/Admin.php:722 +msgid "Send only for this list of ticket ids" +msgstr "Siøsti tik bilietams su ðiais id" + +#: ticket/queue.php:195 ticket/queue.php:204 ticket/queue.php:216 +msgid "Set Queue - Step 1" +msgstr "Eilës nustatymas - 1 þingsnis" + +#: ticket/queue.php:196 ticket/queue.php:205 +msgid "Set Queue - Step 2" +msgstr "Eilës nustatymas - 2 þingsnis" + +#: ticket/queue.php:206 +msgid "Set Queue - Step 3" +msgstr "Eilës nustatymas - 3 þingsnis" + +#: ticket/queue.php:182 +#, php-format +msgid "Set Queue for %s" +msgstr "%s eilës nustatymas" + +#: ticket/type.php:137 ticket/type.php:146 +msgid "Set Type - Step 1" +msgstr "Tipo nustatymas - 1 þingsnis" + +#: ticket/type.php:138 +msgid "Set Type - Step 2" +msgstr "Tipo nustatymas - 2 þingsnis" + +#: ticket/type.php:124 +#, php-format +msgid "Set Type for %s" +msgstr "%s tipo nustatymas" + +#: lib/Whups.php:205 +msgid "Set _Type" +msgstr "Nustatyti tipà" + +#: config/prefs.php.dist:126 +msgid "Show comments in chronological order, or most recent first?" +msgstr "Rodyti komentarus chronologine tvarka ar ið pradþiø naujausius?" + +#: config/prefs.php.dist:86 +msgid "Show ticket IDs in the summary view?" +msgstr "Santraukoje rodyti bilietø ID?" + +#: config/prefs.php.dist:78 +msgid "Show tickets you have requested in the summary view?" +msgstr "Santraukoje rodyti jûsø sukurtus bilietus?" + +#: config/templates.php.dist:16 +msgid "Simple HTML Report" +msgstr "Paprastas HTML raportas" + +#: templates/searchresults.inc:98 templates/searchresults.inc:101 +#, php-format +msgid "Sort by %s" +msgstr "Rûðiuoti pagal %s" + +#: lib/Forms/CreateTicket.php:113 lib/Forms/CreateTicket.php:142 +#: lib/Forms/AddComment.php:20 lib/Forms/AddComment.php:51 +msgid "Spam protection" +msgstr "Apsauga nuo ðiukðliø" + +#: ticket/type.php:68 ticket/queue.php:109 lib/Whups.php:484 lib/Whups.php:490 +#: lib/Ticket.php:483 lib/Ticket.php:597 lib/Ticket.php:666 lib/Query.php:741 +#: lib/Forms/EditTicket.php:29 templates/queryrenderer.inc:130 +#: config/prefs.php.dist:38 +msgid "State" +msgstr "Bûsena" + +#: templates/comment.inc:94 +#, php-format +msgid "State ⇒ %s" +msgstr "Bûsena ⇒ %s" + +#: lib/Forms/Admin.php:360 lib/Forms/Admin.php:409 +msgid "State Category" +msgstr "Bûsenos kategorija" + +#: lib/Forms/Admin.php:359 lib/Forms/Admin.php:406 lib/Forms/Admin.php:432 +msgid "State Description" +msgstr "Bûsenos apraðymas" + +#: lib/Forms/Admin.php:358 lib/Forms/Admin.php:384 lib/Forms/Admin.php:403 +#: lib/Forms/Admin.php:429 +msgid "State Name" +msgstr "Bûsenos pavadinimas" + +#: lib/Forms/Admin.php:260 lib/Forms/Admin.php:312 +msgid "States for this Type" +msgstr "Ðio tipo bûsena" + +#: templates/ticket/watchers.inc:1 +msgid "Status" +msgstr "Bûsena" + +#: ticket/create.php:124 +msgid "Submit" +msgstr "Ávesti" + +#: admin/index.php:162 +#, php-format +msgid "Successfully Cloned %s to %s." +msgstr "%s sëkmingai nukopijuotas á %s." + +#: ticket/type.php:115 +msgid "Successfully changed ticket type." +msgstr "Bilieto tipas sëkmingai pakeistas." + +#: ticket/delete.php:34 lib/Whups.php:482 lib/Whups.php:489 lib/Ticket.php:492 +#: lib/Ticket.php:508 lib/Ticket.php:509 lib/Ticket.php:511 lib/Ticket.php:604 +#: lib/Ticket.php:612 lib/Ticket.php:646 lib/Forms/CreateTicket.php:120 +#: lib/Forms/EditTicket.php:28 templates/queryrenderer.inc:102 +#: config/prefs.php.dist:37 +msgid "Summary" +msgstr "Pavadinimas" + +#: templates/comment.inc:47 +#, php-format +msgid "Summary ⇒ %s" +msgstr "Pavadinimas ⇒ %s" + +#: lib/Forms/Search.php:41 +msgid "Summary like" +msgstr "Pavadinimas" + +#: templates/comment.inc:69 +#, php-format +msgid "Taken from %s" +msgstr "Paimta ið %s" + +#: lib/Query.php:677 +msgid "Text" +msgstr "Tekstas" + +#: view.php:55 lib/Ticket.php:356 lib/Ticket.php:394 +msgid "The VFS backend needs to be configured to enable attachment uploads." +msgstr "Prikabintø failø galimybei turi bûti ájungta VFS posistemë." + +#: admin/index.php:739 +#, php-format +msgid "The attribute \"%s\" has been added to %s." +msgstr "Atributas \"%s\" pridëtas á %s." + +#: admin/index.php:825 +msgid "The attribute has been deleted." +msgstr "Atributas iðtrintas." + +#: admin/index.php:794 +msgid "The attribute has been modified." +msgstr "Atributas pakeistas." + +#: admin/index.php:830 +msgid "The attribute was not deleted." +msgstr "Atributas neiðtrintas." + +#: admin/index.php:451 +#, php-format +msgid "The priority \"%s\" has been added to %s." +msgstr "Svarba \"%s\" pridëta á %s." + +#: admin/index.php:532 +msgid "The priority has been deleted." +msgstr "Svarba iðtrinta." + +#: admin/index.php:504 +msgid "The priority has been modified." +msgstr "Svarba pakeistas." + +#: admin/index.php:537 +msgid "The priority was not deleted." +msgstr "Svarba neiðtrinta." + +#: lib/Query.php:940 +#, php-format +msgid "The query \"%s\" couldn't be deleted: %s" +msgstr "Nepavyko iðtrinti uþklausos \"%s\": %s" + +#: lib/Query.php:942 +#, php-format +msgid "The query \"%s\" has been deleted." +msgstr "Uþklausa \"%s\" iðtrinta." + +#: lib/Query.php:907 +#, php-format +msgid "The query couldn't be loaded:" +msgstr "Nepavyko uþkrauti uþklausos:" + +#: admin/index.php:241 +#, php-format +msgid "The queue \"%s\" has been created." +msgstr "Eilë \"%s\" sukurta." + +#: admin/index.php:320 +msgid "The queue has been deleted." +msgstr "Eilë iðtrinta." + +#: admin/index.php:292 +msgid "The queue has been modified." +msgstr "Eilë pakeista." + +#: admin/index.php:325 +msgid "The queue was not deleted." +msgstr "Eilë neiðtrinta." + +#: lib/MIME/Viewer/zip.php:58 +msgid "The requested file does not exist in the Zip attachment." +msgstr "Ðios bylos nëra Zip archyve." + +#: data.php:26 +msgid "The requested template does not exist." +msgstr "Nurodytas ðablonas neegzistuoja." + +#: admin/index.php:340 +#, php-format +msgid "The state \"%s\" has been added to %s." +msgstr "Bûsena \"%s\" pridëta á %s." + +#: admin/index.php:423 +msgid "The state has been deleted." +msgstr "Bûsena iðtrinta." + +#: admin/index.php:394 +msgid "The state has been modified." +msgstr "Bûsena pakeista." + +#: admin/index.php:428 +msgid "The state was not deleted." +msgstr "Bûsena neiðtrinta." + +#: ticket/delete.php:75 +msgid "The ticket was not deleted." +msgstr "Bilietas neiðtrintas." + +#: admin/index.php:180 +#, php-format +msgid "The type \"%s\" has been modified." +msgstr "Tipas \"%s\" pakeistas." + +#: admin/index.php:222 +msgid "The type has been deleted." +msgstr "Tipas iðtrintas." + +#: admin/index.php:227 +msgid "The type was not deleted." +msgstr "Tipas neiðtrintas." + +#: admin/index.php:629 +#, php-format +msgid "The version \"%s\" has been added to %s." +msgstr "Versija \"%s\" pridëta á %s." + +#: admin/index.php:711 +msgid "The version has been deleted." +msgstr "Versija iðtrinta." + +#: admin/index.php:683 +msgid "The version has been modified." +msgstr "Versija pakeista." + +#: admin/index.php:716 +msgid "The version was not deleted." +msgstr "Versija neiðtrinta." + +#: lib/Forms/Admin.php:647 +msgid "There are no attribute types to edit" +msgstr "Atributø tipø redagavimui nëra" + +#: lib/Query.php:825 +msgid "There are no attributes defined for the current type" +msgstr "Ðiam tipui nëra apraðytø atributø" + +#: lib/Block/queuesummary.php:43 +msgid "There are no open tickets." +msgstr "Atvirø bilietø nëra." + +#: lib/Forms/Admin.php:469 +msgid "There are no priorities to edit" +msgstr "Svarbø redagavimui nëra" + +#: lib/Forms/Admin.php:719 +msgid "There are no queues available." +msgstr "Eiliø nëra." + +#: lib/Forms/Admin.php:49 +msgid "There are no queues to edit" +msgstr "Eiliø redagavimui nëra" + +#: lib/Forms/CreateTicket.php:27 +msgid "There are no queues which you can create tickets in." +msgstr "Eiliø, kuriose galite kurti bilietus, nëra." + +#: lib/Forms/Search.php:36 +msgid "There are no queues which you can search." +msgstr "Eiliø, kuriose galite ieðkoti, nëra." + +#: lib/Forms/Admin.php:380 +msgid "There are no states to edit" +msgstr "Bûsenø redagavimui nëra" + +#: lib/Forms/CreateTicket.php:61 +msgid "" +"There are no ticket types associated with this queue; until there are, you " +"cannot create any tickets in this queue." +msgstr "" +"Su ðia eile nëra susietø tipø; kol tai nebus padaryta, jûs negalësite ðioje " +"eilëje kurti naujø bilietø." + +#: lib/Forms/Admin.php:231 +msgid "There are no types to edit" +msgstr "Tipø redagavimui nëra" + +#: lib/Forms/Admin.php:193 +msgid "There are no users responsible for this queue." +msgstr "Vartotojø, atsakingø uþ ðià eilæ, nëra." + +#: lib/Forms/CreateTicket.php:197 +msgid "There are no users to which this ticket can be assigned." +msgstr "Vartotojø, kuriems gali bûti paskirti bilietai, nëra." + +#: lib/Forms/Admin.php:555 +msgid "There are no versions to edit" +msgstr "Versijø redagavimui nëra" + +#: lib/Reports.php:161 +msgid "There is no data for this report." +msgstr "Ðiam raportui neuþtenka duomenø." + +#: admin/index.php:571 +#, php-format +msgid "There was an error adding \"%s\" to the responsible list for \"%s\": %s" +msgstr "Klaida pridedant \"%s\" kaip atsakingà uþ \"%s\": %s" + +#: admin/index.php:742 +#, php-format +msgid "There was an error creating the attribute: %s." +msgstr "Klaida kuriant atributà: %s." + +#: admin/index.php:453 +#, php-format +msgid "There was an error creating the priority: %s." +msgstr "Klaida kuriant svarbà: %s." + +#: admin/index.php:249 +#, php-format +msgid "There was an error creating the queue: %s." +msgstr "Klaida kuriant eilæ: %s." + +#: admin/index.php:342 +#, php-format +msgid "There was an error creating the state: %s." +msgstr "Klaida kuriant bûsenà: %s." + +#: admin/index.php:631 +#, php-format +msgid "There was an error creating the version: %s." +msgstr "Klaida kuriant versijà: %s." + +#: admin/index.php:827 +#, php-format +msgid "There was an error deleting the attribute: %s." +msgstr "Klaida trinant atributà: %s." + +#: admin/index.php:534 +#, php-format +msgid "There was an error deleting the priority: %s." +msgstr "Klaida trinant svarbà: %s." + +#: admin/index.php:322 +#, php-format +msgid "There was an error deleting the queue: %s." +msgstr "Klaida trinant eilæ: %s." + +#: admin/index.php:425 +#, php-format +msgid "There was an error deleting the state: %s." +msgstr "Klaida trinant bûsenà: %s." + +#: ticket/delete.php:72 +#, php-format +msgid "There was an error deleting the ticket: %s" +msgstr "Klaida trinant bilietà: %s" + +#: admin/index.php:224 +#, php-format +msgid "There was an error deleting the type: %s." +msgstr "Klaida trinant tipà: %s." + +#: admin/index.php:713 +#, php-format +msgid "There was an error deleting the version: %s." +msgstr "Klaida trinant versijà: %s." + +#: admin/index.php:802 +#, php-format +msgid "There was an error editing the attribute: %s." +msgstr "Klaida keièiant atributà: %s." + +#: admin/index.php:509 +#, php-format +msgid "There was an error editing the priority: %s." +msgstr "Klaida keièiant svarbà: %s." + +#: admin/index.php:306 +#, php-format +msgid "There was an error editing the queue: %s." +msgstr "Klaida keièiant eilæ: %s." + +#: admin/index.php:399 +#, php-format +msgid "There was an error editing the state: %s." +msgstr "Klaida keièiant bûsenà: %s." + +#: admin/index.php:688 +#, php-format +msgid "There was an error editing the version: %s." +msgstr "Klaida keièiant versijà: %s." + +#: lib/Forms/Admin.php:153 +#, php-format +msgid "There was an error listing users: %s; %s" +msgstr "Klaida parodant vartotojø sàraðà: %s; %s" + +#: admin/index.php:178 +#, php-format +msgid "There was an error modifying the type: %s." +msgstr "Klaida keièiant tipà:: %s." + +#: search.php:76 +#, php-format +msgid "There was an error performing your search: %s" +msgstr "Klaida atliekant jûsø paieðkà: %s" + +#: admin/index.php:607 +#, php-format +msgid "" +"There was an error removing \"%s\" from the responsible list for \"%s\": %s" +msgstr "Klaida trinant \"%s\" ið atsakingø uþ \"%s\" sàraðo: %s" + +#: data.php:29 +msgid "This is not a search results template." +msgstr "Tai nëra paieðkos rezultatø ðablonas." + +#: ticket/queue.php:74 lib/Forms/CreateTicket.php:72 +msgid "" +"This queue requires that you specify a version, but there are no versions " +"associated with it. Until versions are created for this queue, you will not " +"be able to create tickets." +msgstr "" +"Ðioje eilëje reikia nurodyti versijas, taèiau su ja nesusieta jokia versija. " +"Jûs negalësite kurti naujø bilietø tol, kol eilei nebus sukurtos versijos." + +#: lib/Ticket.php:505 lib/Ticket.php:611 +msgid "Ticket" +msgstr "Bilietas" + +#: ticket/delete.php:68 +#, php-format +msgid "Ticket %d has been deleted." +msgstr "Bilietas %d iðtrintas." + +#: lib/api.php:873 +#, php-format +msgid "Ticket %s - %s" +msgstr "Bilietas %s - %s" + +#: lib/Driver/sql.php:871 +#, php-format +msgid "Ticket %s was not found." +msgstr "Bilietas %s nerastas." + +#: search.php:98 +msgid "Ticket Search" +msgstr "Bilieto paieðka" + +#: lib/Forms/CreateTicket.php:117 +msgid "Ticket State" +msgstr "Bilieto bûsena" + +#: templates/reports/stats.inc:3 +msgid "Ticket Stats" +msgstr "Bilieto statistika" + +#: lib/Forms/CreateTicket.php:66 +msgid "Ticket Type" +msgstr "Bilieto tipas" + +#: lib/Forms/Admin.php:76 +msgid "Ticket Types associated with this Queue" +msgstr "Bilietø tipai susieti su ðia eile" + +#: lib/Ticket.php:501 +#, php-format +msgid "Ticket URL: %s\n" +msgstr "Bilieto URL: %s\n" + +#: ticket/update.php:82 +msgid "Ticket Updated" +msgstr "Bilietas atnaujintas" + +#: lib/api.php:894 +msgid "Tickets" +msgstr "Bilietai" + +#: lib/Forms/Search.php:43 +msgid "Tickets which are" +msgstr "Bilietai kurie yra" + +#: ticket/queue.php:82 lib/Whups.php:491 lib/Ticket.php:482 lib/Ticket.php:596 +#: lib/Ticket.php:665 lib/Query.php:722 templates/queryrenderer.inc:121 +#: config/prefs.php.dist:39 +msgid "Type" +msgstr "Tipas" + +#: templates/comment.inc:90 +#, php-format +msgid "Type ⇒ %s" +msgstr "Tipas ⇒ %s" + +#: lib/Forms/Admin.php:211 lib/Forms/Admin.php:255 lib/Forms/Admin.php:308 +msgid "Type Description" +msgstr "Tipo apraðymas" + +#: lib/Forms/Admin.php:210 lib/Forms/Admin.php:234 lib/Forms/Admin.php:252 +#: lib/Forms/Admin.php:305 +msgid "Type Name" +msgstr "Tipo pavadinimas" + +#: lib/Forms/Search.php:46 +msgid "Types" +msgstr "Tipai" + +#: lib/Ticket.php:670 +msgid "Unassigned" +msgstr "Nepaskirtas" + +#: lib/Block/unassigned.php:3 lib/Block/unassigned.php:24 +msgid "Unassigned Tickets" +msgstr "Nepaskirti bilietai" + +#: lib/Forms/Admin.php:730 +msgid "Unassigned tickets" +msgstr "Nepaskirti bilietai" + +#: lib/Driver.php:163 +msgid "Unconfirmed" +msgstr "Nepatvirtintas" + +#: templates/queryrenderer.inc:148 templates/queryrenderer.inc:188 +#, php-format +msgid "Unknown node type %s" +msgstr "Neþinomas ðakos tipas %s" + +#: lib/api.php:841 +msgid "Update" +msgstr "Atnaujinti" + +#: ticket/update.php:97 +#, php-format +msgid "Update %s" +msgstr "Atnaujinti %s" + +#: templates/admin/mtmatrix.inc:29 +msgid "Update Associations" +msgstr "Atnaujinti sàsajas" + +#: lib/Whups.php:497 lib/Ticket.php:677 +msgid "Updated" +msgstr "Atnaujintas" + +#: lib/Ticket.php:491 lib/Ticket.php:506 +msgid "Updated By" +msgstr "Atnaujinta" + +#: lib/Forms/Admin.php:152 lib/Forms/Admin.php:162 lib/Forms/Admin.php:165 +msgid "User" +msgstr "Vartotojas" + +#: lib/Query.php:591 +msgid "User ID" +msgstr "Vartotojo ID" + +#: lib/Forms/Admin.php:94 +msgid "Users responsible for this Queue" +msgstr "Vartotojø atsakingi uþ ðià eilæ" + +#: lib/Forms/Admin.php:197 +msgid "Users responsible for this queue" +msgstr "Vartotojø atsakingi uþ ðià eilæ" + +#: lib/Ticket.php:481 lib/Ticket.php:595 lib/Query.php:733 +#: templates/queryrenderer.inc:115 config/prefs.php.dist:42 +msgid "Version" +msgstr "Versija" + +#: lib/Forms/Admin.php:535 lib/Forms/Admin.php:581 lib/Forms/Admin.php:604 +msgid "Version Description" +msgstr "Versijos apraðymas" + +#: lib/Forms/Admin.php:534 lib/Forms/Admin.php:559 lib/Forms/Admin.php:578 +#: lib/Forms/Admin.php:601 +msgid "Version Name" +msgstr "Versijos pavadinimas" + +#: ticket/type.php:46 ticket/queue.php:45 lib/Forms/AddComment.php:38 +msgid "Viewable only by members of" +msgstr "Gali perþiûrëti tik grupës nariai" + +#: lib/Forms/AddComment.php:25 +msgid "Watch this ticket" +msgstr "Stebëti ðá bilietà" + +#: ticket/watch.php:76 +#, php-format +msgid "Watchers for %s" +msgstr "%s stebëtojai" + +#: config/prefs.php.dist:95 +msgid "Weekday Day Month" +msgstr "Savaitës diena Diena Mënuo" + +#: config/prefs.php.dist:96 +msgid "Weekday Day Month HH:MM:SS TZ" +msgstr "Savaitës diena Diena Mënuo HH:MM:SS LZ" + +#: ticket/delete.php:37 lib/Query.php:926 lib/Forms/Admin.php:127 +#: lib/Forms/Admin.php:319 lib/Forms/Admin.php:435 lib/Forms/Admin.php:521 +#: lib/Forms/Admin.php:607 lib/Forms/Admin.php:699 +msgid "Yes" +msgstr "Taip" + +#: view.php:51 +msgid "You are not allowed to view this ticket." +msgstr "Jûs neturite teisiø matyti ðio bilieto." + +#: lib/Driver/sql.php:874 +#, php-format +msgid "You do not have permission to access this ticket (%s)." +msgstr "Jûs neturite teisiø perþiûrëti ðio bilieto (%s)." + +#: lib/api.php:570 +msgid "You do not have permission to update this ticket." +msgstr "Jûs neturite teisiø keisti ðio bilieto." + +#: lib/Block/myrequests.php:46 +msgid "You have no open requests." +msgstr "Jûs neturite atvirø bilietø apie kuriuos praneðëte jûs pats." + +#: lib/Query.php:896 lib/Block/query.php:28 +msgid "You have no saved queries." +msgstr "Jûs neturite iðsaugotø uþklausø." + +#: lib/Whups.php:524 +msgid "You must select at least one queue to send reminders for." +msgstr "Priminimø iðsiuntimui turite pasirinkti bent vienà eilæ." + +#: lib/Forms/CreateTicket.php:111 lib/Forms/AddComment.php:18 +msgid "Your Email Address" +msgstr "Jûsø el. paðto adresas" + +#: ticket/create.php:53 +#, php-format +msgid "" +"Your ticket ID is %s. An appropriate person has been notified of this " +"request." +msgstr "" +"Jûsø bilieto ID yra %s. Apie ðià uþklausà buvo praneðta atsakingam asmeniui." + +#: lib/Whups.php:587 +msgid "_Admin" +msgstr "Valdymas" + +#: lib/Whups.php:196 +msgid "_Comment" +msgstr "Komentaras" + +#: lib/Whups.php:206 +msgid "_Delete" +msgstr "Iðtrinti" + +#: lib/Query.php:205 +msgid "_Delete Query" +msgstr "Iðtrinti uþklausà" + +#: lib/Query.php:186 +msgid "_Edit Query" +msgstr "Keisti uþklausà" + +#: admin/index.php:34 +msgid "_Edit Queues" +msgstr "Keisti eiles" + +#: templates/menu.inc:5 +msgid "_Go" +msgstr "Rodyti" + +#: query.php:139 +msgid "_Group Criteria" +msgstr "Grupës kriterijus" + +#: lib/Whups.php:192 +msgid "_History" +msgstr "Istorija" + +#: lib/Query.php:199 +msgid "_Load Query" +msgstr "Uþkrauti uþklausà" + +#: lib/Whups.php:578 +#, php-format +msgid "_My %s" +msgstr "Mano %s" + +#: lib/Whups.php:581 +msgid "_New Ticket" +msgstr "Naujas bilietas" + +#: query.php:137 +msgid "_Property Criteria" +msgstr "Savybës kriterijus" + +#: lib/Whups.php:582 +msgid "_Query Builder" +msgstr "Uþklausos" + +#: lib/Whups.php:583 +msgid "_Reports" +msgstr "Raportai" + +#: lib/Whups.php:580 +msgid "_Search" +msgstr "_Ieðkoti" + +#: query.php:141 +msgid "_Text Criteria" +msgstr "Teksto kriterijus" + +#: lib/Whups.php:194 +msgid "_Update" +msgstr "Atnaujinti" + +#: query.php:138 +msgid "_User Criteria" +msgstr "Vartotojo kriterijus" + +#: lib/Whups.php:198 +msgid "_Watch" +msgstr "Stebëti" + +#: templates/queryrenderer.inc:168 +msgid "contains (case insensitive) substring" +msgstr "turi tekstà (didþiosios/maþosios nesvarbu)" + +#: templates/queryrenderer.inc:172 +msgid "contains (case sensitive) substring" +msgstr "turi tekstà (didþiosios/maþosios svarbu)" + +#: templates/queryrenderer.inc:176 +msgid "contains the word" +msgstr "turi þodá" + +#: lib/api.php:882 +msgid "estimated time" +msgstr "numatytas laikas" + +#: templates/queryrenderer.inc:164 +msgid "is" +msgstr "yra" + +#: templates/queryrenderer.inc:156 +msgid "is greater than" +msgstr "didesnis nei" + +#: templates/queryrenderer.inc:160 +msgid "is less than" +msgstr "maþesnis nei" + +#: templates/queryrenderer.inc:180 +msgid "matches the pattern" +msgstr "atitinka formà" diff --git a/whups/po/nb_NO.po b/whups/po/nb_NO.po new file mode 100644 index 000000000..225e0c2c4 --- /dev/null +++ b/whups/po/nb_NO.po @@ -0,0 +1,2040 @@ +# Whups - Norwegian translation +# Copyright 2006-2009 The Horde Project +# This file is distributed under the same license as the Whups package. +# Torbjorn Grindhaug , 2006. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Whups 1.0-cvs\n" +"Report-Msgid-Bugs-To: dev@lists.horde.org\n" +"POT-Creation-Date: 2006-01-09 15:33+0100\n" +"PO-Revision-Date: 2006-01-09 10:31+0100\n" +"Last-Translator: Torbjorn Grindhaug \n" +"Language-Team: Norwegian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: admin.php:603 +#, php-format +msgid "\"%s\" is no longer among those responsible for \"%s\"" +msgstr "\"%s\" er ikke lenger blant de ansvarlige for \"%s\"" + +#: templates/menu.inc:5 +msgid "#Id" +msgstr "#Id" + +#: lib/Driver.php:277 +#, php-format +msgid "%s (%s) wrote:" +msgstr "%s (%s) skrev:" + +#: admin.php:567 +#, php-format +msgid "%s added to those responsible for \"%s\"" +msgstr "%s er lagt til de som er ansvarlig for \"%s\"" + +#: templates/reports/stats.inc:17 +#, php-format +msgid "%s days" +msgstr "%s dager" + +#: ticket/watch.php:58 +#, php-format +msgid "%s will be notified when this ticket is updated." +msgstr "%s vil få beskjed når denne saken er oppdatert." + +#: ticket/watch.php:70 +#, php-format +msgid "%s will no longer receive updates for this ticket." +msgstr "%s vil ikke lenger få beskjed om oppdateringer på denne saken." + +#: admin.php:81 +msgid "- Stage 1" +msgstr "- Steg 1" + +#: admin.php:86 +msgid "- Stage 2" +msgstr "- Steg 2" + +#: scripts/mail-filter.php:164 +msgid "--priority-name or --priority-id must specify a valid Priority." +msgstr "--priority-name eller --priority-id må angi en gyldig prioritet." + +#: scripts/mail-filter.php:158 +msgid "--queue-name or --queue-id must specify a valid Queue." +msgstr "--queue-name eller --queue-id må angi en gyldig kø." + +#: scripts/mail-filter.php:167 +msgid "--state-name or --state-id must specify a valid State." +msgstr "--state-name eller --state-id må angi en gyldig tilstand." + +#: scripts/mail-filter.php:161 +msgid "--type-name or --type-id must specify a valid Type." +msgstr "--type-name eller --type-id må angi en gyldig type." + +#: templates/prevnext.inc:12 +msgid "<Forrige" + +#: view.php:55 +#, php-format +msgid "Access denied to %s" +msgstr "Tilgang nektet til %s" + +#: lib/Admin.php:709 +msgid "Add Attribute" +msgstr "Ny egenskap" + +#: lib/Query.php:764 +msgid "Add Attribute Criterion" +msgstr "Legg til kriterie for egenskap" + +#: mybugs.php:54 +msgid "Add Content" +msgstr "Legg til innhold" + +#: query.php:205 +msgid "Add Criterion" +msgstr "Legg til kriterie" + +#: lib/Query.php:590 +msgid "Add Group Criterion" +msgstr "Legg til gruppekriterie" + +#: lib/Admin.php:533 +msgid "Add Priority" +msgstr "Ny prioritet" + +#: lib/Query.php:669 +msgid "Add Property Criterion" +msgstr "Legg til kriteriegenskap" + +#: lib/Admin.php:102 lib/Admin.php:103 +msgid "Add Queue" +msgstr "Ny kø" + +#: lib/Admin.php:441 +msgid "Add State" +msgstr "Ny tilstand" + +#: lib/Admin.php:14 lib/Admin.php:15 +msgid "Add Subject" +msgstr "Nytt emne" + +#: lib/Query.php:625 +msgid "Add Text Criterion" +msgstr "Legg til tekstkriterie" + +#: lib/Admin.php:298 lib/Admin.php:299 +msgid "Add Type" +msgstr "Ny type" + +#: admin.php:81 admin.php:86 +#, php-format +msgid "Add Type %s" +msgstr "Legg til type %s" + +#: lib/Query.php:537 +msgid "Add User Criterion" +msgstr "Nytt brukerkriterie" + +#: lib/Admin.php:229 +msgid "Add Users" +msgstr "Legg til brukere" + +#: lib/Admin.php:621 +msgid "Add Version" +msgstr "Legg til versjon" + +#: ticket/watch.php:47 +msgid "Add Watcher" +msgstr "Legg til overvåker" + +#: ticket/create.php:154 +#, php-format +msgid "Adding your ticket failed: %s." +msgstr "Feil ved innlegging av din sak: %s." + +#: admin.php:54 lib/api.php:694 +msgid "Administration" +msgstr "Administrering" + +#: templates/queryrenderer.inc:90 lib/Query.php:518 +msgid "And" +msgstr "And" + +#: search.php:39 search.php:103 search.php:105 search.php:120 search.php:136 +#: search.php:138 lib/Query.php:675 lib/Query.php:683 lib/Query.php:688 +#: lib/Query.php:695 lib/Query.php:700 +msgid "Any" +msgstr "Any" + +#: ticket/update.php:75 ticket/people.php:90 ticket/type.php:45 +#: ticket/comment.php:41 ticket/queue.php:50 +msgid "Any Group" +msgstr "Alle grupper" + +#: config/prefs.php.dist:55 +msgid "Ascending" +msgstr "Stigende" + +#: lib/api.php:709 +msgid "Assign" +msgstr "Tildel" + +#: ticket/people.php:128 +msgid "Assign Ticket Succeeded" +msgstr "Tildeling av sak utført" + +#: lib/Whups.php:479 lib/Ticket.php:601 lib/Driver.php:142 +#: config/prefs.php.dist:44 +msgid "Assigned" +msgstr "Tildelt" + +#: templates/comment.inc:66 +#, php-format +msgid "Assigned to %s" +msgstr "Tildelt til %s" + +#: admin.php:955 +msgid "Associations updated successfully." +msgstr "Koblingene er oppdatert." + +#: ticket/update.php:64 ticket/comment.php:29 lib/Create.php:124 +msgid "Attachment" +msgstr "Vedlegg" + +#: ticket/deleteAttachment.php:29 +#, php-format +msgid "Attachment %s deleted." +msgstr "Vedlegget %s ble slettet." + +#: lib/Ticket.php:388 +#, php-format +msgid "Attachment %s not found." +msgstr "Fant ikke vedlegget %s." + +#: lib/Ticket.php:603 +msgid "Attachments" +msgstr "Vedlegg" + +#: query.php:139 +msgid "Attribute Criteria" +msgstr "Egenskapskriterier" + +#: lib/Admin.php:713 lib/Admin.php:759 lib/Admin.php:782 +msgid "Attribute Description" +msgstr "Beskrivelse av egenskap" + +#: lib/Admin.php:712 lib/Admin.php:737 lib/Admin.php:756 lib/Admin.php:779 +msgid "Attribute Name" +msgstr "Navn på egenskap" + +#: lib/Admin.php:370 +msgid "Attributes for this Type" +msgstr "Egenskaper til denne typen" + +#: config/prefs.php.dist:126 +msgid "Autolink to other tickets in comments?" +msgstr "Automatisk link til andre saker i kommentarer?" + +#: lib/Reports.php:12 +msgid "Average days to close by Owner" +msgstr "Snittdager for ferdigstilling etter eier" + +#: lib/Reports.php:14 +msgid "Average days to close by Queue" +msgstr "Snittdager for ferdigstilling etter kø" + +#: lib/Reports.php:13 +msgid "Average days to close by Requester" +msgstr "Snittdager for ferdigstilling etter innmelder" + +#: lib/Reports.php:19 +msgid "Average time a ticket is unresolved" +msgstr "Gjennomsnittstid en sak er uløst" + +#: lib/Query.php:523 +msgid "Branch Type" +msgstr "Grentype" + +#: lib/Query.php:56 +msgid "Case Insensitive Substring" +msgstr "Delstreng (ikke skill mellom store/små bokstaver)" + +#: templates/queryrenderer.inc:27 +msgid "Change" +msgstr "Endre" + +#: config/prefs.php.dist:11 +msgid "Change display options such as how search results are sorted." +msgstr "Endre hvordan visning av søkeresultater er sortert." + +#: config/prefs.php.dist:18 +msgid "Change options for email notifications of ticket activity." +msgstr "Endre valg for epostmeldinger av saksaktivitet." + +#: query.php:142 +msgid "Choose Action:" +msgstr "Velg handling:" + +#: lib/Query.php:161 +msgid "Choose New Query instead of deleting the root node." +msgstr "Velg Ny Spørring istedetfor å slette rotnoden." + +#: lib/Create.php:33 lib/Create.php:67 +msgid "Choose:" +msgstr "Velg:" + +#: config/prefs.php.dist:136 +msgid "Chronological (oldest first)" +msgstr "Kronologisk (eldste først)" + +#: templates/savedsearches.inc:27 +msgid "Clear All Searches" +msgstr "Fjern alle søk" + +#: lib/Admin.php:421 +msgid "Clone" +msgstr "Klon" + +#: lib/Admin.php:427 +msgid "Clone Description" +msgstr "Kloningsbeskrivelse" + +#: admin.php:120 lib/Admin.php:313 +msgid "Clone Type" +msgstr "Kloningstype" + +#: config/templates.php.dist:43 +msgid "Comma Separated Values (CSV file)" +msgstr "Kommaseparerte verdier (CSV-fil)" + +#: templates/queryrenderer.inc:101 templates/comment.inc:90 +#: templates/comment.inc:121 ticket/update.php:65 ticket/people.php:78 +#: ticket/type.php:35 ticket/comment.php:28 ticket/queue.php:38 +#: lib/Whups.php:193 +msgid "Comment" +msgstr "Kommentar" + +#: ticket/comment.php:94 +msgid "Comment added" +msgstr "Kommentar lagt til" + +#: ticket/comment.php:100 +#, php-format +msgid "Comment on %s" +msgstr "Kommentar på %s" + +#: templates/queryrenderer.inc:100 +msgid "Commentor" +msgstr "Kommentør" + +#: lib/Admin.php:425 +#, php-format +msgid "Copy of %s" +msgstr "Kopi av %s" + +#: lib/MIME/Viewer/zip.php:54 +msgid "Could not extract the requested file from the Zip archive." +msgstr "Kunne ikke pakke ut den forespurte filen fra Zip-arkivet." + +#: lib/Query.php:595 +msgid "Could not find any groups." +msgstr "Fant ingen grupper." + +#: lib/Mail.php:86 +#, php-format +msgid "Could not find ticket \"%s\"." +msgstr "Fant ikke sak \"%s\"." + +#: lib/Admin.php:364 +msgid "Create Default Priorities" +msgstr "Opprett standardprioriteter" + +#: lib/Admin.php:354 +msgid "Create Default States" +msgstr "Opprett standardtilstander" + +#: config/prefs.php.dist:68 +msgid "Create Ticket" +msgstr "Opprett sak" + +#: lib/Create.php:23 +msgid "Create Ticket - Step 1" +msgstr "Opprett sak - Steg 1" + +#: lib/Create.php:58 +msgid "Create Ticket - Step 2" +msgstr "Opprett sak - Steg 2" + +#: lib/Create.php:98 +msgid "Create Ticket - Step 3" +msgstr "Opprett sak - Steg 3" + +#: lib/Create.php:142 +msgid "Create Ticket - Step 4" +msgstr "Opprett sak - Steg 4" + +#: lib/Whups.php:478 lib/Ticket.php:600 config/prefs.php.dist:43 +msgid "Created" +msgstr "Opprettet" + +#: lib/Ticket.php:471 lib/Ticket.php:486 +msgid "Created By" +msgstr "Opprettet av" + +#: query.php:195 query.php:212 +msgid "Current Query" +msgstr "Gjeldende spørring" + +#: templates/queryrenderer.inc:25 +msgid "Current Ticket Type" +msgstr "Gjeldende sakstype" + +#: lib/Ticket.php:531 +msgid "DO NOT REPLY TO THIS MESSAGE. THIS EMAIL ADDRESS IS NOT MONITORED." +msgstr "IKKE SVAR PÅ DENNE MELDINGEN. DENNEN EPOSTADRESSEN BLIR IKKE LEST." + +#: config/prefs.php.dist:99 +msgid "Date/Time format for search results" +msgstr "Dato/klokkeformat for søkeresultater" + +#: config/prefs.php.dist:46 +msgid "Default sorting criteria:" +msgstr "Standard sorteringskriterier:" + +#: config/prefs.php.dist:57 +msgid "Default sorting direction:" +msgstr "Standard sorteringsrekkefølge:" + +#: query.php:143 lib/Whups.php:202 +msgid "Delete" +msgstr "Slett" + +#: lib/Whups.php:649 lib/Whups.php:650 +#, php-format +msgid "Delete %s" +msgstr "Slett %s" + +#: ticket/delete.php:58 +#, php-format +msgid "Delete %s?" +msgstr "Slette %s?" + +#: admin.php:847 lib/Admin.php:725 +msgid "Delete Attribute" +msgstr "Slett egenskap" + +#: lib/Admin.php:771 +msgid "Delete Attribute Confirmation" +msgstr "Bekreft sletting av egenskap" + +#: admin.php:485 lib/Admin.php:549 +msgid "Delete Priority" +msgstr "Slett prioritet" + +#: lib/Admin.php:595 +msgid "Delete Priority Confirmation" +msgstr "Bekreft sletting av prioritet" + +#: lib/Query.php:145 +msgid "Delete Query" +msgstr "Slett spørring" + +#: lib/Query.php:882 +msgid "Delete Query?" +msgstr "Slette spørring?" + +#: admin.php:268 lib/Admin.php:119 +msgid "Delete Queue" +msgstr "Slett kø" + +#: lib/Admin.php:204 +msgid "Delete Queue Confirmation" +msgstr "Bekreft sletting av kø" + +#: templates/savedsearches.inc:45 templates/savedsearches.inc:46 +msgid "Delete Search" +msgstr "Slett søk" + +#: admin.php:375 lib/Admin.php:458 +msgid "Delete State" +msgstr "Slett tilstand" + +#: lib/Admin.php:507 +msgid "Delete State Confirmation" +msgstr "Bekreft sletting av tilstand" + +#: admin.php:646 lib/Admin.php:29 +msgid "Delete Subject" +msgstr "Slett emne" + +#: lib/Admin.php:80 +msgid "Delete Subject Confirmation" +msgstr "Bekreft sletting av emne" + +#: admin.php:114 lib/Admin.php:313 +msgid "Delete Type" +msgstr "Slett type" + +#: lib/Admin.php:384 +msgid "Delete Type Confirmation" +msgstr "Bekreft sletting av type" + +#: admin.php:738 lib/Admin.php:637 +msgid "Delete Version" +msgstr "Slett versjon" + +#: lib/Admin.php:683 +msgid "Delete Version Confirmation" +msgstr "Bekreft sletting av versjon" + +#: lib/Ticket.php:476 lib/Ticket.php:522 +msgid "Deleted Attachment" +msgstr "Slettet vedlegg" + +#: templates/comment.inc:62 +#, php-format +msgid "Deleted Attachment: %s" +msgstr "Slettet vedlegg: %s" + +#: config/prefs.php.dist:56 +msgid "Descending" +msgstr "Synkende" + +#: lib/Create.php:125 +msgid "Description" +msgstr "Beskrivelse" + +#: config/prefs.php.dist:10 +msgid "Display Options" +msgstr "Visningsvalg" + +#: lib/Whups.php:641 +msgid "Download" +msgstr "Last ned" + +#: query.php:144 +msgid "Edit" +msgstr "Rediger" + +#: lib/Admin.php:148 lib/Admin.php:338 +#, php-format +msgid "Edit %s" +msgstr "Rediger %s" + +#: admin.php:842 lib/Admin.php:725 lib/Admin.php:748 +msgid "Edit Attribute" +msgstr "Rediger egenskap" + +#: lib/Admin.php:372 +msgid "Edit Attributes" +msgstr "Rediger egenskaper" + +#: lib/Query.php:134 +msgid "Edit Permissions" +msgstr "Rediger tilganger" + +#: lib/Admin.php:362 +msgid "Edit Priorities" +msgstr "Rediger prioriteringer" + +#: admin.php:480 lib/Admin.php:549 lib/Admin.php:572 +msgid "Edit Priority" +msgstr "Rediger prioritering" + +#: lib/Query.php:126 +msgid "Edit Query" +msgstr "Rediger spørring" + +#: admin.php:262 lib/Admin.php:119 lib/Admin.php:122 +msgid "Edit Queue" +msgstr "Rediger kø" + +#: admin.php:32 lib/Admin.php:121 +msgid "Edit Queues" +msgstr "Rediger køer" + +#: admin.php:370 lib/Admin.php:458 lib/Admin.php:481 +msgid "Edit State" +msgstr "Rediger tilstand" + +#: lib/Admin.php:352 +msgid "Edit States" +msgstr "Rediger tilstander" + +#: admin.php:641 lib/Admin.php:29 lib/Admin.php:51 +msgid "Edit Subject" +msgstr "Rediger emne" + +#: admin.php:34 +msgid "Edit Subjects" +msgstr "Rediger emner" + +#: admin.php:108 lib/Admin.php:313 +msgid "Edit Type" +msgstr "Rediger type" + +#: admin.php:33 +msgid "Edit Types" +msgstr "Rediger typer" + +#: admin.php:733 lib/Admin.php:637 lib/Admin.php:660 +msgid "Edit Version" +msgstr "Rediger versjon" + +#: lib/Admin.php:724 +msgid "Edit or Delete Attributes" +msgstr "Rediger eller slett egenskaper" + +#: lib/Admin.php:548 +msgid "Edit or Delete Priorities" +msgstr "Rediger eller slett prioriteringer" + +#: lib/Admin.php:118 +msgid "Edit or Delete Queues" +msgstr "Rediger eller slett køer" + +#: lib/Admin.php:457 +msgid "Edit or Delete States" +msgstr "Rediger eller slett tilstander" + +#: lib/Admin.php:28 +msgid "Edit or Delete Subjects" +msgstr "Rediger eller slett emner" + +#: lib/Admin.php:312 +msgid "Edit or Delete Types" +msgstr "Rediger eller slett typer" + +#: lib/Admin.php:636 +msgid "Edit or Delete Versions" +msgstr "Rediger eller slett versjoner" + +#: lib/Admin.php:191 +msgid "Edit the permissions on this queue" +msgstr "Rediger tilganger til denne køen" + +#: lib/Admin.php:186 +msgid "Edit the users responsible for this queue" +msgstr "Endre brukere som er ansvarlig for denne køen" + +#: lib/Admin.php:165 +msgid "Edit the versions for this queue" +msgstr "Rediger versjoner for denne køen" + +#: ticket/watch.php:23 +msgid "Email address to notify" +msgstr "Epostadresse som skal varsles" + +#: ticket/watch.php:35 +msgid "Email address to remove" +msgstr "Epostadresser som skal fjernes" + +#: query.php:171 +#, php-format +msgid "Error: Unknown query form %s, defaulting to properties" +msgstr "Feil: Ukjent spørreform %s, går tilbake til standard" + +#: lib/Query.php:55 +msgid "Exact Match" +msgstr "Nøyaktig treff" + +#: runquery.php:69 runquery.php:83 lib/Query.php:138 +msgid "Execute Query" +msgstr "Kjør spørring" + +#: lib/Admin.php:809 +msgid "For tickets from these queues" +msgstr "For saker fra disse køene" + +#: lib/Admin.php:813 +msgid "For tickets which are" +msgstr "For saker som er" + +#: templates/menu.inc:5 lib/Block/summary.php:42 +msgid "Go" +msgstr "Kjør" + +#: lib/Block/summary.php:42 +msgid "GoTo: " +msgstr "Gå til: " + +#: query.php:136 +msgid "Group Criteria" +msgstr "Gruppekriterier" + +#: ticket/people.php:66 lib/Create.php:173 +msgid "Group Owners" +msgstr "Gruppeeiere" + +#: templates/queryrenderer.inc:98 lib/Query.php:596 lib/Query.php:598 +msgid "Groups" +msgstr "Grupper" + +#: lib/api.php:697 +msgid "Hidden Comments" +msgstr "Skjulte kommentarer" + +#: ticket/index.php:43 lib/Whups.php:189 +msgid "History" +msgstr "Historikk" + +#: query.php:145 +msgid "Hoist" +msgstr "Rykk opp ett nivå" + +#: templates/queryrenderer.inc:96 lib/Whups.php:470 lib/Query.php:671 +#: config/prefs.php.dist:36 +msgid "Id" +msgstr "Id" + +#: search.php:52 +msgid "" +"If you don't select any categories, no filtering will be done on ticket " +"category." +msgstr "" +"Hvis du ikke velger noen kategorier vil ingen filtrering bli utført på denne " +"sakskategorien." + +#: search.php:55 +msgid "" +"If you don't select any types, no filtering will be done on ticket type." +msgstr "" +"Hvis du ikke velger noen typer, vil ingen filtrering bli utført på denne " +"sakstypen." + +#: lib/Admin.php:816 +msgid "" +"If you select any tickets that do not have an owner, who should we send " +"email to?" +msgstr "" +"Hvis du velger meldinger som ikke har noen eier, hvem skal vi da sende epost " +"til?" + +#: query.php:146 +msgid "Insert And" +msgstr "Sett inn AND" + +#: lib/Query.php:515 +msgid "Insert Branch" +msgstr "Sett inn gren" + +#: query.php:148 +msgid "Insert Not" +msgstr "Sett inn NOT" + +#: query.php:147 +msgid "Insert Or" +msgstr "Sett inn OR" + +#: lib/Whups.php:160 +msgid "Invalid Ticket Id" +msgstr "Ugyldig saksid" + +#: lib/Admin.php:162 +msgid "Keep a set of versions for this queue?" +msgstr "Behold et versjonssett av denne køen?" + +#: templates/prevnext.inc:17 +msgid "Last>>" +msgstr "Siste>>" + +#: lib/Query.php:139 lib/Query.php:842 +msgid "Load Query" +msgstr "Laste inn spørring" + +#: config/prefs.php.dist:97 +msgid "MM/DD/YY" +msgstr "MM/DD/ÅÅ" + +#: config/prefs.php.dist:98 +msgid "MM/DD/YY HH:MM:SS" +msgstr "MM/DD/ÅÅ TT:MM:SS" + +#: lib/Admin.php:419 +#, php-format +msgid "Make a clone of %s" +msgstr "Lag en kloning av %s" + +#: lib/Query.php:770 +msgid "Match" +msgstr "Treff" + +#: lib/Query.php:540 lib/Query.php:628 lib/Query.php:771 +msgid "Match Operator" +msgstr "Sammenligningstype" + +#: lib/Query.php:59 +msgid "Match Pattern" +msgstr "Sammenlign mønster" + +#: lib/Query.php:58 +msgid "Match Word" +msgstr "Sammenlign ord" + +#: lib/Reports.php:20 +msgid "Maximum time a ticket is unresolved" +msgstr "Maksimal tid en sak er uløst" + +#: lib/Reports.php:21 +msgid "Minimum time a ticket is unresolved" +msgstr "Minimumstid en sak er uløst" + +#: config/prefs.php.dist:137 +msgid "Most recent first" +msgstr "Nyeste først" + +#: ticket/queue.php:173 +#, php-format +msgid "Moved ticket %d to \"%s\"" +msgstr "Flyttet sak %d til \"%s\"" + +#: mybugs.php:51 +#, php-format +msgid "My %s" +msgstr "Mine %s" + +#: mybugs_edit.php:121 +#, php-format +msgid "My %s :: Add Content" +msgstr "Mine %s :: Legg til innhold" + +#: search.php:192 lib/Block/myqueries.php:3 lib/Block/myqueries.php:26 +msgid "My Queries" +msgstr "Mine spørringer" + +#: search.php:187 lib/Block/mysearches.php:3 lib/Block/mysearches.php:24 +msgid "My QuickSearches" +msgstr "Mine hurtigsøk" + +#: lib/Block/myrequests.php:3 lib/Block/myrequests.php:24 +msgid "My Requests" +msgstr "Mine forespørsler" + +#: lib/Block/mytickets.php:3 lib/Block/mytickets.php:24 +#: config/prefs.php.dist:66 +msgid "My Tickets" +msgstr "Mine saker" + +#: lib/Ticket.php:537 +#, php-format +msgid "NEW: %s" +msgstr "NY: %s" + +#: lib/Query.php:819 lib/Query.php:857 +msgid "Name" +msgstr "Navn" + +#: lib/Admin.php:424 +msgid "Name of the cloned copy" +msgstr "Navn på den klonede kopien" + +#: lib/Driver.php:141 +msgid "New" +msgstr "Ny" + +#: lib/Ticket.php:475 lib/Ticket.php:517 +msgid "New Attachment" +msgstr "Nytt vedlegg" + +#: templates/comment.inc:55 templates/comment.inc:57 +#, php-format +msgid "New Attachment: %s" +msgstr "Nytt vedlegg: %s" + +#: lib/Query.php:124 lib/Block/myqueries.php:28 +msgid "New Query" +msgstr "Ny spørring" + +#: ticket/queue.php:37 +msgid "New Queue" +msgstr "Ny kø" + +#: ticket/people.php:75 +msgid "New State" +msgstr "Ny tilstand" + +#: ticket/create.php:27 lib/Block/summary.php:27 +msgid "New Ticket" +msgstr "Ny sak" + +#: ticket/type.php:34 +msgid "New Type" +msgstr "Ny type" + +#: templates/prevnext.inc:16 +msgid "Next>" +msgstr "Neste>" + +#: ticket/delete.php:37 lib/Admin.php:90 lib/Admin.php:217 lib/Admin.php:405 +#: lib/Admin.php:521 lib/Admin.php:609 lib/Admin.php:697 lib/Admin.php:785 +#: lib/Query.php:884 +msgid "No" +msgstr "Nei" + +#: lib/Block/myqueries.php:49 +msgid "No queries have been saved" +msgstr "Ingen spørringer har blitt lagret" + +#: clearsearch.php:34 +msgid "No searches cleared." +msgstr "Ingen søk fjernet." + +#: lib/Block/mysearches.php:43 +msgid "No searches have been saved" +msgstr "Ingen søk har blitt lagret" + +#: reports.php:17 +msgid "No stats available." +msgstr "Ingen statistikk tilgjengelig." + +#: lib/Driver.php:318 +#, php-format +msgid "No such backend \"%s\" found" +msgstr "Fant ikke backend \"%s\"" + +#: lib/Block/mytickets.php:50 lib/Block/summary.php:87 +#: lib/Block/myrequests.php:51 +msgid "No summary" +msgstr "Intet sammendrag" + +#: lib/Block/mytickets.php:60 lib/Block/myrequests.php:61 +msgid "No tickets are assigned to you." +msgstr "Det er ingen saker som er tildelt deg" + +#: lib/Whups.php:510 +msgid "No tickets matched your search criteria." +msgstr "Ingen saker inneholdt dine søkekriterier." + +#: lib/Block/summary.php:74 +msgid "No tickets to display" +msgstr "Ingen saker å vise" + +#: lib/Reports.php:88 +msgid "None" +msgstr "Ingen" + +#: templates/queryrenderer.inc:92 lib/Query.php:520 +msgid "Not" +msgstr "Ikke" + +#: query.php:77 +msgid "Not yet implemented." +msgstr "Foreløpig ikke implementert" + +#: config/prefs.php.dist:17 +msgid "Notification Options" +msgstr "Varslingsvalg" + +#: config/prefs.php.dist:117 +msgid "Only notify me of ticket changes from other users" +msgstr "Bare varsle meg ved saksendringer fra andre brukere" + +#: lib/Reports.php:11 +msgid "Open Tickets by Owner" +msgstr "Åpne saker etter eier" + +#: lib/Reports.php:9 +msgid "Open Tickets by Priority" +msgstr "Åpne saker etter prioritet" + +#: lib/Reports.php:6 +msgid "Open Tickets by Queue" +msgstr "Åpne saker etter kø" + +#: lib/Reports.php:10 +msgid "Open Tickets by Requester" +msgstr "Åpne saker etter innmelder" + +#: lib/Reports.php:7 +msgid "Open Tickets by State" +msgstr "Åpne saker etter tilstand" + +#: lib/Reports.php:8 +msgid "Open Tickets by Type" +msgstr "Åpne saker etter type" + +#: templates/queryrenderer.inc:91 lib/Query.php:519 +msgid "Or" +msgstr "Eller" + +#: config/prefs.php.dist:9 config/prefs.php.dist:16 +msgid "Other Options" +msgstr "Andre valg" + +#: templates/queryrenderer.inc:97 ticket/people.php:60 ticket/people.php:72 +#: lib/Create.php:167 lib/Create.php:179 lib/Whups.php:477 lib/Ticket.php:474 +#: lib/Ticket.php:509 lib/Ticket.php:510 lib/Ticket.php:512 lib/Ticket.php:596 +msgid "Owners" +msgstr "Eiere" + +#: lib/Whups.php:196 +msgid "People" +msgstr "Personer" + +#: lib/Whups.php:649 +#, php-format +msgid "Permanently delete %s?" +msgstr "Slette %s for godt?" + +#: ticket/update.php:22 ticket/people.php:21 ticket/type.php:17 +#: ticket/delete.php:17 ticket/queue.php:17 ticket/deleteAttachment.php:17 +msgid "Permission Denied" +msgstr "Tilgang nektet" + +#: ticket/update.php:83 ticket/delete.php:44 +msgid "Permission Denied." +msgstr "Tilgang nektet." + +#: runquery.php:35 query.php:29 lib/Query.php:894 +msgid "Permission denied." +msgstr "Tilgang nektet." + +#: lib/Admin.php:360 lib/Admin.php:402 +msgid "Priorities for this Type" +msgstr "Prioriteter for denne typen" + +#: templates/queryrenderer.inc:138 ticket/update.php:52 ticket/type.php:69 +#: ticket/queue.php:116 lib/Create.php:122 lib/Whups.php:474 +#: lib/Ticket.php:466 lib/Ticket.php:594 lib/Query.php:699 +#: config/prefs.php.dist:40 +msgid "Priority" +msgstr "Prioritet" + +#: templates/comment.inc:99 +#, php-format +msgid "Priority ⇒ %s" +msgstr "Prioritet ⇒ %s" + +#: lib/Admin.php:537 lib/Admin.php:583 lib/Admin.php:606 +msgid "Priority Description" +msgstr "Prioritetsbeskrivelse" + +#: lib/Admin.php:536 lib/Admin.php:561 lib/Admin.php:580 lib/Admin.php:603 +msgid "Priority Name" +msgstr "Prioritetsnavn" + +#: query.php:134 +msgid "Property Criteria" +msgstr "Egenskapskriterier" + +#: query.php:152 +msgid "Query Builder" +msgstr "Spørringsgenerator" + +#: lib/Query.php:95 +msgid "Query Parameters" +msgstr "Spørringsparametre" + +#: runquery.php:77 +msgid "Query Results" +msgstr "Spørringsresultater" + +#: search.php:48 templates/queryrenderer.inc:107 lib/Whups.php:475 +#: lib/Ticket.php:463 lib/Ticket.php:575 lib/Ticket.php:579 lib/Query.php:682 +#: config/prefs.php.dist:41 +msgid "Queue" +msgstr "Kø" + +#: templates/comment.inc:107 +#, php-format +msgid "Queue ⇒ %s" +msgstr "Kø ⇒ %s" + +#: lib/Admin.php:106 lib/Admin.php:155 lib/Admin.php:214 +msgid "Queue Description" +msgstr "Købeskrivelse" + +#: lib/Admin.php:105 lib/Admin.php:134 lib/Admin.php:152 lib/Admin.php:211 +#: lib/Create.php:33 lib/Create.php:41 +msgid "Queue Name" +msgstr "Kønavn" + +#: ticket/queue.php:85 lib/Create.php:80 lib/Ticket.php:584 lib/Ticket.php:588 +msgid "Queue Version" +msgstr "Køversjon" + +#: admin.php:35 templates/admin/mtmatrix.inc:6 +msgid "Queue/Type Matrix" +msgstr "Kø/type-matrise" + +#: search.php:139 +#, php-format +msgid "Queue: %s, Ticket: %s, Category: %s, Type: %s, Summary: %s" +msgstr "Kø: %s, Sak: %s, Kategori: %s, Type: %s, Sammendrag: %s" + +#: lib/api.php:156 lib/api.php:700 +msgid "Queues" +msgstr "Køer" + +#: lib/Ticket.php:539 +#, php-format +msgid "RESOLVED: %s" +msgstr "LØST: %s" + +#: lib/Admin.php:786 +msgid "Really delete this attribute? This may cause data problems!" +msgstr "" +"Ønsker du virkelig å slette denne egenskapen? Det kan forårsake " +"dataproblemer!" + +#: lib/Admin.php:610 +msgid "Really delete this priority? This may cause data problems!" +msgstr "" +"Ønsker du virkelig å slette denne prioriteten? Det kan forårsake " +"dataproblemer!" + +#: lib/Query.php:885 +msgid "Really delete this query? This operation is not undoable." +msgstr "" +"Ønsker du virkelig å slette denne spørringen? Handlingen kan ikke gjøres om." + +#: lib/Admin.php:218 +msgid "Really delete this queue? This may cause data problems!" +msgstr "" +"Ønsker du virkelig å slette denne køen? Det kan forårsake dataproblemer!" + +#: lib/Admin.php:522 +msgid "Really delete this state? This may cause data problems!" +msgstr "" +"Ønsker du virkelig å slette denne tilstanden? Det kan forårsake " +"dataproblemer!" + +#: lib/Admin.php:91 +msgid "Really delete this subject? This may cause data problems!" +msgstr "" +"Ønsker du virkelig å slette dette emnet? Det kan forårsake dataproblemer!" + +#: ticket/delete.php:38 +msgid "" +"Really delete this ticket? It will NOT be archived, and will be gone forever." +msgstr "Ønsker du virkelig å slette denne saken? Den vil IKKE bli arkivert!" + +#: lib/Admin.php:406 +msgid "Really delete this type? This may cause data problems!" +msgstr "" +"Ønsker du virkelig å slette denne typen? Det kan forårsake dataproblemer!" + +#: lib/Admin.php:698 +msgid "Really delete this version? This may cause data problems!" +msgstr "" +"Ønsker du virkelig å slette denne versjonen? Det kan forårsake dataproblemer!" + +#: search.php:169 +msgid "Refine Search" +msgstr "Endre søk" + +#: admin.php:922 +msgid "Reminders were sent." +msgstr "Påminnelser ble sendt." + +#: lib/Admin.php:267 +msgid "Remove User" +msgstr "Fjern bruker" + +#: ticket/watch.php:48 +msgid "Remove Watcher" +msgstr "Fjern overvåker" + +#: reports.php:22 +msgid "Reports" +msgstr "Rapporter" + +#: templates/queryrenderer.inc:99 lib/Ticket.php:599 +msgid "Requester" +msgstr "Innmelder" + +#: lib/Whups.php:480 lib/Ticket.php:602 lib/Driver.php:143 +#: config/prefs.php.dist:45 +msgid "Resolved" +msgstr "Løst" + +#: lib/Admin.php:269 +msgid "Responsible Users" +msgstr "Ansvarlige brukere" + +#: ticket/update.php:76 +msgid "Restrict Comment to:" +msgstr "Begrens kommentar til:" + +#: lib/Admin.php:170 +msgid "Restrict ticket subjects to a specified list?" +msgstr "Begrense saksemner til en angitt liste?" + +#: templates/prevnext.inc:25 +msgid "Return to Search Results" +msgstr "Returner til søkeresultater" + +#: templates/searchresults.inc:94 +msgid "Save" +msgstr "Lagre" + +#: lib/Query.php:142 lib/Query.php:817 +msgid "Save Query" +msgstr "Lagre spørring" + +#: templates/searchresults.inc:88 +msgid "Save these results as: " +msgstr "Lagre resultatene som: " + +#: lib/Query.php:774 +#, php-format +msgid "Search %s Attribute" +msgstr "Søk %s egenskap" + +#: lib/Query.php:777 +msgid "Search Attribute" +msgstr "Søkeegenskap" + +#: lib/Query.php:543 lib/Query.php:630 +msgid "Search Comments" +msgstr "Søkekommentarer" + +#: lib/Query.php:541 +msgid "Search Owners" +msgstr "Søkeeiere" + +#: lib/Query.php:542 +msgid "Search Requester" +msgstr "Søkeinnmelder" + +#: search.php:164 +msgid "Search Results" +msgstr "Søkeresultater" + +#: templates/prevnext.inc:21 +#, php-format +msgid "Search Results: %s of %s" +msgstr "Søkeresultater: %s av %s" + +#: lib/Query.php:629 +msgid "Search Summary" +msgstr "Søkesammendrag" + +#: search.php:64 search.php:180 config/prefs.php.dist:67 +msgid "Search Tickets" +msgstr "Søk i saker" + +#: clearsearch.php:27 +msgid "Search cleared." +msgstr "Søk fjernet." + +#: clearsearch.php:30 +msgid "Searches cleared." +msgstr "Søk fjernet." + +#: config/prefs.php.dist:69 +msgid "Select the view to display after login:" +msgstr "Velg hva som skal vises etter pålogging:" + +#: admin.php:36 lib/Admin.php:797 +msgid "Send Reminders" +msgstr "Send påminnelser" + +#: lib/Admin.php:808 +msgid "Send only for this list of ticket ids" +msgstr "Bare send for denne listens saksnumre" + +#: lib/Whups.php:200 +msgid "Set Queue" +msgstr "Angi kø" + +#: ticket/queue.php:194 ticket/queue.php:203 ticket/queue.php:215 +msgid "Set Queue - Step 1" +msgstr "Angi kø - Steg 1" + +#: ticket/queue.php:195 ticket/queue.php:204 +msgid "Set Queue - Step 2" +msgstr "Angi kø - Steg 2" + +#: ticket/queue.php:205 +msgid "Set Queue - Step 3" +msgstr "Angi kø - Steg 3" + +#: ticket/queue.php:181 +#, php-format +msgid "Set Queue for %s" +msgstr "Angi kø for %s" + +#: lib/Whups.php:201 +msgid "Set Type" +msgstr "Angi type" + +#: ticket/type.php:137 ticket/type.php:146 +msgid "Set Type - Step 1" +msgstr "Angi type - Steg 1" + +#: ticket/type.php:138 +msgid "Set Type - Step 2" +msgstr "Angi type - Steg 2" + +#: ticket/type.php:124 +#, php-format +msgid "Set Type for %s" +msgstr "Angi type for %s" + +#: config/prefs.php.dist:108 +msgid "Show \"(X Days Ago)\" in Date field of search results?" +msgstr "Vis \"(X Dager siden)\" i datofeltet til søkeresultatene?" + +#: config/prefs.php.dist:135 +msgid "Show comments in chronological order, or most recent first?" +msgstr "Vis kommentarer i kronologisk rekkefølge, eller nyeste først?" + +#: config/prefs.php.dist:86 +msgid "Show ticket IDs in the summary view?" +msgstr "Vis saksnumre i sammendragsvisningen?" + +#: config/prefs.php.dist:78 +msgid "Show tickets you have requested in the summary view?" +msgstr "Vis saker du har forespurt i sammendragsvisningen?" + +#: config/templates.php.dist:16 +msgid "Simple HTML Report" +msgstr "Enkel HTML-rapport" + +#: templates/searchresults.inc:113 templates/searchresults.inc:116 +#, php-format +msgid "Sort by %s" +msgstr "Sorter etter %s" + +#: templates/queryrenderer.inc:130 ticket/update.php:49 ticket/type.php:68 +#: ticket/queue.php:115 lib/Whups.php:472 lib/Ticket.php:465 +#: lib/Ticket.php:593 lib/Query.php:694 config/prefs.php.dist:38 +msgid "State" +msgstr "Tilstand" + +#: templates/comment.inc:95 +#, php-format +msgid "State ⇒ %s" +msgstr "Tilstand ⇒ %s" + +#: lib/Admin.php:446 lib/Admin.php:495 +msgid "State Category" +msgstr "Tilstandskategori" + +#: lib/Admin.php:445 lib/Admin.php:492 lib/Admin.php:518 +msgid "State Description" +msgstr "Beskrivelse av tilstand" + +#: lib/Admin.php:444 lib/Admin.php:470 lib/Admin.php:489 lib/Admin.php:515 +msgid "State Name" +msgstr "Tilstandsnavn" + +#: lib/Admin.php:350 lib/Admin.php:398 +msgid "States for this Type" +msgstr "Tilstander for denne typen" + +#: lib/Create.php:123 config/prefs.php.dist:37 +msgid "Subject" +msgstr "Emne" + +#: lib/Admin.php:17 lib/Admin.php:40 lib/Admin.php:65 lib/Admin.php:87 +msgid "Subject Name" +msgstr "Navn på emne" + +#: lib/Admin.php:174 +msgid "Subjects associated with this Queue" +msgstr "Emner knyttet til denne køen" + +#: ticket/create.php:102 +msgid "Submit" +msgstr "Send" + +#: admin.php:161 +#, php-format +msgid "Successfully Cloned %s to %s." +msgstr "Klonet %s til %s." + +#: ticket/type.php:115 +msgid "Successfully changed ticket type." +msgstr "Endre sakstypen." + +#: templates/queryrenderer.inc:102 ticket/update.php:46 ticket/delete.php:34 +#: lib/Whups.php:471 lib/Ticket.php:473 lib/Ticket.php:488 lib/Ticket.php:489 +#: lib/Ticket.php:491 lib/Ticket.php:573 +msgid "Summary" +msgstr "Sammendrag" + +#: templates/comment.inc:49 +#, php-format +msgid "Summary ⇒ %s" +msgstr "Sammendrag ⇒ %s" + +#: search.php:50 +msgid "Summary like" +msgstr "Sammendrag liknende" + +#: templates/comment.inc:71 +#, php-format +msgid "Taken from %s" +msgstr "Tatt fra %s" + +#: lib/Query.php:627 +msgid "Text" +msgstr "Tekst" + +#: query.php:138 +msgid "Text Criteria" +msgstr "Tekstkriterier" + +#: view.php:44 lib/Ticket.php:339 lib/Ticket.php:377 +msgid "The VFS backend needs to be configured to enable attachment uploads." +msgstr "VFS-driveren må være konfigurert for å kunne laste opp vedlegg." + +#: admin.php:811 +#, php-format +msgid "The attribute \"%s\" has been added to %s." +msgstr "Egenskapen \"%s\" har blitt lagt til %s." + +#: admin.php:893 +msgid "The attribute has been deleted." +msgstr "Egenskapen har blitt slettet." + +#: admin.php:864 +msgid "The attribute has been modified." +msgstr "Egenskapen har blitt endret." + +#: admin.php:898 +msgid "The attribute was not deleted." +msgstr "Egenskapen ble ikke slettet." + +#: admin.php:449 +#, php-format +msgid "The priority \"%s\" has been added to %s." +msgstr "Prioriteten \"%s\" har blit lagt til %s." + +#: admin.php:530 +msgid "The priority has been deleted." +msgstr "Prioriteten har blitt slettet." + +#: admin.php:502 +msgid "The priority has been modified." +msgstr "Prioriteten har blitt endret." + +#: admin.php:535 +msgid "The priority was not deleted." +msgstr "Prioriteten ble ikke slettet." + +#: lib/Query.php:898 +#, php-format +msgid "The query \"%s\" couldn't be deleted: %s" +msgstr "Spørringen \"%s\" kunne ikke bli slettet: %s" + +#: lib/Query.php:900 +#, php-format +msgid "The query \"%s\" has been deleted." +msgstr "Spørringen \"%s\" har blitt slettet." + +#: lib/Query.php:865 +msgid "The query couldn't be loaded:" +msgstr "Spørringen kunne ikke bli lastet inn:" + +#: admin.php:240 +#, php-format +msgid "The queue \"%s\" has been created." +msgstr "Spørringen \"%s\" har blitt opprettet." + +#: admin.php:318 +msgid "The queue has been deleted." +msgstr "Køen har blitt slettet." + +#: admin.php:290 +msgid "The queue has been modified." +msgstr "Køen har blitt endret." + +#: admin.php:323 +msgid "The queue was not deleted." +msgstr "Køen ble ikke slettet." + +#: lib/MIME/Viewer/zip.php:60 +msgid "The requested file does not exist in the Zip attachment." +msgstr "Den forespurte filen eksisterer ikke i den vedlagte Zip-filen." + +#: data.php:24 +msgid "The requested template does not exist." +msgstr "Den forespurte malen eksisterer ikke." + +#: admin.php:338 +#, php-format +msgid "The state \"%s\" has been added to %s." +msgstr "Tilstanden \"%s\" har blitt lagt til %s." + +#: admin.php:421 +msgid "The state has been deleted." +msgstr "Tilstanden har blitt slettet." + +#: admin.php:392 +msgid "The state has been modified." +msgstr "Tilstanden har blitt endret." + +#: admin.php:426 +msgid "The state was not deleted." +msgstr "Tilstanden ble ikke slettet." + +#: admin.php:625 +#, php-format +msgid "The subject \"%s\" has been added." +msgstr "Emnet \"%s\" har blitt lagt til." + +#: admin.php:681 +msgid "The subject has been deleted." +msgstr "Emnet har blitt slettet." + +#: admin.php:662 +msgid "The subject has been modified." +msgstr "Emnet har blitt endret." + +#: admin.php:686 +msgid "The subject was not deleted." +msgstr "Emnet ble ikke slettet." + +#: ticket/delete.php:75 +msgid "The ticket was not deleted." +msgstr "Saken ble ikke slettet." + +#: admin.php:179 +#, php-format +msgid "The type \"%s\" has been modified." +msgstr "Typen \"%s\" har blitt endret." + +#: admin.php:221 +msgid "The type has been deleted." +msgstr "Typen har blitt slettet." + +#: admin.php:226 +msgid "The type was not deleted." +msgstr "Typen ble ikke slettet." + +#: admin.php:701 +#, php-format +msgid "The version \"%s\" has been added to %s." +msgstr "Versjonen \"%s\" har blitt lagt til %s." + +#: admin.php:783 +msgid "The version has been deleted." +msgstr "Versjonen har blitt slettet." + +#: admin.php:755 +msgid "The version has been modified." +msgstr "Versjonen har blitt endret." + +#: admin.php:788 +msgid "The version was not deleted." +msgstr "Versjonen ble ikke slettet." + +#: lib/Admin.php:733 +msgid "There are no attribute types to edit" +msgstr "Det finnes ingen egenskaper å redigere" + +#: lib/Query.php:777 +msgid "There are no attributes defined for the current type" +msgstr "Det finnes ingen egenskaper definert for den gjeldende typen" + +#: lib/Admin.php:557 +msgid "There are no priorities to edit" +msgstr "Det finnes ingen prioriteringer å redigere" + +#: lib/Admin.php:805 +msgid "There are no queues available." +msgstr "Det finnes ingen køer tilgjengelig." + +#: lib/Admin.php:131 +msgid "There are no queues to edit" +msgstr "Det finnes ingen køer å redigere" + +#: lib/Create.php:41 +msgid "There are no queues which you can create tickets in." +msgstr "Det finnes ingen køer du kan opprettet saker i." + +#: search.php:42 +msgid "There are no queues which you can search." +msgstr "Det finnes ingen køer du kan søke i." + +#: lib/Admin.php:466 +msgid "There are no states to edit" +msgstr "Det finnes ingen tilstander å redigere" + +#: lib/Admin.php:37 +msgid "There are no subjects to edit" +msgstr "Det finnes ingen emner å redigere" + +#: lib/Create.php:64 +msgid "" +"There are no ticket types associated with this queue; until there are, you " +"cannot create any tickets in this queue." +msgstr "" +"Det er ingen sakstyper knyttet til denne køen; inntil det er så kan du ikke " +"opprette noen saker i denne køen." + +#: lib/Admin.php:321 +msgid "There are no types to edit" +msgstr "Det finnes ingen typer å redigere" + +#: lib/Admin.php:283 +msgid "There are no users responsible for this queue." +msgstr "Ingen brukere er ansvarlige for denne køen." + +#: ticket/people.php:71 lib/Create.php:178 +msgid "There are no users to which this ticket can be assigned." +msgstr "Det finnes ingen brukere denne køen kan knyttes opp mot." + +#: lib/Admin.php:645 +msgid "There are no versions to edit" +msgstr "Det finnes ingen versjoner å redigere" + +#: graph.php:30 +msgid "There is no data for this graph." +msgstr "Det finnes ikke data for denne grafen." + +#: lib/Reports.php:161 +msgid "There is no data for this report." +msgstr "Det finnes ikke data for denne rapporten " + +#: admin.php:569 +#, php-format +msgid "There was an error adding \"%s\" to the responsible list for \"%s\": %s" +msgstr "" +"Det oppstod en feil når \"%s\" skulle legges til listen over ansvarlige for " +"\"%s\": %s" + +#: admin.php:627 +#, php-format +msgid "There was an error adding the subject: %s." +msgstr "Det oppstod en feil når emnet %s skulle legges til." + +#: admin.php:814 +#, php-format +msgid "There was an error creating the attribute: %s." +msgstr "Det oppstod en feil under oppretting av egenskapen: %s." + +#: admin.php:451 +#, php-format +msgid "There was an error creating the priority: %s." +msgstr "Det oppstod en feil under oppretting av prioriteten: %s." + +#: admin.php:248 +#, php-format +msgid "There was an error creating the queue: %s." +msgstr "Det oppstod en feil under oppretting av køen: %s." + +#: admin.php:340 +#, php-format +msgid "There was an error creating the state: %s." +msgstr "Det oppstod en feil under oppretting av tilstanden: %s." + +#: admin.php:703 +#, php-format +msgid "There was an error creating the version: %s." +msgstr "Det oppstod en feil under oppretting av versjonen: %s." + +#: admin.php:895 +#, php-format +msgid "There was an error deleting the attribute: %s." +msgstr "Det oppstod en feil ved sletting av egenskapen: %s." + +#: admin.php:532 +#, php-format +msgid "There was an error deleting the priority: %s." +msgstr "Det oppstod en feil ved sletting av prioriteten: %s." + +#: admin.php:320 +#, php-format +msgid "There was an error deleting the queue: %s." +msgstr "Det oppstod en feil ved sletting av køen: %s." + +#: admin.php:423 +#, php-format +msgid "There was an error deleting the state: %s." +msgstr "Det oppstod en feil ved sletting av tilstanden: %s." + +#: admin.php:683 +#, php-format +msgid "There was an error deleting the subject: %s." +msgstr "Det oppstod en feil ved sletting av emnet: %s." + +#: ticket/delete.php:72 +#, php-format +msgid "There was an error deleting the ticket: %s" +msgstr "Det oppstod en feil ved sletting av saken: %s." + +#: admin.php:223 +#, php-format +msgid "There was an error deleting the type: %s." +msgstr "Det oppstod en feil ved sletting av typen: %s." + +#: admin.php:785 +#, php-format +msgid "There was an error deleting the version: %s." +msgstr "Det oppstod en feil ved sletting av versjonen: %s." + +#: admin.php:871 +#, php-format +msgid "There was an error editing the attribute: %s." +msgstr "Det oppstod en feil ved redigering av egenskapen: %s." + +#: admin.php:507 +#, php-format +msgid "There was an error editing the priority: %s." +msgstr "Det oppstod en feil ved redigering av prioriteten: %s." + +#: admin.php:304 +#, php-format +msgid "There was an error editing the queue: %s." +msgstr "Det oppstod en feil ved redigering av køen: %s." + +#: admin.php:397 +#, php-format +msgid "There was an error editing the state: %s." +msgstr "Det oppstod en feil ved redigering av tilstanden: %s." + +#: admin.php:667 +#, php-format +msgid "There was an error editing the subject: %s." +msgstr "Det oppstod en feil ved redigering av emnet: %s." + +#: admin.php:760 +#, php-format +msgid "There was an error editing the version: %s." +msgstr "Det oppstod en feil ved redigering av versjonen: %s." + +#: lib/Admin.php:243 +#, php-format +msgid "There was an error listing users: %s; %s" +msgstr "Det oppstod en feil ved visning av brukerliste: %s; %s" + +#: admin.php:177 +#, php-format +msgid "There was an error modifying the type: %s." +msgstr "Det oppstod en feil under modifisering av typen: %s." + +#: search.php:158 +#, php-format +msgid "There was an error performing your search: %s" +msgstr "Det oppstod en feil ved utføring av søket: %s" + +#: admin.php:605 +#, php-format +msgid "" +"There was an error removing \"%s\" from the responsible list for \"%s\": %s" +msgstr "" +"Det oppstod en feil ved fjerning av \"%s\" fra listen over ansvarlige for \"%" +"s\": %s" + +#: data.php:27 +msgid "This is not a search results template." +msgstr "Dette er ikke en mal for søkeresultater." + +#: lib/Admin.php:57 +msgid "This is not a valid subject." +msgstr "Dette er ikke et gyldig emne." + +#: ticket/queue.php:80 lib/Create.php:75 +msgid "" +"This queue requires that you specify a version, but there are no versions " +"associated with it. Until versions are created for this queue, you will not " +"be able to create tickets." +msgstr "" +"Denne køen krever at du angir en versjon, men det finnes ingen versjoner " +"knyttet til den. Inntil versjoner er opprettet for denne køen vil du ikke " +"kunne opprette nye saker." + +#: lib/Ticket.php:485 +msgid "Ticket" +msgstr "Sak" + +#: ticket/delete.php:68 +#, php-format +msgid "Ticket %d has been deleted." +msgstr "Sak %d er blitt slettet." + +#: lib/api.php:746 +#, php-format +msgid "Ticket %s - %s" +msgstr "Sak %s - %s" + +#: lib/Driver/sql.php:869 +#, php-format +msgid "Ticket %s was not found." +msgstr "Sak %s ble ikke funnet." + +#: search.php:49 +msgid "Ticket ID" +msgstr "Saksnr" + +#: lib/Create.php:121 +msgid "Ticket State" +msgstr "Sakstilstand" + +#: templates/reports/stats.inc:3 +msgid "Ticket Stats" +msgstr "Saksstatistikk" + +#: lib/Block/summary.php:3 +msgid "Ticket Summary" +msgstr "Sakssammendrag" + +#: lib/Create.php:69 +msgid "Ticket Type" +msgstr "Sakstype" + +#: lib/Admin.php:158 +msgid "Ticket Types associated with this Queue" +msgstr "Sakstyper knyttet til denne køen" + +#: lib/Ticket.php:481 +#, php-format +msgid "Ticket URL: %s\n" +msgstr "SaksURL: %s\n" + +#: ticket/update.php:137 +msgid "Ticket Updated" +msgstr "Sak oppdatert" + +#: lib/api.php:767 +msgid "Tickets" +msgstr "Saker" + +#: lib/Block/summary.php:51 +msgid "Tickets assigned to you" +msgstr "Saker som er tildelt deg" + +#: search.php:52 +msgid "Tickets which are" +msgstr "Saker som er" + +#: lib/Block/summary.php:68 +msgid "Tickets you requested" +msgstr "Saker du forespurte" + +#: templates/queryrenderer.inc:121 ticket/queue.php:88 lib/Whups.php:473 +#: lib/Ticket.php:467 lib/Ticket.php:592 lib/Query.php:674 +#: config/prefs.php.dist:39 +msgid "Type" +msgstr "Type" + +#: templates/comment.inc:103 +#, php-format +msgid "Type ⇒ %s" +msgstr "Type ⇒ %s" + +#: lib/Admin.php:301 lib/Admin.php:345 lib/Admin.php:394 +msgid "Type Description" +msgstr "Typebeskrivelse" + +#: lib/Admin.php:300 lib/Admin.php:324 lib/Admin.php:342 lib/Admin.php:391 +msgid "Type Name" +msgstr "Typenavn" + +#: search.php:55 +msgid "Types" +msgstr "Typer" + +#: lib/Ticket.php:597 +msgid "Unassigned" +msgstr "Ikke tildelt" + +#: lib/Admin.php:816 +msgid "Unassigned tickets" +msgstr "Ikke tildelte saker" + +#: lib/Driver.php:140 +msgid "Unconfirmed" +msgstr "Ubekreftet" + +#: templates/queryrenderer.inc:148 templates/queryrenderer.inc:188 +#, php-format +msgid "Unknown node type %s" +msgstr "Ukjent nodetype %s" + +#: templates/comment.inc:84 lib/Whups.php:191 lib/api.php:714 +msgid "Update" +msgstr "Oppdater" + +#: ticket/update.php:153 +#, php-format +msgid "Update %s" +msgstr "Oppdater %s" + +#: templates/admin/mtmatrix.inc:29 +msgid "Update Associations" +msgstr "Oppdater koblinger" + +#: ticket/people.php:134 +#, php-format +msgid "Update People for %s" +msgstr "Oppdater personer for %s" + +#: lib/Ticket.php:472 lib/Ticket.php:486 +msgid "Updated By" +msgstr "Oppdatert av" + +#: lib/Admin.php:242 lib/Admin.php:252 lib/Admin.php:255 +msgid "User" +msgstr "Bruker" + +#: query.php:135 +msgid "User Criteria" +msgstr "Brukerkriterier" + +#: lib/Query.php:539 +msgid "User ID" +msgstr "BrukerID" + +#: lib/Admin.php:184 +msgid "Users responsible for this Queue" +msgstr "Brukere ansvarlige for denne køen" + +#: lib/Admin.php:287 +msgid "Users responsible for this queue" +msgstr "Brukere asvarlige for denne køen" + +#: templates/queryrenderer.inc:115 lib/Whups.php:476 lib/Ticket.php:464 +#: lib/Query.php:686 config/prefs.php.dist:42 +msgid "Version" +msgstr "Versjon" + +#: lib/Admin.php:625 lib/Admin.php:671 lib/Admin.php:694 +msgid "Version Description" +msgstr "Versjonsbeskrivelse" + +#: lib/Admin.php:624 lib/Admin.php:649 lib/Admin.php:668 lib/Admin.php:691 +msgid "Version Name" +msgstr "Versjonsnavn" + +#: templates/reports/graphs.inc:13 +msgid "View Graphs" +msgstr "Vis grafer" + +#: ticket/people.php:91 ticket/type.php:46 ticket/comment.php:42 +#: ticket/queue.php:51 +msgid "Viewable only by members of" +msgstr "Kun synlig for medlemmer av" + +#: lib/Whups.php:194 +msgid "Watch" +msgstr "Overvåk" + +#: ticket/watch.php:76 +#, php-format +msgid "Watchers for %s" +msgstr "Overvåkere for %s" + +#: config/prefs.php.dist:95 +msgid "Weekday Day Month" +msgstr "Ukedag Dag Måned" + +#: config/prefs.php.dist:96 +msgid "Weekday Day Month HH:MM:SS TZ" +msgstr "Ukedag Dag Måned TT:MM:SS TZ" + +#: ticket/delete.php:37 lib/Admin.php:90 lib/Admin.php:217 lib/Admin.php:405 +#: lib/Admin.php:521 lib/Admin.php:609 lib/Admin.php:697 lib/Admin.php:785 +#: lib/Query.php:884 +msgid "Yes" +msgstr "Ja" + +#: mybugs_edit.php:67 +#, php-format +msgid "You are not allowed to create more than %d blocks." +msgstr "Du har ikke lov til å lage flere enn %d blokker." + +#: view.php:40 +msgid "You are not allowed to view this ticket." +msgstr "Du har ikke lov til å se på denne saken." + +#: lib/Driver/sql.php:872 +#, php-format +msgid "You do not have permission to access this ticket (%s)." +msgstr "Du har ikke rettigheter til å gå inn på denne saken (%s)." + +#: lib/Query.php:854 +msgid "You have no saved queries." +msgstr "Du har ingen lagrede spørringer." + +#: lib/Whups.php:504 +msgid "You must select at least one queue to send reminders for." +msgstr "Du må velge minst en kø det skal sendes påminnelser for." + +#: ticket/comment.php:26 lib/Create.php:35 +msgid "Your Email Address" +msgstr "Din epostadresse" + +#: ticket/create.php:157 +#, php-format +msgid "" +"Your ticket ID is %s. An appropriate person has been notified of this " +"request." +msgstr "" +"Ditt saksnummer er %s. En kyndig person har fått en melding om denne " +"forespørselen." + +#: lib/Whups.php:569 +msgid "_Admin" +msgstr "_Admin" + +#: lib/Whups.php:558 +#, php-format +msgid "_My %s" +msgstr "_Mine %s" + +#: lib/Whups.php:561 +msgid "_New Ticket" +msgstr "_Ny Sak" + +#: lib/Whups.php:563 +msgid "_Query Builder" +msgstr "Spørringsgenerator" + +#: lib/Whups.php:565 +msgid "_Reports" +msgstr "_Rapporter" + +#: lib/Whups.php:560 +msgid "_Search" +msgstr "Søk" + +#: templates/queryrenderer.inc:168 +msgid "contains (case insensitive) substring" +msgstr "inneholder (case insensitiv) substreng" + +#: templates/queryrenderer.inc:172 +msgid "contains (case sensitive) substring" +msgstr "inneholder (case sensitive) substreng" + +#: templates/queryrenderer.inc:176 +msgid "contains the word" +msgstr "inneholder ordet" + +#: scripts/mail-filter.php:176 +#, php-format +msgid "error processing message: %s" +msgstr "feil ved prosessering av melding: %s" + +#: lib/api.php:755 +msgid "estimated time" +msgstr "estimert tid" + +#: templates/queryrenderer.inc:164 +msgid "is" +msgstr "er" + +#: templates/queryrenderer.inc:156 +msgid "is greater than" +msgstr "er større enn" + +#: templates/queryrenderer.inc:160 +msgid "is less than" +msgstr "er mindre enn" + +#: templates/queryrenderer.inc:180 +msgid "matches the pattern" +msgstr "er likt mønsteret" diff --git a/whups/po/nl_NL.po b/whups/po/nl_NL.po new file mode 100644 index 000000000..53e7e2575 --- /dev/null +++ b/whups/po/nl_NL.po @@ -0,0 +1,2029 @@ +# Dutch translation for Whups +# Copyright 2004-2009 The Horde Project +# This file is distributed under the same license as the Whups package. +# Stefan de Konink , 2004. (Initial Version) +# Updated Han Spruyt, 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: Whups-0.0.1-cvs\n" +"Report-Msgid-Bugs-To: dev@lists.horde.org\n" +"POT-Creation-Date: 2005-11-28 15:02+0100\n" +"PO-Revision-Date: 2004-01-16 00:30+0100\n" +"Last-Translator: Stefan de Konink \n" +"Language-Team: Dutch \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: admin.php:603 +#, php-format +msgid "\"%s\" is no longer among those responsible for \"%s\"" +msgstr "\"%s\" is niet langer verantwoordelijk voor '%s'" + +#: templates/menu.inc:5 +msgid "#Id" +msgstr "#Id" + +#: lib/Driver.php:278 +#, php-format +msgid "%s (%s) wrote:" +msgstr "%s (%s) schreef:" + +#: admin.php:567 +#, php-format +msgid "%s added to those responsible for \"%s\"" +msgstr "%s toegevoegd aan de verantwoordelijken voor \"%s\"" + +#: templates/reports/stats.inc:17 +#, php-format +msgid "%s days" +msgstr "%s dagen" + +#: ticket/watch.php:58 +#, php-format +msgid "%s will be notified when this ticket is updated." +msgstr "%s krijgt een melding dat deze ticket is bijgewerkt." + +#: ticket/watch.php:70 +#, php-format +msgid "%s will no longer receive updates for this ticket." +msgstr "%s krijgt niet langer meldingen over bewerking van deze ticket." + +#: admin.php:81 +msgid "- Stage 1" +msgstr "- Stap 1" + +#: admin.php:86 +msgid "- Stage 2" +msgstr "- Stap 2" + +#: scripts/mail-filter.php:158 +msgid "--priority or --priority-id must specify a valid Priority." +msgstr "--prioriteit of --prioriteit-id moet een geldigen Prioriteit zijn." + +#: scripts/mail-filter.php:152 +msgid "--queue or --queue-id must specify a valid Queue." +msgstr "--queue of --queue-id moet een geldige Queue zijn." + +#: scripts/mail-filter.php:161 +msgid "--state or --state-id must specify a valid State." +msgstr "--status of --status-id moet een geldige Status zijn." + +#: scripts/mail-filter.php:155 +msgid "--type or --type-id must specify a valid Type." +msgstr "--type of --type-id moet een geldig Type zijn." + +#: templates/prevnext.inc:12 +msgid "<No summary" +msgstr "Geen samenvatting" + +#: view.php:55 +#, php-format +msgid "Access denied to %s" +msgstr "Toegang geweigerd voor %s" + +#: lib/Admin.php:709 +msgid "Add Attribute" +msgstr "Voeg adtribuut toe" + +#: lib/Query.php:764 +msgid "Add Attribute Criterion" +msgstr "Voeg Attribuut Criterium toe" + +#: query.php:199 +msgid "Add Criterion" +msgstr "Voeg Criterium toe" + +#: lib/Query.php:590 +msgid "Add Group Criterion" +msgstr "Voeg Groepscriterium toe" + +#: lib/Admin.php:533 +msgid "Add Priority" +msgstr "Voeg Prioriteit toe" + +#: lib/Query.php:669 +msgid "Add Property Criterion" +msgstr "Voeg Eigenschapscriterium toe" + +#: lib/Admin.php:102 lib/Admin.php:103 +msgid "Add Queue" +msgstr "Voeg Queue toe" + +#: lib/Admin.php:441 +msgid "Add State" +msgstr "Voeg Status toe" + +#: lib/Admin.php:14 lib/Admin.php:15 +msgid "Add Subject" +msgstr "Voeg Onderwerp toe" + +#: lib/Query.php:625 +msgid "Add Text Criterion" +msgstr "Voeg Tekst Criterium toe" + +#: lib/Admin.php:298 lib/Admin.php:299 +msgid "Add Type" +msgstr "Voeg Type toe" + +#: admin.php:81 admin.php:86 +#, php-format +msgid "Add Type %s" +msgstr "Voeg Type %s toe" + +#: lib/Query.php:537 +msgid "Add User Criterion" +msgstr "Voeg Gebruiker Criterium toe" + +#: lib/Admin.php:229 +msgid "Add Users" +msgstr "Voeg Gebruikers toe" + +#: lib/Admin.php:621 +msgid "Add Version" +msgstr "Voeg Versie toe" + +#: ticket/watch.php:47 +msgid "Add Watcher" +msgstr "Voeg 'Kijker' toe" + +#: ticket/create.php:154 +#, php-format +msgid "Adding your ticket failed: %s." +msgstr "Toevoegen van incident mislukt: %s." + +#: admin.php:54 lib/api.php:687 +msgid "Administration" +msgstr "Administratie" + +#: templates/queryrenderer.inc:90 lib/Query.php:518 +msgid "And" +msgstr "En" + +#: search.php:39 search.php:99 search.php:101 search.php:116 search.php:132 +#: lib/Query.php:675 lib/Query.php:683 lib/Query.php:688 lib/Query.php:695 +#: lib/Query.php:700 +msgid "Any" +msgstr "Elke" + +#: ticket/update.php:75 ticket/people.php:81 ticket/type.php:45 +#: ticket/comment.php:41 ticket/queue.php:50 +msgid "Any Group" +msgstr "Elke Groep" + +#: config/prefs.php.dist:47 +msgid "Ascending" +msgstr "Oplopend" + +#: lib/api.php:702 +msgid "Assign" +msgstr "Toewijzen" + +#: ticket/people.php:119 +msgid "Assign Ticket Succeeded" +msgstr "Incident Toegewezen" + +#: lib/Whups.php:464 lib/Ticket.php:600 lib/Driver.php:142 +#: config/prefs.php.dist:36 +msgid "Assigned" +msgstr "Toegewezen" + +#: templates/comment.inc:62 +#, php-format +msgid "Assigned to %s" +msgstr "Toegewezen aan: %s" + +#: admin.php:953 +msgid "Associations updated successfully." +msgstr "Koppelingen succesvol bijgewerkt." + +#: ticket/update.php:64 ticket/comment.php:29 lib/Create.php:124 +msgid "Attachment" +msgstr "Bijlage" + +#: ticket/deleteAttachment.php:29 +#, php-format +msgid "Attachment %s deleted." +msgstr "Bijlage %s is verwijderd." + +#: lib/Ticket.php:387 +#, php-format +msgid "Attachment %s not found." +msgstr "Bijlage %s niet gevonden." + +#: lib/Ticket.php:602 +msgid "Attachments" +msgstr "Bijlagen" + +#: query.php:133 +msgid "Attribute Criteria" +msgstr "Attribuut Criterium" + +#: lib/Admin.php:713 lib/Admin.php:759 lib/Admin.php:782 +msgid "Attribute Description" +msgstr "Attribuut Omschrijving" + +#: lib/Admin.php:712 lib/Admin.php:737 lib/Admin.php:756 lib/Admin.php:779 +msgid "Attribute Name" +msgstr "Attribuut naam" + +#: lib/Admin.php:370 +msgid "Attributes for this Type" +msgstr "Attributen voor dit Type" + +#: config/prefs.php.dist:118 +msgid "Autolink to other tickets in comments?" +msgstr "Autolink naar andere incidenten in reacties?" + +#: lib/Reports.php:12 +msgid "Average days to close by Owner" +msgstr "Gemiddeld aantal dagen om door een Eigenaar te sluiten" + +#: lib/Reports.php:14 +msgid "Average days to close by Queue" +msgstr "Gemiddeld aantal dagen om door een Queue te sluiten" + +#: lib/Reports.php:13 +msgid "Average days to close by Requester" +msgstr "Gemiddeld aantal dagen om door Melder te sluiten" + +#: lib/Reports.php:19 +msgid "Average time a ticket is unresolved" +msgstr "Gemiddelde behandel tijd voor een onopgesost incident" + +#: lib/Query.php:523 +msgid "Branch Type" +msgstr "Type Onderdeel" + +#: lib/Query.php:56 +msgid "Case Insensitive Substring" +msgstr "Niet Hoofdlettergevoelig Deelwoord" + +#: templates/queryrenderer.inc:27 +msgid "Change" +msgstr "Verander" + +#: config/prefs.php.dist:11 +msgid "Change display options such as how search results are sorted." +msgstr "" +"Verander weergave instellingen zoals hoe zoekresultaten zijn gesorteerd." + +#: config/prefs.php.dist:18 +msgid "Change options for email notifications of ticket activity." +msgstr "Verander opties voor e-mail meldingen bij incident activiteit." + +#: query.php:136 +msgid "Choose Action:" +msgstr "Kies Actie:" + +#: lib/Query.php:161 +msgid "Choose New Query instead of deleting the root node." +msgstr "Selecteer Nieuwe Query in plaats van verwijderen van de root ingang" + +#: lib/Create.php:33 lib/Create.php:67 +msgid "Choose:" +msgstr "Selecteer:" + +#: config/prefs.php.dist:128 +msgid "Chronological (oldest first)" +msgstr "Chronologisch (oudste eerst)" + +#: templates/savedsearches.inc:27 +msgid "Clear All Searches" +msgstr "Wis alle Zoekopdrachten" + +#: lib/Admin.php:421 +msgid "Clone" +msgstr "Dubbel" + +#: lib/Admin.php:427 +msgid "Clone Description" +msgstr "Dubbele Beschrijving" + +#: admin.php:120 lib/Admin.php:313 +msgid "Clone Type" +msgstr "Dubbel Type" + +#: config/templates.php.dist:43 +msgid "Comma Separated Values (CSV file)" +msgstr "Komma Gescheiden Waarden (CSV bestand)" + +#: templates/queryrenderer.inc:101 templates/comment.inc:86 +#: templates/comment.inc:117 ticket/update.php:65 ticket/people.php:72 +#: ticket/type.php:35 ticket/comment.php:28 ticket/queue.php:38 +#: lib/Whups.php:193 +msgid "Comment" +msgstr "Reactie" + +#: ticket/comment.php:94 +msgid "Comment added" +msgstr "Reactie toegevoegd" + +#: ticket/comment.php:100 +#, php-format +msgid "Comment on %s" +msgstr "Reactie op %s" + +#: templates/queryrenderer.inc:100 +msgid "Commentor" +msgstr "Uitlegger" + +#: lib/Admin.php:425 +#, php-format +msgid "Copy of %s" +msgstr "Kopie van %s" + +#: lib/MIME/Viewer/zip.php:54 +msgid "Could not extract the requested file from the Zip archive." +msgstr "Kon het gewenste bestand niet uit het zip-bestand halen." + +#: lib/Query.php:595 +msgid "Could not find any groups." +msgstr "Kon geen groepen vinden." + +#: lib/Mail.php:86 +#, php-format +msgid "Could not find ticket \"%s\"." +msgstr "Kon incident \"%s\" niet vinden." + +#: lib/Admin.php:364 +msgid "Create Default Priorities" +msgstr "Maak Standaard Prioriteitet" + +#: lib/Admin.php:354 +msgid "Create Default States" +msgstr "Maak Standaard Staten" + +#: config/prefs.php.dist:60 +msgid "Create Ticket" +msgstr "Maak Incident" + +#: lib/Create.php:23 +msgid "Create Ticket - Step 1" +msgstr "Maak Incident - Stap 1" + +#: lib/Create.php:58 +msgid "Create Ticket - Step 2" +msgstr "Maak Incident - Stap 2" + +#: lib/Create.php:98 +msgid "Create Ticket - Step 3" +msgstr "Maak Incident - Stap 3" + +#: lib/Create.php:142 +msgid "Create Ticket - Step 4" +msgstr "Maak Incident - Stap 4" + +#: lib/Whups.php:463 lib/Ticket.php:599 config/prefs.php.dist:35 +msgid "Created" +msgstr "Aangemaakt" + +#: lib/Ticket.php:470 lib/Ticket.php:485 +msgid "Created By" +msgstr "Gemaakt Door" + +#: query.php:189 query.php:206 +msgid "Current Query" +msgstr "Huidige Zoekopdracht" + +#: templates/queryrenderer.inc:25 +msgid "Current Ticket Type" +msgstr "Huidig Incident Type" + +#: lib/Ticket.php:530 +msgid "DO NOT REPLY TO THIS MESSAGE. THIS EMAIL ADDRESS IS NOT MONITORED." +msgstr "BEANTWOORD DIT BERICHT NIET. HET RETOURADRES IS NIET GELDIG" + +#: config/prefs.php.dist:91 +msgid "Date/Time format for search results" +msgstr "Datum/Tijd formaat voor zoek resultaten" + +#: config/prefs.php.dist:38 +msgid "Default sorting criteria:" +msgstr "Standaard sorteer criteria:" + +#: config/prefs.php.dist:49 +msgid "Default sorting direction:" +msgstr "Standaard sorteer richting:" + +#: query.php:137 lib/Whups.php:204 +msgid "Delete" +msgstr "Verwijderen" + +#: lib/Whups.php:632 lib/Whups.php:633 +#, php-format +msgid "Delete %s" +msgstr "Verwijder %s" + +#: ticket/delete.php:58 +#, php-format +msgid "Delete %s?" +msgstr "Verwijder %s?" + +#: admin.php:847 lib/Admin.php:725 +msgid "Delete Attribute" +msgstr "Verwijder Attribuut" + +#: lib/Admin.php:771 +msgid "Delete Attribute Confirmation" +msgstr "Verwijder Attribuut Bevestiging" + +#: admin.php:485 lib/Admin.php:549 +msgid "Delete Priority" +msgstr "Verwijder Prioriteit" + +#: lib/Admin.php:595 +msgid "Delete Priority Confirmation" +msgstr "Verwijder Prioriteit Bevestiging" + +#: lib/Query.php:145 +msgid "Delete Query" +msgstr "Verwijder Query" + +#: lib/Query.php:882 +msgid "Delete Query?" +msgstr "Verwijder Query?" + +#: admin.php:268 lib/Admin.php:119 +msgid "Delete Queue" +msgstr "Verwijder Queue" + +#: lib/Admin.php:204 +msgid "Delete Queue Confirmation" +msgstr "Verwijder Queue Bevestiging" + +#: templates/savedsearches.inc:45 templates/savedsearches.inc:46 +msgid "Delete Search" +msgstr "Verwijder Zoekopdracht" + +#: admin.php:375 lib/Admin.php:458 +msgid "Delete State" +msgstr "Verwijder Status" + +#: lib/Admin.php:507 +msgid "Delete State Confirmation" +msgstr "Verwijder Status Bevestiging" + +#: admin.php:646 lib/Admin.php:29 +msgid "Delete Subject" +msgstr "Verwijder Onderwerp" + +#: lib/Admin.php:80 +msgid "Delete Subject Confirmation" +msgstr "Verwijder Onderwerp Bevestiging" + +#: admin.php:114 lib/Admin.php:313 +msgid "Delete Type" +msgstr "Verwijder Type" + +#: lib/Admin.php:384 +msgid "Delete Type Confirmation" +msgstr "Verwijder Type Bevestiging" + +#: admin.php:738 lib/Admin.php:637 +msgid "Delete Version" +msgstr "Verwijder Versie" + +#: lib/Admin.php:683 +msgid "Delete Version Confirmation" +msgstr "Verwijder Versie Bevestiging" + +#: lib/Ticket.php:475 lib/Ticket.php:521 +msgid "Deleted Attachment" +msgstr "Bijlage verwijderd" + +#: templates/comment.inc:58 +#, php-format +msgid "Deleted Attachment: %s" +msgstr "Bijlage \"%s\" is verwijderd." + +#: config/prefs.php.dist:48 +msgid "Descending" +msgstr "Aflopend" + +#: lib/Create.php:125 +msgid "Description" +msgstr "Omschrijving" + +#: config/prefs.php.dist:10 +msgid "Display Options" +msgstr "Weergave Opties" + +#: lib/Whups.php:624 +msgid "Download" +msgstr "Download" + +#: query.php:138 +msgid "Edit" +msgstr "Bewerk" + +#: lib/Admin.php:148 lib/Admin.php:338 +#, php-format +msgid "Edit %s" +msgstr "Bewerk %s" + +#: admin.php:842 lib/Admin.php:725 lib/Admin.php:748 +msgid "Edit Attribute" +msgstr "Bewerk Attribuut" + +#: lib/Admin.php:372 +msgid "Edit Attributes" +msgstr "Bewerk Attributen" + +#: lib/Query.php:134 +msgid "Edit Permissions" +msgstr "Rechten bewerken" + +#: lib/Admin.php:362 +msgid "Edit Priorities" +msgstr "Bewerk Prioriteiten" + +#: admin.php:480 lib/Admin.php:549 lib/Admin.php:572 +msgid "Edit Priority" +msgstr "Bewerk Prioriteit" + +#: lib/Query.php:126 +msgid "Edit Query" +msgstr "Bewerk Zoekopdracht" + +#: admin.php:262 lib/Admin.php:119 lib/Admin.php:122 +msgid "Edit Queue" +msgstr "Bewerk Queue" + +#: admin.php:32 lib/Admin.php:121 +msgid "Edit Queues" +msgstr "Bewerk Queues" + +#: admin.php:370 lib/Admin.php:458 lib/Admin.php:481 +msgid "Edit State" +msgstr "Bewerk Status" + +#: lib/Admin.php:352 +msgid "Edit States" +msgstr "Bewerk Statussen" + +#: admin.php:641 lib/Admin.php:29 lib/Admin.php:51 +msgid "Edit Subject" +msgstr "Bewerk Onderwerp" + +#: admin.php:34 +msgid "Edit Subjects" +msgstr "Bewerk Onderwerpen" + +#: admin.php:108 lib/Admin.php:313 +msgid "Edit Type" +msgstr "Bewerk Type" + +#: admin.php:33 +msgid "Edit Types" +msgstr "Bewerk Types" + +#: admin.php:733 lib/Admin.php:637 lib/Admin.php:660 +msgid "Edit Version" +msgstr "Bewerk Versie" + +#: lib/Admin.php:724 +msgid "Edit or Delete Attributes" +msgstr "Bewerk of Verwijder Attributen" + +#: lib/Admin.php:548 +msgid "Edit or Delete Priorities" +msgstr "Bewerk of Verwijder Prioriteiten" + +#: lib/Admin.php:118 +msgid "Edit or Delete Queues" +msgstr "Bewerk of Verwijder Queues" + +#: lib/Admin.php:457 +msgid "Edit or Delete States" +msgstr "Bewerk of Verwijder Statussen" + +#: lib/Admin.php:28 +msgid "Edit or Delete Subjects" +msgstr "Bewerk of Verwijder Onderwerpen" + +#: lib/Admin.php:312 +msgid "Edit or Delete Types" +msgstr "Bewerk of Verwijder Types" + +#: lib/Admin.php:636 +msgid "Edit or Delete Versions" +msgstr "Bewerk of Verwijder Versies" + +#: lib/Admin.php:191 +msgid "Edit the permissions on this queue" +msgstr "Bewerk de recheten op deze queue" + +#: lib/Admin.php:186 +msgid "Edit the users responsible for this queue" +msgstr "Bewerk de gebruikers die verantwoordelijk zijn voor deze queue" + +#: lib/Admin.php:165 +msgid "Edit the versions for this queue" +msgstr "Bewerk de versies voor deze queue" + +#: ticket/watch.php:23 +msgid "Email address to notify" +msgstr "E-mailadres voor melding" + +#: ticket/watch.php:35 +msgid "Email address to remove" +msgstr "Te verwijderen E-mailadres" + +#: query.php:165 +#, php-format +msgid "Error: Unknown query form %s, defaulting to properties" +msgstr "" +"Fout: Onbekende zoek formulier %s, standaard eigenschappen worden gebruikt" + +#: lib/Query.php:55 +msgid "Exact Match" +msgstr "Exacte Overeenkomst" + +#: runquery.php:69 runquery.php:83 lib/Query.php:138 +msgid "Execute Query" +msgstr "Uitvoeren Zoekopdracht" + +#: lib/Admin.php:809 +msgid "For tickets from these queues" +msgstr "Voor incidenten van deze queues" + +#: lib/Admin.php:813 +msgid "For tickets which are" +msgstr "Voor incidenten die zijn" + +#: templates/menu.inc:5 lib/Block/summary.php:29 +msgid "Go" +msgstr "Start" + +#: query.php:130 +msgid "Group Criteria" +msgstr "Criteria Eigenschap" + +#: ticket/people.php:60 lib/Create.php:169 +msgid "Group Owners" +msgstr "Groep Eigenaren" + +#: templates/queryrenderer.inc:98 lib/Query.php:596 lib/Query.php:598 +msgid "Groups" +msgstr "Groepen" + +#: lib/api.php:690 +msgid "Hidden Comments" +msgstr "Verborgen reacties" + +#: ticket/index.php:43 lib/Whups.php:189 +msgid "History" +msgstr "Geschiedenis" + +#: query.php:139 +msgid "Hoist" +msgstr "Omhoog Halen" + +#: templates/queryrenderer.inc:96 lib/Whups.php:455 lib/Query.php:671 +#: config/prefs.php.dist:28 +msgid "Id" +msgstr "Nummer" + +#: search.php:52 +msgid "" +"If you don't select any categories, no filtering will be done on ticket " +"category." +msgstr "" +"Wanneer U geen categorien selecteerd, zullen geen filters worden geplaatst " +"op het incident." + +#: search.php:55 +msgid "" +"If you don't select any types, no filtering will be done on ticket type." +msgstr "" +"Wanneer U geen types selecteerd, zullen geen filters worden geplaatst op het " +"incident type." + +#: lib/Admin.php:816 +msgid "" +"If you select any tickets that do not have an owner, who should we send " +"email to?" +msgstr "" +"Wie moet een mail ontvangen als u incidenten selecteert zonder eigenaar." + +#: query.php:140 +msgid "Insert And" +msgstr "Invoegen en" + +#: lib/Query.php:515 +msgid "Insert Branch" +msgstr "Onderdeel Invoegen" + +#: query.php:142 +msgid "Insert Not" +msgstr "Niet invoegen" + +#: query.php:141 +msgid "Insert Or" +msgstr "Invoegen of" + +#: lib/Whups.php:160 +msgid "Invalid Ticket Id" +msgstr "Ongeldig Incident Id" + +#: lib/Admin.php:162 +msgid "Keep a set of versions for this queue?" +msgstr "Houd versies bij voor deze Queue" + +#: templates/prevnext.inc:17 +msgid "Last>>" +msgstr "Laatste>>" + +#: lib/Query.php:139 lib/Query.php:842 +msgid "Load Query" +msgstr "Laad Zoekopdracht" + +#: config/prefs.php.dist:89 +msgid "MM/DD/YY" +msgstr "MM/DD/YY" + +#: config/prefs.php.dist:90 +msgid "MM/DD/YY HH:MM:SS" +msgstr "MM/DD/YY HH:MM:SS" + +#: lib/Admin.php:419 +#, php-format +msgid "Make a clone of %s" +msgstr "Maak een dubbele van %s" + +#: lib/Query.php:770 +msgid "Match" +msgstr "Overeenkomst" + +#: lib/Query.php:540 lib/Query.php:628 lib/Query.php:771 +msgid "Match Operator" +msgstr "Gelijkheids Teken" + +#: lib/Query.php:59 +msgid "Match Pattern" +msgstr "Overeenkomstig Patroon" + +#: lib/Query.php:58 +msgid "Match Word" +msgstr "Overeenkomstig Woord" + +#: lib/Reports.php:20 +msgid "Maximum time a ticket is unresolved" +msgstr "Maximale tijd dat een incident niet is opgelost" + +#: lib/Reports.php:21 +msgid "Minimum time a ticket is unresolved" +msgstr "Minimum tijd totdat een incident wordt opgelost" + +#: config/prefs.php.dist:129 +msgid "Most recent first" +msgstr "Meest recente eerst" + +#: ticket/queue.php:173 +#, php-format +msgid "Moved ticket %d to \"%s\"" +msgstr "Incident %d verplaatst naar \"%s\"" + +#: mybugs.php:65 +#, php-format +msgid "My %s" +msgstr "Mijn %s" + +#: mybugs.php:44 +msgid "My Assigned Tickets" +msgstr "Mijn Toegewezen Incidenten" + +#: mybugs.php:60 +msgid "My Open Requests" +msgstr "Mijn Open Opmerkingen" + +#: mybugs.php:83 search.php:186 lib/Block/myqueries.php:3 +#: lib/Block/myqueries.php:26 +msgid "My Queries" +msgstr "Mijn Zoekopdrachten" + +#: mybugs.php:79 search.php:182 lib/Block/mysearches.php:3 +#: lib/Block/mysearches.php:24 +msgid "My QuickSearches" +msgstr "Mijn Snelzoekopdrachten" + +#: config/prefs.php.dist:58 +msgid "My Tickets" +msgstr "Mijn Incidenten" + +#: lib/Ticket.php:536 +#, php-format +msgid "NEW: %s" +msgstr "NIEUW: %s" + +#: lib/Query.php:819 lib/Query.php:857 +msgid "Name" +msgstr "Naam" + +#: lib/Admin.php:424 +msgid "Name of the cloned copy" +msgstr "Naam of de dubbele kopie" + +#: lib/Driver.php:141 +msgid "New" +msgstr "Nieuw" + +#: lib/Ticket.php:474 lib/Ticket.php:516 +msgid "New Attachment" +msgstr "Nieuwe Bijlage" + +#: templates/comment.inc:51 templates/comment.inc:53 +#, php-format +msgid "New Attachment: %s" +msgstr "Nieuwe Bijlage: %s" + +#: lib/Query.php:124 lib/Block/myqueries.php:27 lib/Block/myqueries.php:28 +msgid "New Query" +msgstr "Nieuwe Zoekopdracht" + +#: ticket/queue.php:37 +msgid "New Queue" +msgstr "Nieuwe Queue" + +#: ticket/people.php:69 +msgid "New State" +msgstr "Nieuwe Status" + +#: ticket/create.php:27 lib/Block/summary.php:28 +msgid "New Ticket" +msgstr "Nieuwe Ticket" + +#: ticket/type.php:34 +msgid "New Type" +msgstr "Nieuw Type" + +#: templates/prevnext.inc:16 +msgid "Next>" +msgstr "Volgende>" + +#: ticket/delete.php:37 lib/Admin.php:90 lib/Admin.php:217 lib/Admin.php:405 +#: lib/Admin.php:521 lib/Admin.php:609 lib/Admin.php:697 lib/Admin.php:785 +#: lib/Query.php:884 +msgid "No" +msgstr "Nee" + +#: clearsearch.php:34 +msgid "No searches cleared." +msgstr "Geen zoekopdrachen verwijderd." + +#: reports.php:17 +msgid "No stats available." +msgstr "Geen statussen beschikbaar." + +#: lib/Driver.php:319 +#, php-format +msgid "No such backend \"%s\" found" +msgstr "Geen backend \"%s\" gevonden" + +#: lib/Whups.php:495 +msgid "No tickets matched your search criteria." +msgstr "Geen incidenten kwamen overeen met Uw zoekopdracht." + +#: lib/Block/summary.php:75 +msgid "No tickets to display" +msgstr "Geen incidenten om weer te geven" + +#: lib/Reports.php:88 +msgid "None" +msgstr "Geen" + +#: templates/queryrenderer.inc:92 lib/Query.php:520 +msgid "Not" +msgstr "Niet" + +#: query.php:71 +msgid "Not yet implemented." +msgstr "Nog niet geïmplementeerd" + +#: config/prefs.php.dist:17 +msgid "Notification Options" +msgstr "Meldings Opties" + +#: config/prefs.php.dist:109 +msgid "Only notify me of ticket changes from other users" +msgstr "Stel me op de hoogte als incidenten van andere gebruikers veranderen" + +#: lib/Reports.php:11 +msgid "Open Tickets by Owner" +msgstr "Open Incidenten per Eigenaar" + +#: lib/Reports.php:9 +msgid "Open Tickets by Priority" +msgstr "Open Incidenten per Prioriteit" + +#: lib/Reports.php:6 +msgid "Open Tickets by Queue" +msgstr "Open Incidenten per Queue" + +#: lib/Reports.php:10 +msgid "Open Tickets by Requester" +msgstr "Open Incidenten per Aanvrager" + +#: lib/Reports.php:7 +msgid "Open Tickets by State" +msgstr "Open Incidenten per Status" + +#: lib/Reports.php:8 +msgid "Open Tickets by Type" +msgstr "Open Incidenten per Type" + +#: templates/queryrenderer.inc:91 lib/Query.php:519 +msgid "Or" +msgstr "Of" + +#: config/prefs.php.dist:9 config/prefs.php.dist:16 +msgid "Other Options" +msgstr "Andere Opties" + +#: templates/queryrenderer.inc:97 ticket/people.php:54 ticket/people.php:66 +#: lib/Create.php:163 lib/Create.php:175 lib/Whups.php:462 lib/Ticket.php:473 +#: lib/Ticket.php:508 lib/Ticket.php:509 lib/Ticket.php:511 lib/Ticket.php:595 +msgid "Owners" +msgstr "Eigenaars" + +#: lib/Whups.php:196 +msgid "People" +msgstr "Mensen" + +#: lib/Whups.php:632 +#, php-format +msgid "Permanently delete %s?" +msgstr "%s definitief verwijderen?" + +#: ticket/update.php:22 ticket/people.php:21 ticket/type.php:17 +#: ticket/delete.php:17 ticket/queue.php:17 ticket/deleteAttachment.php:17 +msgid "Permission Denied" +msgstr "Toegang geweigerd" + +#: ticket/update.php:83 ticket/delete.php:44 +msgid "Permission Denied." +msgstr "Toegang Geweigerd." + +#: runquery.php:35 query.php:29 lib/Query.php:894 +#, php-format +msgid "Permission denied." +msgstr "Toegang geweigerd" + +#: lib/Admin.php:360 lib/Admin.php:402 +msgid "Priorities for this Type" +msgstr "Prioriteiten voor dit Type" + +#: templates/queryrenderer.inc:132 ticket/update.php:52 ticket/type.php:69 +#: ticket/queue.php:116 lib/Create.php:122 lib/Whups.php:459 +#: lib/Ticket.php:465 lib/Ticket.php:593 lib/Query.php:699 +#: config/prefs.php.dist:32 +msgid "Priority" +msgstr "Prioriteit" + +#: templates/comment.inc:95 +#, php-format +msgid "Priority ⇒ %s" +msgstr "Prioriteit ⇒ %s" + +#: lib/Admin.php:537 lib/Admin.php:583 lib/Admin.php:606 +msgid "Priority Description" +msgstr "Prioriteit Beschrijving" + +#: lib/Admin.php:536 lib/Admin.php:561 lib/Admin.php:580 lib/Admin.php:603 +msgid "Priority Name" +msgstr "Prioriteit Naam" + +#: query.php:128 +msgid "Property Criteria" +msgstr "Criteria Eigenschap" + +#: query.php:146 +msgid "Query Builder" +msgstr "Zoekopdracht Bouwer" + +#: lib/Query.php:95 +msgid "Query Parameters" +msgstr "Zoekopdracht Parameters" + +#: runquery.php:77 +msgid "Query Results" +msgstr "Zoekopdracht Resultaten" + +#: search.php:48 templates/queryrenderer.inc:105 lib/Whups.php:460 +#: lib/Ticket.php:462 lib/Ticket.php:574 lib/Ticket.php:578 lib/Query.php:682 +#: config/prefs.php.dist:33 +msgid "Queue" +msgstr "Queue" + +#: templates/comment.inc:103 +#, php-format +msgid "Queue ⇒ %s" +msgstr "Queue ⇒ %s" + +#: lib/Admin.php:106 lib/Admin.php:155 lib/Admin.php:214 +msgid "Queue Description" +msgstr "Queue Beschrijving" + +#: lib/Admin.php:105 lib/Admin.php:134 lib/Admin.php:152 lib/Admin.php:211 +#: lib/Create.php:33 lib/Create.php:41 +msgid "Queue Name" +msgstr "Queue Naam" + +#: ticket/queue.php:85 lib/Create.php:80 lib/Ticket.php:583 lib/Ticket.php:587 +msgid "Queue Version" +msgstr "Queue Versie" + +#: admin.php:35 templates/admin/mtmatrix.inc:6 +msgid "Queue/Type Matrix" +msgstr "Queue/Type Matrix" + +#: search.php:134 +#, php-format +msgid "Queue: %s, Ticket: %s, Category: %s, Type: %s" +msgstr "Queue: %s, Incident: %s, Categorie: %s, Type: %s" + +#: lib/api.php:152 lib/api.php:693 +msgid "Queues" +msgstr "Queues" + +#: lib/Ticket.php:538 +#, php-format +msgid "RESOLVED: %s" +msgstr "OPGELOST: %s" + +#: lib/Admin.php:786 +msgid "Really delete this attribute? This may cause data problems!" +msgstr "" +"Wilt u dit attribuut echt verwijderen? Dit kan dataproblemen opleveren!!" + +#: lib/Admin.php:610 +msgid "Really delete this priority? This may cause data problems!" +msgstr "" +"Wilt u deze prioriteit echt verwijderen? Dit kan dataproblemen opleveren!!" + +#: lib/Query.php:885 +msgid "Really delete this query? This operation is not undoable." +msgstr "" +"Zoekopdracht echt verwijderen? Deze bewerking kan niet ongedaan gemaakt " +"worden." + +#: lib/Admin.php:218 +msgid "Really delete this queue? This may cause data problems!" +msgstr "Wilt u deze queue echt verwijderen? Dit kan dataproblemen opleveren!!" + +#: lib/Admin.php:522 +msgid "Really delete this state? This may cause data problems!" +msgstr "Wilt u deze status echt wissen? Dit kan dataproblemen opleveren!!" + +#: lib/Admin.php:91 +msgid "Really delete this subject? This may cause data problems!" +msgstr "Wilt u dit onderwerp echt wissen? Dit kan dataproblemen opleveren!!" + +#: ticket/delete.php:38 +msgid "" +"Really delete this ticket? It will NOT be archived, and will be gone forever." +msgstr "" +"Wilt u dit incident echt wissen? Het zal NIET worden gearchiveerd, en zal " +"permanent verdwijnen." + +#: lib/Admin.php:406 +msgid "Really delete this type? This may cause data problems!" +msgstr "Wilt u dit type echt wissen? Dit kan dataproblemen opleveren!!" + +#: lib/Admin.php:698 +msgid "Really delete this version? This may cause data problems!" +msgstr "Wilt u deze versie echt verwijderen? Dit kan dataproblemen opleveren!!" + +#: search.php:164 +msgid "Refine Search" +msgstr "Verfijn Zoekopdracht" + +#: admin.php:922 +msgid "Reminders were sent." +msgstr "Herinneringen zijn verzonden." + +#: lib/Admin.php:267 +msgid "Remove User" +msgstr "Verwijder Gebruiker" + +#: ticket/watch.php:48 +msgid "Remove Watcher" +msgstr "Verwijder 'Kijker'" + +#: reports.php:22 +msgid "Reports" +msgstr "Rapportages" + +#: templates/queryrenderer.inc:99 lib/Ticket.php:598 +msgid "Requester" +msgstr "Aanvrager" + +#: lib/Whups.php:465 lib/Ticket.php:601 lib/Driver.php:143 +#: config/prefs.php.dist:37 +msgid "Resolved" +msgstr "Opgelost" + +#: lib/Admin.php:269 +msgid "Responsible Users" +msgstr "Verantwoordelijke Gebruikers" + +#: ticket/update.php:76 +msgid "Restrict Comment to:" +msgstr "Beperk Reactie tot:" + +#: lib/Admin.php:170 +msgid "Restrict ticket subjects to a specified list?" +msgstr "Begrens incident onderwerpen tot een specifieke lijst?" + +#: templates/prevnext.inc:25 +msgid "Return to Search Results" +msgstr "Terug naar Zoekresultaten" + +#: templates/searchresults.inc:54 +msgid "Save" +msgstr "Opslaan" + +#: lib/Query.php:142 lib/Query.php:817 +msgid "Save Query" +msgstr "Sla zoekopdracht op" + +#: templates/searchresults.inc:48 +msgid "Save these results as: " +msgstr "Sla deze resultaten op als:" + +#: lib/Query.php:774 +#, php-format +msgid "Search %s Attribute" +msgstr "Zoek %s Attribuut" + +#: lib/Query.php:777 +msgid "Search Attribute" +msgstr "Zoek Attribuut" + +#: lib/Query.php:543 lib/Query.php:630 +msgid "Search Comments" +msgstr "Zoek Reacties" + +#: lib/Query.php:541 +msgid "Search Owners" +msgstr "Zoek Eigenaars" + +#: lib/Query.php:542 +msgid "Search Requester" +msgstr "Zoek Aanvrager" + +#: search.php:159 +msgid "Search Results" +msgstr "Zoek Resultaten" + +#: templates/prevnext.inc:21 +#, php-format +msgid "Search Results: %s of %s" +msgstr "Zoekresultaten: %s van %s" + +#: lib/Query.php:629 +msgid "Search Summary" +msgstr "Zoek Samenvatting" + +#: search.php:64 search.php:175 config/prefs.php.dist:59 +msgid "Search Tickets" +msgstr "Zoek Insidenten" + +#: clearsearch.php:27 +msgid "Search cleared." +msgstr "Zoekopdracht verwijderd" + +#: clearsearch.php:30 +msgid "Searches cleared." +msgstr "Zoekopdrachten verwijderd." + +#: config/prefs.php.dist:61 +msgid "Select the view to display after login:" +msgstr "Selecteer het beeld dat moet weergeven worden na het inloggen:" + +#: admin.php:36 lib/Admin.php:797 +msgid "Send Reminders" +msgstr "Zend Herinneringen" + +#: lib/Admin.php:808 +msgid "Send only for this list of ticket ids" +msgstr "Zend alleen voor deze lijst van incident nummers" + +#: lib/Whups.php:200 +msgid "Set Queue" +msgstr "Zet Queue" + +#: ticket/queue.php:194 ticket/queue.php:203 ticket/queue.php:215 +msgid "Set Queue - Step 1" +msgstr "Zet Queue - Stap 1" + +#: ticket/queue.php:195 ticket/queue.php:204 +msgid "Set Queue - Step 2" +msgstr "Zet Queue - Stap 2" + +#: ticket/queue.php:205 +msgid "Set Queue - Step 3" +msgstr "Zet Queue - Stap 3" + +#: ticket/queue.php:181 +#, php-format +msgid "Set Queue for %s" +msgstr "Zet Queue voor %s" + +#: lib/Whups.php:203 +msgid "Set Type" +msgstr "Zet Type" + +#: ticket/type.php:137 ticket/type.php:146 +msgid "Set Type - Step 1" +msgstr "Zet Type - Stap 1" + +#: ticket/type.php:138 +msgid "Set Type - Step 2" +msgstr "Zet Type - Stap 2" + +#: ticket/type.php:124 +#, php-format +msgid "Set Type for %s" +msgstr "Zet Type voor %s" + +#: config/prefs.php.dist:100 +msgid "Show \"(X Days Ago)\" in Date field of search results?" +msgstr "" +"Laat \"(X Dagen Geleden)\" zien in het Datum veld van de zoekresultaten?" + +#: config/prefs.php.dist:127 +msgid "Show comments in chronological order, or most recent first?" +msgstr "" +"Moeten de reacties in chronologische volgorde worden weergeven, of moet de " +"recentste eerst?" + +#: config/prefs.php.dist:78 +msgid "Show ticket IDs in the summary view?" +msgstr "Laat incident nummers in samenvattings weergave zien?" + +#: config/prefs.php.dist:70 +msgid "Show tickets you have requested in the summary view?" +msgstr "Laat incidenten die U heeft opgevraagd zien in samenvattings weergave?" + +#: config/templates.php.dist:16 +msgid "Simple HTML Report" +msgstr "Simpel HTML Rapport" + +#: templates/searchresults.inc:75 +msgid "Sort Direction" +msgstr "Sorteer Richting" + +#: templates/searchresults.inc:76 templates/searchresults.inc:80 +#, php-format +msgid "Sort by %s" +msgstr "Sorteer op %s" + +#: templates/queryrenderer.inc:125 ticket/update.php:49 ticket/type.php:68 +#: ticket/queue.php:115 lib/Whups.php:457 lib/Ticket.php:464 +#: lib/Ticket.php:592 lib/Query.php:694 config/prefs.php.dist:30 +msgid "State" +msgstr "Status" + +#: templates/comment.inc:91 +#, php-format +msgid "State ⇒ %s" +msgstr "Status ⇒ %s" + +#: lib/Admin.php:446 lib/Admin.php:495 +msgid "State Category" +msgstr "Status Categorie" + +#: lib/Admin.php:445 lib/Admin.php:492 lib/Admin.php:518 +msgid "State Description" +msgstr "Status Omschrijving" + +#: lib/Admin.php:444 lib/Admin.php:470 lib/Admin.php:489 lib/Admin.php:515 +msgid "State Name" +msgstr "Status Naam" + +#: lib/Admin.php:350 lib/Admin.php:398 +msgid "States for this Type" +msgstr "Status voor dit Type" + +#: lib/Create.php:123 config/prefs.php.dist:29 +msgid "Subject" +msgstr "Onderwerp" + +#: lib/Admin.php:17 lib/Admin.php:40 lib/Admin.php:65 lib/Admin.php:87 +msgid "Subject Name" +msgstr "Onderwerp Naam" + +#: lib/Admin.php:174 +msgid "Subjects associated with this Queue" +msgstr "Onderwerp gekoppeld aan deze Queue" + +#: ticket/create.php:102 +msgid "Submit" +msgstr "Toevoegen" + +#: admin.php:161 +#, php-format +msgid "Successfully Cloned %s to %s." +msgstr "Succesvol %s gekopieerd naar %s." + +#: ticket/type.php:115 +msgid "Successfully changed ticket type." +msgstr "Incidenttype gewijzigd." + +#: templates/queryrenderer.inc:102 ticket/update.php:46 ticket/delete.php:34 +#: lib/Whups.php:456 lib/Ticket.php:472 lib/Ticket.php:487 lib/Ticket.php:488 +#: lib/Ticket.php:490 lib/Ticket.php:572 +msgid "Summary" +msgstr "Samenvatting" + +#: templates/comment.inc:45 +#, php-format +msgid "Summary ⇒ %s" +msgstr "Samenvatting ⇒ %s" + +#: search.php:50 +msgid "Summary like" +msgstr "Samengevat als" + +#: templates/comment.inc:67 +#, php-format +msgid "Taken from %s" +msgstr "Overgenomen van %s" + +#: lib/Query.php:627 +msgid "Text" +msgstr "Tekst" + +#: query.php:132 +msgid "Text Criteria" +msgstr "Tekst Criteria" + +#: view.php:44 lib/Ticket.php:338 lib/Ticket.php:376 +msgid "The VFS backend needs to be configured to enable attachment uploads." +msgstr "" +"De VFS backend heeft een configuratie nodig om uploaden van bijlagen te " +"gebruiken." + +#: admin.php:811 +#, php-format +msgid "The attribute \"%s\" has been added to %s." +msgstr "Het attribuut \"%s\" is toegevoegd aan %s." + +#: admin.php:893 +msgid "The attribute has been deleted." +msgstr "Het attribuut is verwijderd." + +#: admin.php:864 +msgid "The attribute has been modified." +msgstr "Het attribuut is veranderd." + +#: admin.php:898 +msgid "The attribute was not deleted." +msgstr "Het attribuut is niet verwijderd." + +#: admin.php:449 +#, php-format +msgid "The priority \"%s\" has been added to %s." +msgstr "Prioriteit \"%s\" is toegevoegd aan %s." + +#: admin.php:530 +msgid "The priority has been deleted." +msgstr "De prioriteit is gewist." + +#: admin.php:502 +msgid "The priority has been modified." +msgstr "De prioriteit is veranderd." + +#: admin.php:535 +msgid "The priority was not deleted." +msgstr "De prioriteit is niet verwijderd." + +#: lib/Query.php:898 +#, php-format +msgid "The query \"%s\" couldn't be deleted: %s" +msgstr "Zoekopdracht \"%s\" kon niet worden verwijderd: %s" + +#: lib/Query.php:900 +#, php-format +msgid "The query \"%s\" has been deleted." +msgstr "Zoekopdracht \"%s\" is verwijderd." + +#: lib/Query.php:865 +#, php-format +msgid "The query couldn't be loaded:" +msgstr "Zoekopdracht kon niet worden geladen." + +#: admin.php:240 +#, php-format +msgid "The queue \"%s\" has been created." +msgstr "De queue \"%s\" is gemaakt." + +#: admin.php:318 +msgid "The queue has been deleted." +msgstr "De queue is verwijderd." + +#: admin.php:290 +msgid "The queue has been modified." +msgstr "De queue is veranderd." + +#: admin.php:323 +msgid "The queue was not deleted." +msgstr "De queue is niet verwijderd." + +#: lib/MIME/Viewer/zip.php:60 +msgid "The requested file does not exist in the Zip attachment." +msgstr "Het gevraagde bestand bestaat niet in de Zip bijlage." + +#: data.php:24 +msgid "The requested template does not exist." +msgstr "Het opgevraagde sjabloon bestaat niet." + +#: admin.php:338 +#, php-format +msgid "The state \"%s\" has been added to %s." +msgstr "Status \"%s\" is toegevoegd aan %s.'" + +#: admin.php:421 +msgid "The state has been deleted." +msgstr "De status is verwijderd." + +#: admin.php:392 +msgid "The state has been modified." +msgstr "De status is gewijzigd." + +#: admin.php:426 +msgid "The state was not deleted." +msgstr "De status was niet verwijderd." + +#: admin.php:625 +#, php-format +msgid "The subject \"%s\" has been added." +msgstr "Onderwerp \"%s\" is toegevoegd." + +#: admin.php:681 +msgid "The subject has been deleted." +msgstr "Het onderwerp is verwijderd." + +#: admin.php:662 +msgid "The subject has been modified." +msgstr "Het onderwerp is veranderd." + +#: admin.php:686 +msgid "The subject was not deleted." +msgstr "Het onderwerp is niet verwijderd." + +#: ticket/delete.php:75 +msgid "The ticket was not deleted." +msgstr "Het incident is niet verwijderd." + +#: admin.php:179 +#, php-format +msgid "The type \"%s\" has been modified." +msgstr "Het type \"%s\" is veranderd." + +#: admin.php:221 +msgid "The type has been deleted." +msgstr "Het type is verwijderd." + +#: admin.php:226 +msgid "The type was not deleted." +msgstr "Het type is niet verwijderd." + +#: admin.php:701 +#, php-format +msgid "The version \"%s\" has been added to %s." +msgstr "Versie \"%s\" is toegevoegd aan %s." + +#: admin.php:783 +msgid "The version has been deleted." +msgstr "De versie is verwijderd." + +#: admin.php:755 +msgid "The version has been modified." +msgstr "De versie is veranderd." + +#: admin.php:788 +msgid "The version was not deleted." +msgstr "De versie is niet verwijderd." + +#: lib/Admin.php:733 +msgid "There are no attribute types to edit" +msgstr "Er zijn geen attribuut typen om te bewerken" + +#: lib/Query.php:777 +msgid "There are no attributes defined for the current type" +msgstr "Er zijn geen attributen gedefineerd voor het huidige type" + +#: lib/Admin.php:557 +msgid "There are no priorities to edit" +msgstr "Er zijn geen prioriteiten om te bewerken" + +#: lib/Admin.php:805 +msgid "There are no queues available." +msgstr "Er zijn geen queues beschikbaar." + +#: lib/Admin.php:131 +msgid "There are no queues to edit" +msgstr "Er zijn geen queues om te bewerken" + +#: lib/Create.php:41 +msgid "There are no queues which you can create tickets in." +msgstr "Er zijn geen queues waar U incidenten kunt melden." + +#: search.php:42 +msgid "There are no queues which you can search." +msgstr "Er zijn geen queues die U kunt zoeken." + +#: lib/Admin.php:466 +msgid "There are no states to edit" +msgstr "Er zijn geen statussen om te bewerken" + +#: lib/Admin.php:37 +msgid "There are no subjects to edit" +msgstr "Er zijn geen onderwerpen om te bewerken" + +#: lib/Create.php:64 +msgid "" +"There are no ticket types associated with this queue; until there are, you " +"cannot create any tickets in this queue." +msgstr "" +"Er zijn geen incidenttypen gekoppeld aan deze queue; daarom kunt U geen " +"incidenten in deze queue zetten." + +#: lib/Admin.php:321 +msgid "There are no types to edit" +msgstr "Er zijn geen types om te bewerken" + +#: lib/Admin.php:283 +msgid "There are no users responsible for this queue." +msgstr "Er zijn geen gebruikers verantwoordelijk voor deze queue." + +#: ticket/people.php:65 lib/Create.php:174 +msgid "There are no users to which this ticket can be assigned." +msgstr "Er zijn geen gebruikers aan wie dit incident kan worden toegewezen." + +#: lib/Admin.php:645 +msgid "There are no versions to edit" +msgstr "Er zijn geen versies om te bewerken" + +#: graph.php:30 +msgid "There is no data for this graph." +msgstr "Er is geen data voor deze grafiek." + +#: lib/Reports.php:161 +msgid "There is no data for this report." +msgstr "Er is geen data voor die rapport." + +#: admin.php:569 +#, php-format +msgid "There was an error adding \"%s\" to the responsible list for \"%s\": %s" +msgstr "" +"Er was een fout bij het toevoegen van '%s' aan de lijst van " +"verantwoordelijken voor '%s': %s" + +#: admin.php:627 +#, php-format +msgid "There was an error adding the subject: %s." +msgstr "Er was een fout tijdens het toevoegen van het onderwerp: %s." + +#: admin.php:814 +#, php-format +msgid "There was an error creating the attribute: %s." +msgstr "Er was een fout tijdens het toevoegen van het attribuut: %s." + +#: admin.php:451 +#, php-format +msgid "There was an error creating the priority: %s." +msgstr "Er was een fout tijdens het toevoegen van de prioriteit: %s." + +#: admin.php:248 +#, php-format +msgid "There was an error creating the queue: %s." +msgstr "Fout bij het aanmaken van queue: %s." + +#: admin.php:340 +#, php-format +msgid "There was an error creating the state: %s." +msgstr "Fout bij het maken van status: %s." + +#: admin.php:703 +#, php-format +msgid "There was an error creating the version: %s." +msgstr "Fout bij het maken van versie: %s." + +#: admin.php:895 +#, php-format +msgid "There was an error deleting the attribute: %s." +msgstr "Fout bij het verwijderen van attribuut: %s." + +#: admin.php:532 +#, php-format +msgid "There was an error deleting the priority: %s." +msgstr "Fout bij het verwijderen van prioriteit: %s." + +#: admin.php:320 +#, php-format +msgid "There was an error deleting the queue: %s." +msgstr "Fout bij het verwijderen van queue: %s." + +#: admin.php:423 +#, php-format +msgid "There was an error deleting the state: %s." +msgstr "Er was een fout tijdens het verwijderen van de status: %s." + +#: admin.php:683 +#, php-format +msgid "There was an error deleting the subject: %s." +msgstr "Fout bij het verwijderen van onderwerp: %s." + +#: ticket/delete.php:72 +#, php-format +msgid "There was an error deleting the ticket: %s" +msgstr "Fout bij het verwijderen van incident: %s." + +#: admin.php:223 +#, php-format +msgid "There was an error deleting the type: %s." +msgstr "Fout bij het verwijderen van type: %s." + +#: admin.php:785 +#, php-format +msgid "There was an error deleting the version: %s." +msgstr "Fout bij het verwijderen van versie: %s." + +#: admin.php:871 +#, php-format +msgid "There was an error editing the attribute: %s." +msgstr "Fout bij het bewerken van attribuut: %s." + +#: admin.php:507 +#, php-format +msgid "There was an error editing the priority: %s." +msgstr "Fout bij het bewerken van priority: %s." + +#: admin.php:304 +#, php-format +msgid "There was an error editing the queue: %s." +msgstr "Fout bij bet bewerken van queue: %s." + +#: admin.php:397 +#, php-format +msgid "There was an error editing the state: %s." +msgstr "Fout bij het bewerken van status: %s." + +#: admin.php:667 +#, php-format +msgid "There was an error editing the subject: %s." +msgstr "Fout bij het bewerken van onderwerp: %s." + +#: admin.php:760 +#, php-format +msgid "There was an error editing the version: %s." +msgstr "Fout bij het bewerken van versie: %s." + +#: lib/Admin.php:243 +#, php-format +msgid "There was an error listing users: %s; %s" +msgstr "Fout bij het weergeven van gebruikers: %s; %s" + +#: mybugs.php:39 +#, php-format +msgid "There was an error listing your assigned tickets: %s" +msgstr "Fout bij het weergeven van uw toegewezen tickets: %s" + +#: mybugs.php:55 +#, php-format +msgid "There was an error listing your open requests: %s" +msgstr "Fout bij het weergeven van uw open aanvragen: %s" + +#: admin.php:177 +#, php-format +msgid "There was an error modifying the type: %s." +msgstr "Fout bij het veranderen van type: %s" + +#: search.php:153 +#, php-format +msgid "There was an error performing your search: %s" +msgstr "Fout bij het uitvoeren van zoekopdracht: %s" + +#: admin.php:605 +#, php-format +msgid "" +"There was an error removing \"%s\" from the responsible list for \"%s\": %s" +msgstr "" +"Fout bij het verwijderen van \"%s\" uit de lijst van verantwoordelijken voor " +"'%s': %s" + +#: data.php:27 +msgid "This is not a search results template." +msgstr "Dit is geen zoek resultaat sjabloon." + +#: lib/Admin.php:57 +msgid "This is not a valid subject." +msgstr "Dit is geen geldig onderwerp." + +#: ticket/queue.php:80 lib/Create.php:75 +msgid "" +"This queue requires that you specify a version, but there are no versions " +"associated with it. Until versions are created for this queue, you will not " +"be able to create tickets." +msgstr "" +"Deze queue vereist dat U een versie opgeeft, maar er zijn geen versies " +"gekoppeld. Totdat er versies zijn aangelegd voor deze queue, kunt u geen " +"tickets maken." + +#: lib/Ticket.php:484 +msgid "Ticket" +msgstr "Incidenten" + +#: ticket/delete.php:68 +#, php-format +msgid "Ticket %d has been deleted." +msgstr "Incident %d is verwijderd." + +#: lib/api.php:739 +#, php-format +msgid "Ticket %s - %s" +msgstr "Incident %s - %s" + +#: lib/Driver/sql.php:871 +#, php-format +msgid "Ticket %s was not found." +msgstr "Incident %s is niet gevonden." + +#: search.php:49 +msgid "Ticket ID" +msgstr "Incident Nummer" + +#: lib/Create.php:121 +msgid "Ticket State" +msgstr "Incident Status" + +#: templates/reports/stats.inc:3 +msgid "Ticket Stats" +msgstr "Incident Statussen" + +#: lib/Block/summary.php:3 +msgid "Ticket Summary" +msgstr "Incident Samenvatting" + +#: lib/Create.php:69 +msgid "Ticket Type" +msgstr "Incident Type" + +#: lib/Admin.php:158 +msgid "Ticket Types associated with this Queue" +msgstr "Incident Type gekoppeld met deze Queue" + +#: lib/Ticket.php:480 +#, php-format +msgid "Ticket URL: %s\n" +msgstr "Incident URL: %s\n" + +#: ticket/update.php:137 +msgid "Ticket Updated" +msgstr "Incident Gewijzigd" + +#: lib/api.php:760 +msgid "Tickets" +msgstr "Tickets" + +#: lib/Block/summary.php:52 +msgid "Tickets assigned to you" +msgstr "Incidenten toegewezen aan u" + +#: search.php:52 +msgid "Tickets which are" +msgstr "Incidenten welke zijn" + +#: lib/Block/summary.php:69 +msgid "Tickets you requested" +msgstr "Incidenten die u heeft opgevraagd" + +#: templates/queryrenderer.inc:117 ticket/queue.php:88 lib/Whups.php:458 +#: lib/Ticket.php:466 lib/Ticket.php:591 lib/Query.php:674 +#: config/prefs.php.dist:31 +msgid "Type" +msgstr "Type" + +#: templates/comment.inc:99 +#, php-format +msgid "Type ⇒ %s" +msgstr "Type ⇒ %s" + +#: lib/Admin.php:301 lib/Admin.php:345 lib/Admin.php:394 +msgid "Type Description" +msgstr "Type Omschrijving" + +#: lib/Admin.php:300 lib/Admin.php:324 lib/Admin.php:342 lib/Admin.php:391 +msgid "Type Name" +msgstr "Type Naam" + +#: search.php:55 +msgid "Types" +msgstr "Types" + +#: lib/Ticket.php:596 +msgid "Unassigned" +msgstr "Niet toegewezen" + +#: lib/Admin.php:816 +msgid "Unassigned tickets" +msgstr "Niet toegewezen incidenten" + +#: lib/Driver.php:140 +msgid "Unconfirmed" +msgstr "Niet bevestigd" + +#: templates/queryrenderer.inc:171 +#, php-format +msgid "Unknown node type %s" +msgstr "Onbekende node type %s" + +#: templates/comment.inc:80 lib/Whups.php:191 lib/api.php:707 +msgid "Update" +msgstr "Bijwerken" + +#: ticket/update.php:153 +#, php-format +msgid "Update %s" +msgstr "%s bijwerken" + +#: templates/admin/mtmatrix.inc:29 +msgid "Update Associations" +msgstr "Werk koppelingen bij" + +#: ticket/people.php:125 +#, php-format +msgid "Update People for %s" +msgstr "Bijwerken van Verantwoordelijken voor %s." + +#: lib/Ticket.php:471 lib/Ticket.php:485 +msgid "Updated By" +msgstr "Bijgewerkt door" + +#: lib/Admin.php:242 lib/Admin.php:252 lib/Admin.php:255 +msgid "User" +msgstr "Gebruiker" + +#: query.php:129 +msgid "User Criteria" +msgstr "Gebruiker Criteria" + +#: lib/Query.php:539 +msgid "User ID" +msgstr "Gebruikers nummer" + +#: lib/Admin.php:184 +msgid "Users responsible for this Queue" +msgstr "Gebruikers verantwoordelijk voor deze Queue" + +#: lib/Admin.php:287 +msgid "Users responsible for this queue" +msgstr "Gebruikers, verantwoordelijk voor deze Queue" + +#: templates/queryrenderer.inc:111 lib/Whups.php:461 lib/Ticket.php:463 +#: lib/Query.php:686 config/prefs.php.dist:34 +msgid "Version" +msgstr "Versie" + +#: lib/Admin.php:625 lib/Admin.php:671 lib/Admin.php:694 +msgid "Version Description" +msgstr "Versie Beschrijving" + +#: lib/Admin.php:624 lib/Admin.php:649 lib/Admin.php:668 lib/Admin.php:691 +msgid "Version Name" +msgstr "Versie Naam" + +#: templates/reports/graphs.inc:13 +msgid "View Graphs" +msgstr "Bekijk Grafieken" + +#: ticket/people.php:82 ticket/type.php:46 ticket/comment.php:42 +#: ticket/queue.php:51 +msgid "Viewable only by members of" +msgstr "Alleen zichtbaar door een lid van" + +#: lib/Whups.php:194 +msgid "Watch" +msgstr "Bewaak" + +#: ticket/watch.php:76 +#, php-format +msgid "Watchers for %s" +msgstr "'Bewakers' voor %s" + +#: config/prefs.php.dist:87 +msgid "Weekday Day Month" +msgstr "Weekdag Dag Maand" + +#: config/prefs.php.dist:88 +msgid "Weekday Day Month HH:MM:SS TZ" +msgstr "Weekdag Dag Maand HH:MM:SS TZ" + +#: ticket/delete.php:37 lib/Admin.php:90 lib/Admin.php:217 lib/Admin.php:405 +#: lib/Admin.php:521 lib/Admin.php:609 lib/Admin.php:697 lib/Admin.php:785 +#: lib/Query.php:884 +msgid "Yes" +msgstr "Ja" + +#: view.php:40 +msgid "You are not allowed to view this ticket." +msgstr "U mag dit incident niet te bekijken." + +#: lib/Driver/sql.php:874 +#, php-format +msgid "You do not have permission to access this ticket (%s)." +msgstr "U heeft geen permissie om dit incident te bekijken (%s)." + +#: lib/Query.php:854 +msgid "You have no saved queries." +msgstr "U heeft geen opgeslagen zoekopdrachten." + +#: lib/Whups.php:489 +msgid "You must select at least one queue to send reminders for." +msgstr "U moet minimaal een queue selectere om een herinnering voor te zenden." + +#: ticket/comment.php:26 lib/Create.php:35 +msgid "Your Email Address" +msgstr "Uw E-Mail adres" + +#: ticket/create.php:157 +#, php-format +msgid "" +"Your ticket ID is %s. An appropriate person has been notified of this " +"request." +msgstr "Uw incident ID is %s. Een melding is naar juiste persoon gestuurd." + +#: lib/Whups.php:554 +msgid "_Admin" +msgstr "Beheer" + +#: lib/Whups.php:543 +#, php-format +msgid "_My %s" +msgstr "_Mijn %s" + +#: lib/Whups.php:546 +msgid "_New Ticket" +msgstr "_Nieuw Incident" + +#: lib/Whups.php:548 +msgid "_Query Builder" +msgstr "_Zoekopdracht Bouwer" + +#: lib/Whups.php:550 +msgid "_Reports" +msgstr "_Rapportages" + +#: lib/Whups.php:545 +msgid "_Search" +msgstr "_Zoeken" + +#: templates/queryrenderer.inc:154 +msgid "contains (case insensitive) substring" +msgstr "bevat een (niet-hoofdletter gevoelig) deelwoord" + +#: templates/queryrenderer.inc:157 +msgid "contains (case sensitive) substring" +msgstr "bevat een (hoofdletter gevoelige) deelwoord" + +#: templates/queryrenderer.inc:160 +msgid "contains the word" +msgstr "bevat het woord" + +#: scripts/mail-filter.php:173 +#, php-format +msgid "error processing message: %s" +msgstr "Fout bij verwerken van bericht: %s" + +#: lib/api.php:748 +msgid "estimated time" +msgstr "geschatte tijd" + +#: templates/queryrenderer.inc:151 +msgid "is" +msgstr "is gelijk aan" + +#: templates/queryrenderer.inc:145 +msgid "is greater than" +msgstr "is groter dan" + +#: templates/queryrenderer.inc:148 +msgid "is less than" +msgstr "is kleiner dan" + +#: templates/queryrenderer.inc:163 +msgid "matches the pattern" +msgstr "voldoet aan het zoekpatroon " diff --git a/whups/po/pl_PL.po b/whups/po/pl_PL.po new file mode 100644 index 000000000..abf061c90 --- /dev/null +++ b/whups/po/pl_PL.po @@ -0,0 +1,2014 @@ +# Polish translations for Whups package +# Polskie tlumaczenia dla pakietu Whups. +# Copyright 2007-2009 The Horde Project +# This file is distributed under the same license as the Whups package. +# Automatically generated, 2007. +# Tadeusz Lesiecki , 2007. +# Piotr Tarnowski , 2007. +# +msgid "" +msgstr "" +"Project-Id-Version: Whups 1.0-cvs\n" +"Report-Msgid-Bugs-To: dev@lists.horde.org\n" +"POT-Creation-Date: 2007-06-27 13:00+0200\n" +"PO-Revision-Date: 2007-03-31 09:57+0200\n" +"Last-Translator: Piotr Tarnowski \n" +"Language-Team: Polish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-2\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" + +#: admin/index.php:605 +#, php-format +msgid "\"%s\" is no longer among those responsible for \"%s\"" +msgstr "\"%s\" nie jest ju¿ wspó³odpowiedzialny za \"%s\"" + +#: templates/menu.inc:5 +msgid "#Id" +msgstr "#Id" + +#: templates/ticket/watchers.inc:3 +#, php-format +msgid "%d people watching, %d people responsible" +msgstr "%d ludzi obserwuj±cych, %d ludzi odpowiedzialnych" + +#: lib/Driver.php:368 +#, php-format +msgid "%s (%s) wrote:" +msgstr "%s (%s) napisa³:" + +#: admin/index.php:569 +#, php-format +msgid "%s added to those responsible for \"%s\"" +msgstr "%s dodany do odpowiedzialnych za \"%s\"" + +#: templates/reports/stats.inc:17 +#, php-format +msgid "%s days" +msgstr "%s dni" + +#: ticket/watch.php:58 +#, php-format +msgid "%s will be notified when this ticket is updated." +msgstr "%s zostanie poinformowany o aktualizacji zg³oszenia." + +#: ticket/watch.php:70 +#, php-format +msgid "%s will no longer receive updates for this ticket." +msgstr "" +"%s nie bêdzie ju¿ otrzymywaæ informacji o aktualizacji tego zg³oszenia." + +#: admin/index.php:82 +msgid "- Stage 1" +msgstr "- Faza 1" + +#: admin/index.php:87 +msgid "- Stage 2" +msgstr "- Faza 2" + +#: scripts/mail-filter.php:164 +msgid "--priority-name or --priority-id must specify a valid Priority." +msgstr "" +"--nazwa-priorytetu lub --id-priorytetu musi okre¶laæ prawid³owy priorytet" + +#: scripts/mail-filter.php:158 +msgid "--queue-name or --queue-id must specify a valid Queue." +msgstr "--nazwa-kolejki lub --id-kolejki musi okre¶laæ prawid³ow± kolejkê." + +#: scripts/mail-filter.php:167 +msgid "--state-name or --state-id must specify a valid State." +msgstr "--nazwa-statusu lub --id-statusu musi okre¶laæ prawid³owy status." + +#: scripts/mail-filter.php:161 +msgid "--type-name or --type-id must specify a valid Type." +msgstr "--nazwa-typu lub --id-typu musi okre¶laæ prawid³owy typ." + +#: templates/prevnext.inc:12 +msgid "<>" +msgstr "" + +#: lib/Query.php:888 +msgid "Load Query" +msgstr "" + +#: config/prefs.php.dist:97 +msgid "MM/DD/YY" +msgstr "" + +#: config/prefs.php.dist:98 +msgid "MM/DD/YY HH:MM:SS" +msgstr "" + +#: lib/Forms/Admin.php:333 +#, php-format +msgid "Make a clone of %s" +msgstr "" + +#: lib/Query.php:818 +msgid "Match" +msgstr "" + +#: lib/Query.php:592 lib/Query.php:678 lib/Query.php:819 +msgid "Match Operator" +msgstr "" + +#: lib/Query.php:54 +msgid "Match Pattern" +msgstr "" + +#: lib/Query.php:53 +msgid "Match Word" +msgstr "" + +#: lib/Reports.php:20 +msgid "Maximum time a ticket is unresolved" +msgstr "" + +#: lib/Reports.php:21 +msgid "Minimum time a ticket is unresolved" +msgstr "" + +#: config/prefs.php.dist:128 +msgid "Most recent first" +msgstr "" + +#: ticket/queue.php:174 +#, php-format +msgid "Moved ticket %d to \"%s\"" +msgstr "" + +#: mybugs.php:52 +#, php-format +msgid "My %s" +msgstr "" + +#: mybugs_edit.php:32 +#, php-format +msgid "My %s :: Add Content" +msgstr "" + +#: search.php:106 lib/Block/myqueries.php:3 lib/Block/myqueries.php:24 +msgid "My Queries" +msgstr "Moje zapytania" + +#: lib/Block/myrequests.php:3 lib/Block/myrequests.php:24 +msgid "My Requests" +msgstr "Moje zg³oszenia" + +#: lib/Block/mytickets.php:3 lib/Block/mytickets.php:24 +#: config/prefs.php.dist:66 +msgid "My Tickets" +msgstr "Moje zg³oszenia" + +#: lib/api.php:854 +msgid "My tickets by assignment date" +msgstr "" + +#: lib/api.php:853 +msgid "My tickets by creation date" +msgstr "" + +#: lib/api.php:855 +msgid "My tickets by due date" +msgstr "" + +#: lib/api.php:856 +msgid "My tickets by resolution date" +msgstr "" + +#: lib/Query.php:867 lib/Query.php:899 +msgid "Name" +msgstr "Nazwa" + +#: lib/Forms/Admin.php:338 +msgid "Name of the cloned copy" +msgstr "" + +#: lib/Query.php:184 +msgid "Ne_w Query" +msgstr "" + +#: lib/Driver.php:164 +msgid "New" +msgstr "Nowy" + +#: lib/Ticket.php:494 lib/Ticket.php:539 +msgid "New Attachment" +msgstr "" + +#: templates/comment.inc:53 templates/comment.inc:55 +#, php-format +msgid "New Attachment: %s" +msgstr "" + +#: ticket/queue.php:31 +msgid "New Queue" +msgstr "" + +#: ticket/create.php:60 +msgid "New Ticket" +msgstr "" + +#: ticket/type.php:34 +msgid "New Type" +msgstr "" + +#: templates/prevnext.inc:16 +msgid "Next>" +msgstr "" + +#: lib/Query.php:926 lib/Forms/Admin.php:127 lib/Forms/Admin.php:319 +#: lib/Forms/Admin.php:435 lib/Forms/Admin.php:521 lib/Forms/Admin.php:607 +#: lib/Forms/Admin.php:699 ticket/delete.php:37 +msgid "No" +msgstr "Nie" + +#: lib/Block/myqueries.php:44 +msgid "No queries have been saved." +msgstr "Nie zapisano ¿adnych zapytañ." + +#: lib/Block/query.php:64 lib/Driver/sql.php:420 +msgid "No query to run" +msgstr "" + +#: lib/Block/queuecontents.php:25 +msgid "No queues available." +msgstr "" + +#: reports.php:19 +msgid "No stats available." +msgstr "" + +#: lib/Driver.php:404 +#, php-format +msgid "No such backend \"%s\" found" +msgstr "" + +#: lib/Block/mytickets.php:45 +msgid "No tickets are assigned to you." +msgstr "Nie ma ¿adnych przypisanych do Ciebie zg³oszeñ." + +#: lib/Block/unassigned.php:45 +msgid "No tickets are unassigned!" +msgstr "Brak nieprzypisanych zg³oszeñ!" + +#: lib/Block/queuecontents.php:62 lib/Block/queuecontents.php:73 +msgid "No tickets in queue." +msgstr "Brak zg³oszeñ w kolejce." + +#: lib/Whups.php:532 +msgid "No tickets matched your search criteria." +msgstr "¯adne zg³oszenia nie pasuj± do Twoich kryteriów wyszukiwania." + +#: lib/Reports.php:88 +msgid "None" +msgstr "Brak" + +#: lib/Query.php:572 templates/queryrenderer.inc:92 +msgid "Not" +msgstr "Nie" + +#: query.php:79 +msgid "Not yet implemented." +msgstr "Jeszcze nie zaimplementowano." + +#: config/prefs.php.dist:17 +msgid "Notification Options" +msgstr "Opcje powiadamiania" + +#: config/prefs.php.dist:108 +msgid "Only notify me of ticket changes from other users" +msgstr "" + +#: lib/Block/queuesummary.php:48 +msgid "Open Tickets" +msgstr "" + +#: lib/Reports.php:11 +msgid "Open Tickets by Owner" +msgstr "" + +#: lib/Reports.php:9 +msgid "Open Tickets by Priority" +msgstr "" + +#: lib/Reports.php:6 +msgid "Open Tickets by Queue" +msgstr "" + +#: lib/Reports.php:10 +msgid "Open Tickets by Requester" +msgstr "" + +#: lib/Reports.php:7 +msgid "Open Tickets by State" +msgstr "" + +#: lib/Reports.php:8 +msgid "Open Tickets by Type" +msgstr "" + +#: lib/Block/queuecontents.php:47 +#, php-format +msgid "Open Tickets in %s" +msgstr "" + +#: lib/Query.php:571 templates/queryrenderer.inc:91 +msgid "Or" +msgstr "" + +#: config/prefs.php.dist:9 config/prefs.php.dist:16 +msgid "Other Options" +msgstr "Inne opcje" + +#: lib/Ticket.php:493 lib/Ticket.php:531 lib/Ticket.php:532 lib/Ticket.php:534 +#: lib/Ticket.php:604 lib/Ticket.php:621 lib/Ticket.php:669 lib/Whups.php:497 +#: lib/Forms/CreateTicket.php:186 lib/Forms/CreateTicket.php:198 +#: lib/Forms/EditTicket.php:73 templates/queryrenderer.inc:97 +msgid "Owners" +msgstr "" + +#: lib/Whups.php:680 +#, php-format +msgid "Permanently delete %s?" +msgstr "" + +#: ticket/update.php:23 ticket/delete.php:17 ticket/type.php:17 +#: ticket/deleteAttachment.php:17 ticket/queue.php:124 +msgid "Permission Denied" +msgstr "Dostêp zabroniony" + +#: lib/Forms/EditTicket.php:104 ticket/delete.php:44 +msgid "Permission Denied." +msgstr "" + +#: runquery.php:38 query.php:31 lib/Query.php:936 +#, php-format +msgid "Permission denied." +msgstr "" + +#: lib/Forms/Admin.php:270 lib/Forms/Admin.php:316 +msgid "Priorities for this Type" +msgstr "" + +#: lib/Query.php:746 lib/Ticket.php:484 lib/Ticket.php:598 lib/Ticket.php:667 +#: lib/Whups.php:485 lib/Whups.php:494 lib/Forms/CreateTicket.php:118 +#: lib/Forms/EditTicket.php:30 templates/queryrenderer.inc:138 +#: ticket/type.php:69 ticket/queue.php:110 config/prefs.php.dist:40 +msgid "Priority" +msgstr "Priorytet" + +#: templates/comment.inc:98 +#, php-format +msgid "Priority ⇒ %s" +msgstr "" + +#: lib/Forms/Admin.php:449 lib/Forms/Admin.php:495 lib/Forms/Admin.php:518 +msgid "Priority Description" +msgstr "" + +#: lib/Forms/Admin.php:448 lib/Forms/Admin.php:473 lib/Forms/Admin.php:492 +#: lib/Forms/Admin.php:515 +msgid "Priority Name" +msgstr "" + +#: query.php:155 +msgid "Query Builder" +msgstr "" + +#: lib/Forms/QueryParameterForm.php:20 +msgid "Query Parameters" +msgstr "" + +#: runquery.php:81 lib/Block/query.php:3 lib/Block/query.php:51 +msgid "Query Results" +msgstr "" + +#: lib/Block/query.php:33 +msgid "Query to run" +msgstr "" + +#: lib/Query.php:729 lib/Ticket.php:480 lib/Ticket.php:594 lib/Ticket.php:648 +#: lib/Ticket.php:652 lib/Whups.php:495 lib/Block/queuecontents.php:32 +#: lib/Block/queuesummary.php:48 lib/Forms/Search.php:33 +#: templates/queryrenderer.inc:107 config/prefs.php.dist:41 +msgid "Queue" +msgstr "" + +#: templates/comment.inc:86 +#, php-format +msgid "Queue ⇒ %s" +msgstr "" + +#: lib/Block/queuecontents.php:3 lib/Block/queuecontents.php:49 +msgid "Queue Contents" +msgstr "" + +#: lib/Forms/Admin.php:24 lib/Forms/Admin.php:73 lib/Forms/Admin.php:124 +msgid "Queue Description" +msgstr "" + +#: lib/Forms/Admin.php:23 lib/Forms/Admin.php:52 lib/Forms/Admin.php:70 +#: lib/Forms/Admin.php:121 lib/Forms/CreateTicket.php:27 +#: lib/Forms/CreateTicket.php:37 +msgid "Queue Name" +msgstr "" + +#: lib/Block/queuesummary.php:3 lib/Block/queuesummary.php:24 +msgid "Queue Summary" +msgstr "" + +#: lib/Ticket.php:657 lib/Ticket.php:661 lib/Forms/CreateTicket.php:77 +#: ticket/queue.php:79 +msgid "Queue Version" +msgstr "" + +#: admin/index.php:36 +msgid "Queue/Type Matri_x" +msgstr "" + +#: templates/admin/mtmatrix.inc:6 +msgid "Queue/Type Matrix" +msgstr "" + +#: lib/api.php:160 lib/api.php:779 +msgid "Queues" +msgstr "" + +#: lib/Forms/Admin.php:700 +msgid "Really delete this attribute? This may cause data problems!" +msgstr "" + +#: lib/Forms/Admin.php:522 +msgid "Really delete this priority? This may cause data problems!" +msgstr "" + +#: lib/Query.php:927 +msgid "Really delete this query? This operation is not undoable." +msgstr "" + +#: lib/Forms/Admin.php:128 +msgid "Really delete this queue? This may cause data problems!" +msgstr "" + +#: lib/Forms/Admin.php:436 +msgid "Really delete this state? This may cause data problems!" +msgstr "" + +#: ticket/delete.php:38 +msgid "" +"Really delete this ticket? It will NOT be archived, and will be gone forever." +msgstr "" + +#: lib/Forms/Admin.php:320 +msgid "Really delete this type? This may cause data problems!" +msgstr "" + +#: lib/Forms/Admin.php:608 +msgid "Really delete this version? This may cause data problems!" +msgstr "" + +#: search.php:87 +msgid "Refine Search" +msgstr "" + +#: admin/index.php:854 +msgid "Reminders were sent." +msgstr "" + +#: lib/Forms/Admin.php:177 +msgid "Remove User" +msgstr "" + +#: ticket/watch.php:48 +msgid "Remove Watcher" +msgstr "" + +#: templates/comment.inc:81 +msgid "Reply to this comment" +msgstr "" + +#: reports.php:24 +msgid "Reports" +msgstr "" + +#: lib/Ticket.php:672 lib/Whups.php:496 templates/queryrenderer.inc:99 +msgid "Requester" +msgstr "" + +#: lib/Driver.php:166 lib/api.php:897 lib/Ticket.php:679 lib/Whups.php:501 +#: config/prefs.php.dist:45 +msgid "Resolved" +msgstr "Rozwi±zany" + +#: lib/Forms/Admin.php:179 +msgid "Responsible Users" +msgstr "" + +#: lib/Forms/EditTicket.php:97 +msgid "Restrict Comment to:" +msgstr "" + +#: templates/prevnext.inc:26 +msgid "Return to Search Results" +msgstr "" + +#: lib/Whups.php:203 +msgid "S_et Queue" +msgstr "" + +#: lib/Query.php:202 +msgid "Sa_ve Query" +msgstr "" + +#: lib/Query.php:865 templates/searchresults.inc:80 +msgid "Save" +msgstr "Zapisz" + +#: lib/Query.php:864 +msgid "Save Query" +msgstr "" + +#: templates/searchresults.inc:74 +msgid "Save these results as: " +msgstr "" + +#: search.php:26 +msgid "Search" +msgstr "Szukaj" + +#: lib/Query.php:822 +#, php-format +msgid "Search %s Attribute" +msgstr "" + +#: lib/Query.php:825 +msgid "Search Attribute" +msgstr "" + +#: lib/Query.php:595 lib/Query.php:680 +msgid "Search Comments" +msgstr "" + +#: lib/Query.php:593 +msgid "Search Owners" +msgstr "" + +#: lib/Query.php:594 +msgid "Search Requester" +msgstr "" + +#: search.php:82 +msgid "Search Results" +msgstr "Wyniki wyszukiwania" + +#: templates/prevnext.inc:22 +#, php-format +msgid "Search Results: %s of %s" +msgstr "" + +#: lib/Query.php:679 +msgid "Search Summary" +msgstr "" + +#: config/prefs.php.dist:67 +msgid "Search Tickets" +msgstr "" + +#: config/prefs.php.dist:69 +msgid "Select the view to display after login:" +msgstr "" + +#: admin/index.php:37 +msgid "Sen_d Reminders" +msgstr "" + +#: lib/Forms/Admin.php:711 +msgid "Send Reminders" +msgstr "" + +#: lib/Forms/Admin.php:722 +msgid "Send only for this list of ticket ids" +msgstr "" + +#: ticket/queue.php:195 ticket/queue.php:204 ticket/queue.php:216 +msgid "Set Queue - Step 1" +msgstr "" + +#: ticket/queue.php:196 ticket/queue.php:205 +msgid "Set Queue - Step 2" +msgstr "" + +#: ticket/queue.php:206 +msgid "Set Queue - Step 3" +msgstr "" + +#: ticket/queue.php:182 +#, php-format +msgid "Set Queue for %s" +msgstr "" + +#: ticket/type.php:137 ticket/type.php:146 +msgid "Set Type - Step 1" +msgstr "" + +#: ticket/type.php:138 +msgid "Set Type - Step 2" +msgstr "" + +#: ticket/type.php:124 +#, php-format +msgid "Set Type for %s" +msgstr "" + +#: lib/Whups.php:207 +msgid "Set _Type" +msgstr "" + +#: config/prefs.php.dist:126 +msgid "Show comments in chronological order, or most recent first?" +msgstr "" + +#: config/prefs.php.dist:86 +msgid "Show ticket IDs in the summary view?" +msgstr "" + +#: config/prefs.php.dist:78 +msgid "Show tickets you have requested in the summary view?" +msgstr "" + +#: config/templates.php.dist:16 +msgid "Simple HTML Report" +msgstr "" + +#: templates/searchresults.inc:99 templates/searchresults.inc:102 +#, php-format +msgid "Sort by %s" +msgstr "Sortuj po %s" + +#: lib/Forms/AddComment.php:20 lib/Forms/AddComment.php:51 +#: lib/Forms/CreateTicket.php:113 lib/Forms/CreateTicket.php:142 +msgid "Spam protection" +msgstr "" + +#: lib/Query.php:741 lib/Ticket.php:483 lib/Ticket.php:597 lib/Ticket.php:666 +#: lib/Whups.php:486 lib/Whups.php:492 lib/Forms/EditTicket.php:29 +#: templates/queryrenderer.inc:130 ticket/type.php:68 ticket/queue.php:109 +#: config/prefs.php.dist:38 +msgid "State" +msgstr "" + +#: templates/comment.inc:94 +#, php-format +msgid "State ⇒ %s" +msgstr "" + +#: lib/Forms/Admin.php:360 lib/Forms/Admin.php:409 +msgid "State Category" +msgstr "" + +#: lib/Forms/Admin.php:359 lib/Forms/Admin.php:406 lib/Forms/Admin.php:432 +msgid "State Description" +msgstr "" + +#: lib/Forms/Admin.php:358 lib/Forms/Admin.php:384 lib/Forms/Admin.php:403 +#: lib/Forms/Admin.php:429 +msgid "State Name" +msgstr "" + +#: lib/Forms/Admin.php:260 lib/Forms/Admin.php:312 +msgid "States for this Type" +msgstr "" + +#: templates/ticket/watchers.inc:1 +msgid "Status" +msgstr "Status" + +#: ticket/create.php:124 +msgid "Submit" +msgstr "Wy¶lij" + +#: admin/index.php:162 +#, php-format +msgid "Successfully Cloned %s to %s." +msgstr "" + +#: ticket/type.php:115 +msgid "Successfully changed ticket type." +msgstr "" + +#: lib/Ticket.php:492 lib/Ticket.php:508 lib/Ticket.php:509 lib/Ticket.php:511 +#: lib/Ticket.php:604 lib/Ticket.php:612 lib/Ticket.php:646 lib/Whups.php:484 +#: lib/Whups.php:491 lib/Forms/CreateTicket.php:120 +#: lib/Forms/EditTicket.php:28 templates/queryrenderer.inc:102 +#: ticket/delete.php:34 config/prefs.php.dist:37 +msgid "Summary" +msgstr "Podsumowanie" + +#: templates/comment.inc:47 +#, php-format +msgid "Summary ⇒ %s" +msgstr "" + +#: lib/Forms/Search.php:36 +msgid "Summary like" +msgstr "" + +#: templates/comment.inc:69 +#, php-format +msgid "Taken from %s" +msgstr "" + +#: lib/Query.php:677 +msgid "Text" +msgstr "Tekst" + +#: view.php:55 lib/Ticket.php:356 lib/Ticket.php:394 +msgid "The VFS backend needs to be configured to enable attachment uploads." +msgstr "Aby wgrywaæ za³±czniki musi byæ skonfigurowany backend VFS." + +#: admin/index.php:739 +#, php-format +msgid "The attribute \"%s\" has been added to %s." +msgstr "" + +#: admin/index.php:825 +msgid "The attribute has been deleted." +msgstr "" + +#: admin/index.php:794 +msgid "The attribute has been modified." +msgstr "" + +#: admin/index.php:830 +msgid "The attribute was not deleted." +msgstr "" + +#: admin/index.php:451 +#, php-format +msgid "The priority \"%s\" has been added to %s." +msgstr "" + +#: admin/index.php:532 +msgid "The priority has been deleted." +msgstr "" + +#: admin/index.php:504 +msgid "The priority has been modified." +msgstr "" + +#: admin/index.php:537 +msgid "The priority was not deleted." +msgstr "" + +#: lib/Query.php:940 +#, php-format +msgid "The query \"%s\" couldn't be deleted: %s" +msgstr "" + +#: lib/Query.php:942 +#, php-format +msgid "The query \"%s\" has been deleted." +msgstr "" + +#: lib/Query.php:907 +#, php-format +msgid "The query couldn't be loaded:" +msgstr "" + +#: admin/index.php:241 +#, php-format +msgid "The queue \"%s\" has been created." +msgstr "" + +#: admin/index.php:320 +msgid "The queue has been deleted." +msgstr "" + +#: admin/index.php:292 +msgid "The queue has been modified." +msgstr "" + +#: admin/index.php:325 +msgid "The queue was not deleted." +msgstr "" + +#: lib/MIME/Viewer/zip.php:59 +msgid "The requested file does not exist in the Zip attachment." +msgstr "¯±dany plik nie wystêpuje w za³±czniku Zip." + +#: data.php:26 +msgid "The requested template does not exist." +msgstr "" + +#: admin/index.php:340 +#, php-format +msgid "The state \"%s\" has been added to %s." +msgstr "" + +#: admin/index.php:423 +msgid "The state has been deleted." +msgstr "" + +#: admin/index.php:394 +msgid "The state has been modified." +msgstr "" + +#: admin/index.php:428 +msgid "The state was not deleted." +msgstr "" + +#: ticket/delete.php:75 +msgid "The ticket was not deleted." +msgstr "" + +#: admin/index.php:180 +#, php-format +msgid "The type \"%s\" has been modified." +msgstr "" + +#: admin/index.php:222 +msgid "The type has been deleted." +msgstr "" + +#: admin/index.php:227 +msgid "The type was not deleted." +msgstr "" + +#: admin/index.php:629 +#, php-format +msgid "The version \"%s\" has been added to %s." +msgstr "" + +#: admin/index.php:711 +msgid "The version has been deleted." +msgstr "" + +#: admin/index.php:683 +msgid "The version has been modified." +msgstr "" + +#: admin/index.php:716 +msgid "The version was not deleted." +msgstr "" + +#: lib/Forms/Admin.php:647 +msgid "There are no attribute types to edit" +msgstr "" + +#: lib/Query.php:825 +msgid "There are no attributes defined for the current type" +msgstr "" + +#: lib/Block/queuesummary.php:43 +msgid "There are no open tickets." +msgstr "" + +#: lib/Forms/Admin.php:469 +msgid "There are no priorities to edit" +msgstr "" + +#: lib/Forms/Admin.php:719 +msgid "There are no queues available." +msgstr "" + +#: lib/Forms/Admin.php:49 +msgid "There are no queues to edit" +msgstr "" + +#: lib/Forms/CreateTicket.php:27 +msgid "There are no queues which you can create tickets in." +msgstr "" + +#: lib/Forms/Search.php:31 +msgid "There are no queues which you can search." +msgstr "" + +#: lib/Forms/Admin.php:380 +msgid "There are no states to edit" +msgstr "" + +#: lib/Forms/CreateTicket.php:61 +msgid "" +"There are no ticket types associated with this queue; until there are, you " +"cannot create any tickets in this queue." +msgstr "" + +#: lib/Forms/Admin.php:231 +msgid "There are no types to edit" +msgstr "" + +#: lib/Forms/Admin.php:193 +msgid "There are no users responsible for this queue." +msgstr "" + +#: lib/Forms/CreateTicket.php:197 +msgid "There are no users to which this ticket can be assigned." +msgstr "" + +#: lib/Forms/Admin.php:555 +msgid "There are no versions to edit" +msgstr "" + +#: lib/Reports.php:161 +msgid "There is no data for this report." +msgstr "" + +#: admin/index.php:571 +#, php-format +msgid "There was an error adding \"%s\" to the responsible list for \"%s\": %s" +msgstr "" + +#: admin/index.php:742 +#, php-format +msgid "There was an error creating the attribute: %s." +msgstr "" + +#: admin/index.php:453 +#, php-format +msgid "There was an error creating the priority: %s." +msgstr "" + +#: admin/index.php:249 +#, php-format +msgid "There was an error creating the queue: %s." +msgstr "" + +#: admin/index.php:342 +#, php-format +msgid "There was an error creating the state: %s." +msgstr "" + +#: admin/index.php:631 +#, php-format +msgid "There was an error creating the version: %s." +msgstr "" + +#: admin/index.php:827 +#, php-format +msgid "There was an error deleting the attribute: %s." +msgstr "" + +#: admin/index.php:534 +#, php-format +msgid "There was an error deleting the priority: %s." +msgstr "" + +#: admin/index.php:322 +#, php-format +msgid "There was an error deleting the queue: %s." +msgstr "" + +#: admin/index.php:425 +#, php-format +msgid "There was an error deleting the state: %s." +msgstr "" + +#: ticket/delete.php:72 +#, php-format +msgid "There was an error deleting the ticket: %s" +msgstr "" + +#: admin/index.php:224 +#, php-format +msgid "There was an error deleting the type: %s." +msgstr "" + +#: admin/index.php:713 +#, php-format +msgid "There was an error deleting the version: %s." +msgstr "" + +#: admin/index.php:802 +#, php-format +msgid "There was an error editing the attribute: %s." +msgstr "" + +#: admin/index.php:509 +#, php-format +msgid "There was an error editing the priority: %s." +msgstr "" + +#: admin/index.php:306 +#, php-format +msgid "There was an error editing the queue: %s." +msgstr "" + +#: admin/index.php:399 +#, php-format +msgid "There was an error editing the state: %s." +msgstr "" + +#: admin/index.php:688 +#, php-format +msgid "There was an error editing the version: %s." +msgstr "" + +#: lib/Forms/Admin.php:153 +#, php-format +msgid "There was an error listing users: %s; %s" +msgstr "" + +#: admin/index.php:178 +#, php-format +msgid "There was an error modifying the type: %s." +msgstr "" + +#: search.php:76 +#, php-format +msgid "There was an error performing your search: %s" +msgstr "" + +#: admin/index.php:607 +#, php-format +msgid "" +"There was an error removing \"%s\" from the responsible list for \"%s\": %s" +msgstr "" + +#: data.php:29 +msgid "This is not a search results template." +msgstr "" + +#: lib/Forms/CreateTicket.php:72 ticket/queue.php:74 +msgid "" +"This queue requires that you specify a version, but there are no versions " +"associated with it. Until versions are created for this queue, you will not " +"be able to create tickets." +msgstr "" + +#: lib/Ticket.php:505 lib/Ticket.php:611 +msgid "Ticket" +msgstr "Zg³oszenia" + +#: ticket/delete.php:68 +#, php-format +msgid "Ticket %d has been deleted." +msgstr "" + +#: lib/api.php:825 +#, php-format +msgid "Ticket %s - %s" +msgstr "" + +#: lib/Driver/sql.php:866 +#, php-format +msgid "Ticket %s was not found." +msgstr "" + +#: search.php:98 +msgid "Ticket Search" +msgstr "Wyszukiwanie zg³oszeñ" + +#: lib/Forms/CreateTicket.php:117 +msgid "Ticket State" +msgstr "" + +#: templates/reports/stats.inc:3 +msgid "Ticket Stats" +msgstr "" + +#: lib/Forms/CreateTicket.php:66 +msgid "Ticket Type" +msgstr "" + +#: lib/Forms/Admin.php:76 +msgid "Ticket Types associated with this Queue" +msgstr "" + +#: lib/Ticket.php:501 +#, php-format +msgid "Ticket URL: %s\n" +msgstr "" + +#: ticket/update.php:82 +msgid "Ticket Updated" +msgstr "" + +#: lib/api.php:846 +msgid "Tickets" +msgstr "Zg³oszenia" + +#: lib/Forms/Search.php:38 +msgid "Tickets which are" +msgstr "Zg³oszenia, które s±" + +#: lib/Query.php:722 lib/Ticket.php:482 lib/Ticket.php:596 lib/Ticket.php:665 +#: lib/Whups.php:493 templates/queryrenderer.inc:121 ticket/queue.php:82 +#: config/prefs.php.dist:39 +msgid "Type" +msgstr "Typ" + +#: templates/comment.inc:90 +#, php-format +msgid "Type ⇒ %s" +msgstr "" + +#: lib/Forms/Admin.php:211 lib/Forms/Admin.php:255 lib/Forms/Admin.php:308 +msgid "Type Description" +msgstr "" + +#: lib/Forms/Admin.php:210 lib/Forms/Admin.php:234 lib/Forms/Admin.php:252 +#: lib/Forms/Admin.php:305 +msgid "Type Name" +msgstr "" + +#: lib/Forms/Search.php:41 +msgid "Types" +msgstr "" + +#: lib/Ticket.php:670 +msgid "Unassigned" +msgstr "" + +#: lib/Block/unassigned.php:3 lib/Block/unassigned.php:24 +msgid "Unassigned Tickets" +msgstr "" + +#: lib/Forms/Admin.php:730 +msgid "Unassigned tickets" +msgstr "" + +#: lib/Driver.php:163 +msgid "Unconfirmed" +msgstr "Niepotwierdzone" + +#: templates/queryrenderer.inc:148 templates/queryrenderer.inc:188 +#, php-format +msgid "Unknown node type %s" +msgstr "" + +#: lib/api.php:793 +msgid "Update" +msgstr "Zaktualizuj" + +#: ticket/update.php:97 +#, php-format +msgid "Update %s" +msgstr "Aktualizuj %s" + +#: templates/admin/mtmatrix.inc:29 +msgid "Update Associations" +msgstr "" + +#: lib/Ticket.php:677 lib/Whups.php:499 +msgid "Updated" +msgstr "" + +#: lib/Ticket.php:491 lib/Ticket.php:506 +msgid "Updated By" +msgstr "" + +#: lib/Forms/Admin.php:152 lib/Forms/Admin.php:162 lib/Forms/Admin.php:165 +msgid "User" +msgstr "U¿ytkownik" + +#: lib/Query.php:591 +msgid "User ID" +msgstr "" + +#: lib/Forms/Admin.php:94 +msgid "Users responsible for this Queue" +msgstr "" + +#: lib/Forms/Admin.php:197 +msgid "Users responsible for this queue" +msgstr "" + +#: lib/Query.php:733 lib/Ticket.php:481 lib/Ticket.php:595 +#: templates/queryrenderer.inc:115 config/prefs.php.dist:42 +msgid "Version" +msgstr "" + +#: lib/Forms/Admin.php:535 lib/Forms/Admin.php:581 lib/Forms/Admin.php:604 +msgid "Version Description" +msgstr "" + +#: lib/Forms/Admin.php:534 lib/Forms/Admin.php:559 lib/Forms/Admin.php:578 +#: lib/Forms/Admin.php:601 +msgid "Version Name" +msgstr "" + +#: lib/Forms/AddComment.php:38 ticket/type.php:46 ticket/queue.php:45 +msgid "Viewable only by members of" +msgstr "" + +#: lib/Forms/AddComment.php:25 +msgid "Watch this ticket" +msgstr "" + +#: ticket/watch.php:76 +#, php-format +msgid "Watchers for %s" +msgstr "" + +#: config/prefs.php.dist:95 +msgid "Weekday Day Month" +msgstr "" + +#: config/prefs.php.dist:96 +msgid "Weekday Day Month HH:MM:SS TZ" +msgstr "" + +#: lib/Query.php:926 lib/Forms/Admin.php:127 lib/Forms/Admin.php:319 +#: lib/Forms/Admin.php:435 lib/Forms/Admin.php:521 lib/Forms/Admin.php:607 +#: lib/Forms/Admin.php:699 ticket/delete.php:37 +msgid "Yes" +msgstr "Tak" + +#: view.php:51 +msgid "You are not allowed to view this ticket." +msgstr "" + +#: lib/Driver/sql.php:869 +#, php-format +msgid "You do not have permission to access this ticket (%s)." +msgstr "" + +#: lib/api.php:527 +msgid "You do not have permission to update this ticket." +msgstr "" + +#: lib/Block/myrequests.php:46 +msgid "You have no open requests." +msgstr "Nie masz otwartych zg³oszeñ." + +#: lib/Query.php:896 lib/Block/query.php:28 +msgid "You have no saved queries." +msgstr "" + +#: lib/Whups.php:526 +msgid "You must select at least one queue to send reminders for." +msgstr "" + +#: lib/Forms/AddComment.php:18 lib/Forms/CreateTicket.php:111 +msgid "Your Email Address" +msgstr "Twój adres email" + +#: ticket/create.php:53 +#, php-format +msgid "" +"Your ticket ID is %s. An appropriate person has been notified of this " +"request." +msgstr "" + +#: lib/Whups.php:589 +msgid "_Admin" +msgstr "" + +#: lib/Whups.php:198 +msgid "_Comment" +msgstr "" + +#: lib/Whups.php:208 +msgid "_Delete" +msgstr "Usuñ" + +#: lib/Query.php:205 +msgid "_Delete Query" +msgstr "" + +#: lib/Query.php:186 +msgid "_Edit Query" +msgstr "" + +#: admin/index.php:34 +msgid "_Edit Queues" +msgstr "" + +#: templates/menu.inc:5 +msgid "_Go" +msgstr "" + +#: query.php:139 +msgid "_Group Criteria" +msgstr "" + +#: lib/Whups.php:194 +msgid "_History" +msgstr "" + +#: lib/Query.php:199 +msgid "_Load Query" +msgstr "" + +#: lib/Whups.php:580 +#, php-format +msgid "_My %s" +msgstr "_Moje %s" + +#: lib/Whups.php:583 +msgid "_New Ticket" +msgstr "_Nowe zg³oszenie" + +#: query.php:137 +msgid "_Property Criteria" +msgstr "" + +#: lib/Whups.php:584 +msgid "_Query Builder" +msgstr "Konstruktor zapytañ" + +#: lib/Whups.php:585 +msgid "_Reports" +msgstr "_Raporty" + +#: lib/Whups.php:582 +msgid "_Search" +msgstr "_Szukaj" + +#: query.php:141 +msgid "_Text Criteria" +msgstr "" + +#: lib/Whups.php:196 +msgid "_Update" +msgstr "" + +#: query.php:138 +msgid "_User Criteria" +msgstr "" + +#: lib/Whups.php:200 +msgid "_Watch" +msgstr "" + +#: templates/queryrenderer.inc:168 +msgid "contains (case insensitive) substring" +msgstr "" + +#: templates/queryrenderer.inc:172 +msgid "contains (case sensitive) substring" +msgstr "" + +#: templates/queryrenderer.inc:176 +msgid "contains the word" +msgstr "" + +#: scripts/mail-filter.php:176 +#, php-format +msgid "error processing message: %s" +msgstr "" + +#: lib/api.php:834 +msgid "estimated time" +msgstr "" + +#: templates/queryrenderer.inc:164 +msgid "is" +msgstr "" + +#: templates/queryrenderer.inc:156 +msgid "is greater than" +msgstr "" + +#: templates/queryrenderer.inc:160 +msgid "is less than" +msgstr "" + +#: templates/queryrenderer.inc:180 +msgid "matches the pattern" +msgstr "" diff --git a/whups/po/pt_BR.po b/whups/po/pt_BR.po new file mode 100644 index 000000000..71e8b1cf1 --- /dev/null +++ b/whups/po/pt_BR.po @@ -0,0 +1,1898 @@ +# Portuguese translations for horde package +# Traduções em português para o pacote horde. +# Copyright 2005-2009 The Horde Project +# This file is distributed under the same license as the horde package. +# Automatically generated, 2004. +# +msgid "" +msgstr "" +"Project-Id-Version: Whups 1.0-cvs\n" +"Report-Msgid-Bugs-To: dev@lists.horde.org\n" +"POT-Creation-Date: 2005-01-03 18:00+0300\n" +"PO-Revision-Date: 2005-01-21 12:09+0100\n" +"Last-Translator: Daniel V. Hoisel \n" +"Language-Team: i18n@lists.horde.org\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: templates/menu.inc:6 +msgid "#Id" +msgstr "#Id" + +#: admin.php:554 +#, php-format +msgid "%s added to those responsible for '%s'" +msgstr "%s adicionado pela responsabilidade de %s" + +#: templates/reports/stats.inc:20 +#, php-format +msgid "%s days" +msgstr "%s dias" + +#: admin.php:591 +#, php-format +msgid "'%s' is no longer among those responsible for '%s'" +msgstr "%s não é atualmente responsável por %s" + +#: admin.php:78 +msgid "- Stage 1" +msgstr "- Estágio 1" + +#: admin.php:83 +msgid "- Stage 2" +msgstr "- Estágio 2" + +#: scripts/mail-filter.php:98 +msgid "--priority option must be supplied." +msgstr "--a opção de prioridade deve ser informada." + +#: scripts/mail-filter.php:70 +msgid "--queue option must be supplied." +msgstr "--a opção de fila deve ser informada." + +#: scripts/mail-filter.php:112 +msgid "--state option must be supplied." +msgstr "--a opção de estágio deve ser informada." + +#: scripts/mail-filter.php:84 +msgid "--type option must be supplied." +msgstr "--a opção tipo deve ser informada." + +#: lib/Block/summary.php:89 +msgid "No summary" +msgstr "Sem sumário" + +#: view.php:55 +#, php-format +msgid "Access denied to %s" +msgstr "Acesso negado para %s" + +#: lib/Admin.php:702 +msgid "Add Attribute" +msgstr "Adicionar atributo" + +#: lib/Query.php:649 +msgid "Add Attribute Criterion" +msgstr "Adicionar critério de atributo" + +#: query.php:169 +msgid "Add Criterion" +msgstr "Adicionar critério" + +#: lib/Query.php:488 +msgid "Add Group Criterion" +msgstr "Adicionar critério de grupo" + +#: lib/Admin.php:526 +msgid "Add Priority" +msgstr "Adicionar prioridade" + +#: lib/Query.php:570 +msgid "Add Property Criterion" +msgstr "Adicionar prioridade de critério" + +#: lib/Admin.php:102 lib/Admin.php:103 +msgid "Add Queue" +msgstr "Adicionar fila" + +#: lib/Admin.php:434 +msgid "Add State" +msgstr "Adicionar estado" + +#: lib/Admin.php:14 lib/Admin.php:15 +msgid "Add Subject" +msgstr "Adicionar assunto" + +#: lib/Query.php:526 +msgid "Add Text Criterion" +msgstr "Adicionar texto do critério" + +#: lib/Admin.php:291 lib/Admin.php:292 +msgid "Add Type" +msgstr "Adicionar tipo" + +#: admin.php:78 admin.php:83 +#, php-format +msgid "Add Type %s" +msgstr "Adicioar tipo %s" + +#: lib/Query.php:433 +msgid "Add User Criterion" +msgstr "Adicionar critério de usuário" + +#: lib/Admin.php:222 +msgid "Add Users" +msgstr "Adicionar usuários" + +#: lib/Admin.php:614 +msgid "Add Version" +msgstr "Adicionar versão" + +#: ticket/create.php:154 +#, php-format +msgid "Adding your ticket failed: %s." +msgstr "Falha ao adicionar seu ticket: %s." + +#: admin.php:51 +msgid "Administration" +msgstr "Administração" + +#: templates/queryrenderer.inc:95 lib/Query.php:383 +msgid "And" +msgstr "e" + +#: search.php:39 search.php:87 search.php:88 search.php:104 search.php:121 +#: lib/Query.php:577 lib/Query.php:585 lib/Query.php:589 lib/Query.php:592 +msgid "Any" +msgstr "Qualquer um" + +#: ticket/update.php:67 ticket/people.php:73 ticket/type.php:41 +#: ticket/comment.php:36 ticket/queue.php:46 +msgid "Any Group" +msgstr "Qualquer grupo" + +#: config/prefs.php.dist:47 +msgid "Ascending" +msgstr "Ascendente" + +#: ticket/people.php:116 +msgid "Assign Ticket Succeeded" +msgstr "Assinatura do ticket bem-sucedida" + +#: lib/Whups.php:405 lib/Ticket.php:506 lib/Driver.php:98 +#: config/prefs.php.dist:36 +msgid "Assigned" +msgstr "Assinado" + +#: admin.php:941 +msgid "Associations updated successfully." +msgstr "Associações atualizadas com sucesso." + +#: ticket/update.php:60 ticket/comment.php:28 lib/Ticket.php:402 +#: lib/Ticket.php:448 +msgid "Attachment" +msgstr "Anexo" + +#: lib/Ticket.php:508 +msgid "Attachments" +msgstr "Anexos" + +#: query.php:40 +msgid "Attribute Criteria" +msgstr "Critério do atributo" + +#: lib/Admin.php:706 lib/Admin.php:752 lib/Admin.php:775 +msgid "Attribute Description" +msgstr "Descrição do atributo" + +#: lib/Admin.php:705 lib/Admin.php:730 lib/Admin.php:749 lib/Admin.php:772 +msgid "Attribute Name" +msgstr "Nome do atributo" + +#: lib/Admin.php:363 +msgid "Attributes for this Type" +msgstr "Atributos para este tipo" + +#: config/prefs.php.dist:118 +msgid "Autolink to other tickets in comments?" +msgstr "Ligar automaticamente para outros tickets nos comentários " + +#: lib/Reports.php:9 +msgid "Average days to close by Owner" +msgstr "Média de dias para fechar por Proprietário" + +#: lib/Reports.php:11 +msgid "Average days to close by Queue" +msgstr "Média de dias para fechar por fila" + +#: lib/Reports.php:10 +msgid "Average days to close by Requester" +msgstr "Média de dias para fechar por Requisitante" + +#: lib/Reports.php:13 +msgid "Average time a ticket is unresolved" +msgstr "Tempo médio em que um ticket fica sem solução" + +#: scripts/mail-filter.php:94 +#, php-format +msgid "Bad type `%s' for queue." +msgstr "Tipo `%s' ruim para fila" + +#: lib/Query.php:388 +msgid "Branch Type" +msgstr "" + +#: lib/Query.php:52 +msgid "Case Insensitive Substring" +msgstr "Sequência não sensível ao caso" + +#: templates/queryrenderer.inc:27 +msgid "Change" +msgstr "Alterar" + +#: lib/Query.php:402 +msgid "Change Ticket Type" +msgstr "Alterar tipo do ticket" + +#: config/prefs.php.dist:11 +msgid "Change display options such as how search results are sorted." +msgstr "Alterar opções de exibição de como as pesquisas serão classificadas" + +#: config/prefs.php.dist:18 +msgid "Change options for email notifications of ticket activity." +msgstr "Alterar as opções para notificações por e-mail da atividade do ticket" + +#: query.php:43 +msgid "Choose Action:" +msgstr "Escolher ação:" + +#: lib/Create.php:27 +msgid "Choose:" +msgstr "Escolher" + +#: config/prefs.php.dist:128 +msgid "Chronological (oldest first)" +msgstr "Cronológica (antigas primeiro)" + +#: templates/savedsearches.inc:28 +msgid "Clear All Searches" +msgstr "Limpar todas as pesquisas" + +#: lib/Admin.php:414 +msgid "Clone" +msgstr "Clonar" + +#: lib/Admin.php:420 +msgid "Clone Description" +msgstr "Descrição do clone" + +#: admin.php:117 lib/Admin.php:306 +msgid "Clone Type" +msgstr "Clonar tipo" + +#: config/templates.php.dist:43 +msgid "Comma Separated Values (CSV file)" +msgstr "Valores separados por vírgula (arquivo CSV)" + +#: templates/queryrenderer.inc:108 templates/comment.inc:89 +#: ticket/update.php:61 ticket/people.php:68 ticket/type.php:35 +#: ticket/comment.php:27 ticket/queue.php:38 lib/Whups.php:194 +msgid "Comment" +msgstr "Comentário" + +#: ticket/comment.php:86 +msgid "Comment added" +msgstr "Comentário adicionado" + +#: ticket/comment.php:92 +#, php-format +msgid "Comment on %s" +msgstr "Comentário em %s" + +#: templates/queryrenderer.inc:107 +msgid "Commentor" +msgstr "Comentarista" + +#: lib/Admin.php:418 +#, php-format +msgid "Copy of %s" +msgstr "Copia de %s" + +#: lib/Query.php:493 +msgid "Could not find any groups." +msgstr "Não encontrei nenhum grupo" + +#: lib/Admin.php:357 +msgid "Create Default Priorities" +msgstr "Criar prioridades padrão" + +#: lib/Admin.php:347 +msgid "Create Default States" +msgstr "Criar Estados padrão" + +#: config/prefs.php.dist:60 +msgid "Create Ticket" +msgstr "Criar ticket" + +#: lib/Create.php:23 +msgid "Create Ticket - Step 1" +msgstr "Criar ticket - Passo 1" + +#: lib/Create.php:52 +msgid "Create Ticket - Step 2" +msgstr "Criar ticket - Passo 2" + +#: lib/Create.php:92 +msgid "Create Ticket - Step 3" +msgstr "Criar ticket - Passo 3" + +#: lib/Create.php:135 +msgid "Create Ticket - Step 4" +msgstr "Criar ticket - Passo 4" + +#: lib/Whups.php:404 lib/Ticket.php:505 config/prefs.php.dist:35 +msgid "Created" +msgstr "Criado" + +#: lib/Ticket.php:398 lib/Ticket.php:412 +msgid "Created By" +msgstr "Criado por" + +#: query.php:159 query.php:182 +msgid "Current Query" +msgstr "Consulta atual" + +#: templates/queryrenderer.inc:25 +msgid "Current Ticket Type" +msgstr "Tipo do ticket atualmente" + +#: lib/Query.php:404 +msgid "Current Type" +msgstr "Tipo atual" + +#: lib/Ticket.php:457 +msgid "DO NOT REPLY TO THIS MESSAGE. THIS EMAIL ADDRESS IS NOT MONITORED." +msgstr "NÃO RESPONDA A ESTA MENSAGEM. ESTE E-MAIL NÃO É MONITORADO" + +#: config/prefs.php.dist:91 +msgid "Date/Time format for search results" +msgstr "Formato de data/hora para resultado das pesquisas" + +#: config/prefs.php.dist:38 +msgid "Default sorting criteria:" +msgstr "Critério de classificação padrão" + +#: config/prefs.php.dist:49 +msgid "Default sorting direction:" +msgstr "Direção de classificação padrão" + +#: query.php:44 lib/Whups.php:202 +msgid "Delete" +msgstr "Apagar" + +#: ticket/delete.php:58 +#, php-format +msgid "Delete %s?" +msgstr "Apagar %s?" + +#: admin.php:835 lib/Admin.php:718 +msgid "Delete Attribute" +msgstr "Apagar atributo" + +#: lib/Admin.php:764 +msgid "Delete Attribute Confirmation" +msgstr "Confirmação para apagar atributo" + +#: admin.php:472 lib/Admin.php:542 +msgid "Delete Priority" +msgstr "Apagar prioridade" + +#: lib/Admin.php:588 +msgid "Delete Priority Confirmation" +msgstr "Confirmação para apagar prioridade" + +#: admin.php:265 lib/Admin.php:118 +msgid "Delete Queue" +msgstr "Apagar fila" + +#: lib/Admin.php:197 +msgid "Delete Queue Confirmation" +msgstr "Confirmação para apagar fila" + +#: templates/savedsearches.inc:45 templates/savedsearches.inc:46 +msgid "Delete Search" +msgstr "Apagar pesquisa" + +#: admin.php:362 lib/Admin.php:451 +msgid "Delete State" +msgstr "Apagar estado" + +#: lib/Admin.php:500 +msgid "Delete State Confirmation" +msgstr "Confirmação para apagar estado" + +#: admin.php:634 lib/Admin.php:29 +msgid "Delete Subject" +msgstr "Apagar assunto" + +#: lib/Admin.php:80 +msgid "Delete Subject Confirmation" +msgstr "Confirmação para apagar assunto" + +#: admin.php:111 lib/Admin.php:306 +msgid "Delete Type" +msgstr "Apagar tipo" + +#: lib/Admin.php:377 +msgid "Delete Type Confirmation" +msgstr "Confirmacão para apagar tipo" + +#: admin.php:726 lib/Admin.php:630 +msgid "Delete Version" +msgstr "Apagar versão" + +#: lib/Admin.php:676 +msgid "Delete Version Confirmation" +msgstr "Confirmação para apagar versão" + +#: config/prefs.php.dist:48 +msgid "Descending" +msgstr "Decrescente" + +#: lib/Create.php:118 +msgid "Description" +msgstr "Descrição" + +#: config/prefs.php.dist:10 +msgid "Display Options" +msgstr "Opções de exibição" + +#: lib/Whups.php:554 +msgid "Download" +msgstr "Download" + +#: query.php:45 +msgid "Edit" +msgstr "Editar" + +#: lib/Admin.php:143 lib/Admin.php:331 +#, php-format +msgid "Edit %s" +msgstr "Editar %s" + +#: admin.php:830 lib/Admin.php:718 lib/Admin.php:741 +msgid "Edit Attribute" +msgstr "Editar atributo" + +#: lib/Admin.php:365 +msgid "Edit Attributes" +msgstr "Editar atributos" + +#: lib/Admin.php:355 +msgid "Edit Priorities" +msgstr "Editar prioridades" + +#: admin.php:467 lib/Admin.php:542 lib/Admin.php:565 +msgid "Edit Priority" +msgstr "Editar prioridade" + +#: runquery.php:23 +msgid "Edit Query" +msgstr "Editar consulta" + +#: admin.php:259 lib/Admin.php:118 +msgid "Edit Queue" +msgstr "Editar fila" + +#: admin.php:29 +msgid "Edit Queues" +msgstr "Editar filas" + +#: admin.php:357 lib/Admin.php:451 lib/Admin.php:474 +msgid "Edit State" +msgstr "Editar estado" + +#: lib/Admin.php:345 +msgid "Edit States" +msgstr "Editar estados" + +#: admin.php:629 lib/Admin.php:29 lib/Admin.php:51 +msgid "Edit Subject" +msgstr "Editar assunto" + +#: admin.php:31 +msgid "Edit Subjects" +msgstr "Editar assuntos" + +#: admin.php:105 lib/Admin.php:306 +msgid "Edit Type" +msgstr "Editar tipo" + +#: admin.php:30 +msgid "Edit Types" +msgstr "Editar tipos" + +#: admin.php:721 lib/Admin.php:630 lib/Admin.php:653 +msgid "Edit Version" +msgstr "Editar versão" + +#: lib/Admin.php:717 +msgid "Edit or Delete Attributes" +msgstr "Editar ou apagar atributos" + +#: lib/Admin.php:541 +msgid "Edit or Delete Priorities" +msgstr "Editar ou apagar prioridades" + +#: lib/Admin.php:117 +msgid "Edit or Delete Queues" +msgstr "Editar ou apagar filas" + +#: lib/Admin.php:450 +msgid "Edit or Delete States" +msgstr "Editar ou apagar Estados" + +#: lib/Admin.php:28 +msgid "Edit or Delete Subjects" +msgstr "Editar ou apagar assuntos" + +#: lib/Admin.php:305 +msgid "Edit or Delete Types" +msgstr "Editar ou apagar tipos" + +#: lib/Admin.php:629 +msgid "Edit or Delete Versions" +msgstr "Editar ou apagar versões" + +#: lib/Admin.php:184 +msgid "Edit the permissions on this queue" +msgstr "Editar as permissões desta fila" + +#: lib/Admin.php:179 +msgid "Edit the users responsible for this queue" +msgstr "Editar os usuários responsáveis por esta fila" + +#: lib/Admin.php:159 +msgid "Edit the versions for this queue" +msgstr "Editar as versões para esta fila" + +#: query.php:146 +#, php-format +msgid "Error: Unknown query form %s, defaulting to properties" +msgstr "" +"Erro: Formulário de consulta %s desconhecido, padranizando para propriedades" + +#: lib/Query.php:51 +msgid "Exact Match" +msgstr "Coincidência exata" + +#: runquery.php:73 runquery.php:87 query.php:29 +msgid "Execute Query" +msgstr "Executar consulta" + +#: templates/prevnext.inc:12 +msgid "First" +msgstr "Primeiro" + +#: lib/Admin.php:802 +msgid "For tickets from these queues" +msgstr "Para tickets desta fila" + +#: lib/Admin.php:806 +msgid "For tickets which are" +msgstr "Para tickets que são" + +#: templates/menu.inc:6 lib/Block/summary.php:29 +msgid "Go" +msgstr "Ir" + +#: query.php:37 +msgid "Group Criteria" +msgstr "Critério do grupo" + +#: ticket/people.php:58 lib/Create.php:162 +msgid "Group Owners" +msgstr "Proprietários do grupo" + +#: templates/queryrenderer.inc:105 lib/Query.php:494 lib/Query.php:496 +msgid "Groups" +msgstr "Grupos" + +#: lib/api.php:619 +msgid "Hidden Comments" +msgstr "Ocultar comentários" + +#: ticket/index.php:43 lib/Whups.php:190 +msgid "History" +msgstr "História" + +#: query.php:46 +msgid "Hoist" +msgstr "" + +#: templates/queryrenderer.inc:103 lib/Whups.php:397 lib/Query.php:572 +#: config/prefs.php.dist:28 +msgid "Id" +msgstr "Id" + +#: search.php:52 +msgid "" +"If you don't select any categories, no filtering will be done on ticket " +"category." +msgstr "" + +#: search.php:55 +msgid "" +"If you don't select any types, no filtering will be done on ticket type." +msgstr "" + +#: lib/Admin.php:809 +msgid "" +"If you select any tickets that do not have an owner, who should we send " +"email to?" +msgstr "" + +#: query.php:47 +msgid "Insert And" +msgstr "Inserir And" + +#: lib/Query.php:380 +msgid "Insert Branch" +msgstr "Inserir Branch" + +#: query.php:49 +msgid "Insert Not" +msgstr "Inserir Not" + +#: query.php:48 +msgid "Insert Or" +msgstr "Inserir Or" + +#: lib/Whups.php:161 +msgid "Invalid Ticket Id" +msgstr "Identificação do ticket inválida" + +#: lib/Admin.php:157 +msgid "Keep a set of versions for this queue?" +msgstr "Manter um configuração de versão para esta fila?" + +#: templates/prevnext.inc:17 +msgid "Last" +msgstr "Última" + +#: runquery.php:25 query.php:30 lib/Query.php:731 +msgid "Load Query" +msgstr "Ler consulta" + +#: config/prefs.php.dist:89 +msgid "MM/DD/YY" +msgstr "MM/DD/AA" + +#: config/prefs.php.dist:90 +msgid "MM/DD/YY HH:MM:SS" +msgstr "MM/DD/AA HH:MM:SS" + +#: lib/Admin.php:412 +#, php-format +msgid "Make a clone of %s" +msgstr "Fazer um clone de %s" + +#: lib/Query.php:655 +msgid "Match" +msgstr "Coincidir" + +#: lib/Query.php:436 lib/Query.php:529 lib/Query.php:656 +msgid "Match Operator" +msgstr "Operador de coincidência" + +#: lib/Query.php:55 +msgid "Match Pattern" +msgstr "Modelo de coincidência" + +#: lib/Query.php:54 +msgid "Match Word" +msgstr "Palavra de coincidência" + +#: lib/Reports.php:14 +msgid "Maximum time a ticket is unresolved" +msgstr "Tempo máximo para um ticket ficar sem solução" + +#: lib/Reports.php:15 +msgid "Minimum time a ticket is unresolved" +msgstr "Tempo mínimo para um ticket ficar sem solução" + +#: config/prefs.php.dist:129 +msgid "Most recent first" +msgstr "Mais novos primeiro" + +#: ticket/queue.php:171 +#, php-format +msgid "Moved ticket %d to '%s'" +msgstr "Ticket %d movido para '%s'" + +#: mybugs.php:43 +msgid "My Assigned Tickets" +msgstr "Meus tickets assinados" + +#: mybugs.php:59 +msgid "My Open Requests" +msgstr "Meus pedidos abertos" + +#: mybugs.php:81 search.php:189 lib/Block/myqueries.php:3 +#: lib/Block/myqueries.php:26 +msgid "My Queries" +msgstr "Minhas consultas" + +#: mybugs.php:78 search.php:186 lib/Block/mysearches.php:3 +#: lib/Block/mysearches.php:24 +msgid "My QuickSearches" +msgstr "Minhas pesquisas rápidas" + +#: config/prefs.php.dist:58 +msgid "My Tickets" +msgstr "Meus tickets" + +#: lib/Ticket.php:463 +#, php-format +msgid "NEW: %s" +msgstr "NOVO: %s" + +#: lib/Query.php:707 lib/Query.php:742 +msgid "Name" +msgstr "Nome" + +#: lib/Admin.php:417 +msgid "Name of the cloned copy" +msgstr "Nome da cópia clonada" + +#: lib/Driver.php:97 +msgid "New" +msgstr "Novo" + +#: query.php:28 lib/Block/myqueries.php:27 lib/Block/myqueries.php:28 +msgid "New Query" +msgstr "Nova consulta" + +#: ticket/queue.php:37 +msgid "New Queue" +msgstr "Nova fila" + +#: ticket/people.php:67 +msgid "New State" +msgstr "Novo estado" + +#: ticket/create.php:27 lib/Block/summary.php:28 +msgid "New Ticket" +msgstr "Novo ticket" + +#: ticket/type.php:34 +msgid "New Type" +msgstr "Novo tipo" + +#: templates/prevnext.inc:16 +msgid "Next" +msgstr "Próximo" + +#: ticket/delete.php:37 lib/Admin.php:90 lib/Admin.php:210 lib/Admin.php:398 +#: lib/Admin.php:514 lib/Admin.php:602 lib/Admin.php:690 lib/Admin.php:778 +msgid "No" +msgstr "Não" + +#: clearsearch.php:34 +msgid "No searches cleared." +msgstr "Nenhuma pesquisa limpa." + +#: reports.php:17 +msgid "No stats available." +msgstr "Nenhuma estatistica disponível" + +#: lib/Driver.php:254 +#, php-format +msgid "No such backend '%s' found" +msgstr "Nenhum backend '%s' encontrado" + +#: lib/Whups.php:436 +msgid "No tickets matched your search criteria." +msgstr "Nenhum ticket coincide com seu critério de pesquisa" + +#: lib/Block/summary.php:75 +msgid "No tickets to display" +msgstr "Nenhum ticket para mostrar" + +#: lib/Reports.php:79 +msgid "None" +msgstr "Nenhum" + +#: templates/queryrenderer.inc:97 lib/Query.php:385 +msgid "Not" +msgstr "Não" + +#: query.php:79 +msgid "Not yet implemented..." +msgstr "Não implementado ainda..." + +#: config/prefs.php.dist:17 +msgid "Notification Options" +msgstr "Opções de notificação" + +#: config/prefs.php.dist:109 +msgid "Only notify me of ticket changes from other users" +msgstr "Apenas notifique-me das mudanças dos tickets de outros usuários" + +#: lib/Reports.php:8 +msgid "Open Tickets by Owner" +msgstr "Tickets abertos por Proprietário" + +#: lib/Reports.php:6 +msgid "Open Tickets by Priority" +msgstr "Tickets abertos por Prioridade" + +#: lib/Reports.php:3 +msgid "Open Tickets by Queue" +msgstr "Tickets abertos por Fila" + +#: lib/Reports.php:7 +msgid "Open Tickets by Requester" +msgstr "Tickets abertos por Requisitante" + +#: lib/Reports.php:4 +msgid "Open Tickets by State" +msgstr "Tickets abertos por Estado" + +#: lib/Reports.php:5 +msgid "Open Tickets by Type" +msgstr "Tickets abertos por Tipo" + +#: templates/queryrenderer.inc:96 lib/Query.php:384 +msgid "Or" +msgstr "Ou" + +#: config/prefs.php.dist:9 config/prefs.php.dist:16 +msgid "Other Options" +msgstr "Outras opções" + +#: templates/queryrenderer.inc:104 ticket/people.php:52 ticket/people.php:64 +#: lib/Create.php:156 lib/Create.php:168 lib/Whups.php:403 lib/Ticket.php:401 +#: lib/Ticket.php:440 lib/Ticket.php:441 lib/Ticket.php:443 lib/Ticket.php:501 +msgid "Owners" +msgstr "Proprietários" + +#: lib/Query.php:387 +msgid "Path" +msgstr "Caminho" + +#: lib/Whups.php:197 +msgid "People" +msgstr "Pessoas" + +#: ticket/update.php:17 ticket/people.php:17 ticket/type.php:17 +#: ticket/delete.php:17 ticket/queue.php:17 +msgid "Permission Denied" +msgstr "Permissão negada" + +#: ticket/update.php:78 ticket/delete.php:44 +msgid "Permission Denied." +msgstr "Permissão negada." + +#: templates/prevnext.inc:13 +msgid "Prev" +msgstr "Anterior" + +#: lib/Admin.php:353 lib/Admin.php:395 +msgid "Priorities for this Type" +msgstr "Prioridades para este tipo" + +#: templates/queryrenderer.inc:128 ticket/update.php:48 ticket/type.php:68 +#: ticket/queue.php:111 lib/Create.php:116 lib/Whups.php:401 +#: lib/Ticket.php:393 lib/Ticket.php:423 lib/Ticket.php:499 lib/Query.php:592 +#: config/prefs.php.dist:32 +msgid "Priority" +msgstr "Prioridade" + +#: templates/comment.inc:68 +#, php-format +msgid "Priority ⇒ %s" +msgstr "Prioridade ⇒ %s" + +#: lib/Admin.php:530 lib/Admin.php:576 lib/Admin.php:599 +msgid "Priority Description" +msgstr "Descrição da prioridade" + +#: lib/Admin.php:529 lib/Admin.php:554 lib/Admin.php:573 lib/Admin.php:596 +msgid "Priority Name" +msgstr "Nome da prioridade" + +#: query.php:35 +msgid "Property Criteria" +msgstr "Critério da propriedade" + +#: query.php:127 +msgid "Query Builder" +msgstr "Construtor de consultas" + +#: lib/Query.php:118 +msgid "Query Parameters" +msgstr "Parâmetros da consulta" + +#: runquery.php:81 +msgid "Query Results" +msgstr "Resultados da consulta" + +#: search.php:48 templates/queryrenderer.inc:112 lib/Whups.php:402 +#: lib/Ticket.php:390 lib/Ticket.php:420 lib/Ticket.php:490 lib/Query.php:577 +#: config/prefs.php.dist:33 +msgid "Queue" +msgstr "Fila" + +#: templates/comment.inc:76 +#, php-format +msgid "Queue ⇒ %s" +msgstr "Fila ⇒ %s" + +#: lib/Admin.php:106 lib/Admin.php:150 lib/Admin.php:207 +msgid "Queue Description" +msgstr "Descrição da fila" + +#: lib/Admin.php:105 lib/Admin.php:129 lib/Admin.php:147 lib/Admin.php:204 +#: lib/Create.php:27 lib/Create.php:35 +msgid "Queue Name" +msgstr "Nome da fila" + +#: ticket/queue.php:84 lib/Create.php:74 lib/Ticket.php:493 +msgid "Queue Version" +msgstr "Versão da fila" + +#: scripts/mail-filter.php:80 +#, php-format +msgid "Queue `%s' does not exist." +msgstr "Fila `%s' não existe." + +#: admin.php:32 templates/admin/mtmatrix.inc:6 +msgid "Queue/Type Matrix" +msgstr "Matriz de fila/tipo" + +#: search.php:137 +#, php-format +msgid "Queue: %s, Ticket: %s, Category: %s, Type: %s" +msgstr "Fila: %s, ticket: %s, categoria: %s, tipo: %s" + +#: lib/api.php:122 lib/api.php:622 +msgid "Queues" +msgstr "Filas" + +#: lib/Ticket.php:465 +#, php-format +msgid "RESOLVED: %s" +msgstr "Resolvido: %s" + +#: runquery.php:24 +msgid "Re-execute Query" +msgstr "Reexecutar consulta" + +#: lib/Admin.php:779 +msgid "Really delete this attribute? This may cause data problems!" +msgstr "Apagar com certeza este atributo? Isto pode causar problemas de dados!" + +#: lib/Admin.php:603 +msgid "Really delete this priority? This may cause data problems!" +msgstr "" +"Apagar com certeza esta prioridade? Isto pode causar problemas de dados!" + +#: lib/Admin.php:211 +msgid "Really delete this queue? This may cause data problems!" +msgstr "Apagar com certeza esta fila? Isto pode causar problemas de dados!" + +#: lib/Admin.php:515 +msgid "Really delete this state? This may cause data problems!" +msgstr "Apagar com certeza este estado? Isto pode causar problemas de dados!" + +#: lib/Admin.php:91 +msgid "Really delete this subject? This may cause data problems!" +msgstr "Apagar com certeza este assunto? Isto pode causar problemas de dados!" + +#: ticket/delete.php:38 +msgid "" +"Really delete this ticket? It will NOT be archived, and will be gone forever." +msgstr "Apagar com certeza este ticket? Isto pode causar problemas de dados!" + +#: lib/Admin.php:399 +msgid "Really delete this type? This may cause data problems!" +msgstr "Apagar com certeza este tipo? Isto pode causar problemas de dados!" + +#: lib/Admin.php:691 +msgid "Really delete this version? This may cause data problems!" +msgstr "Apagar com certeza esta versão? Isto pode causa problemas de dados!" + +#: search.php:167 +msgid "Refine Search" +msgstr "Refinar pesquisa" + +#: admin.php:910 +msgid "Reminders were sent." +msgstr "" + +#: lib/Admin.php:260 +msgid "Remove User" +msgstr "Remover usuário" + +#: reports.php:22 +msgid "Reports" +msgstr "Relatórios" + +#: templates/queryrenderer.inc:106 lib/Ticket.php:504 +msgid "Requester" +msgstr "Requisitante" + +#: lib/Whups.php:406 lib/Ticket.php:507 lib/Driver.php:99 +#: config/prefs.php.dist:37 +msgid "Resolved" +msgstr "Resolvido" + +#: lib/Admin.php:262 +msgid "Responsible Users" +msgstr "Usuários responsáveis" + +#: ticket/update.php:71 +msgid "Restrict Comment to:" +msgstr "Restingir comentário para:" + +#: lib/Admin.php:163 +msgid "Restrict ticket subjects to a specified list?" +msgstr "Restringir assuntos de tickets de uma lista específica?" + +#: templates/searchresults.inc:51 +msgid "Save" +msgstr "Salvar" + +#: runquery.php:26 query.php:31 lib/Query.php:705 +msgid "Save Query" +msgstr "Salvar consulta" + +#: templates/searchresults.inc:45 +msgid "Save these results as: " +msgstr "Salvar este resultado como: " + +#: lib/Query.php:659 +#, php-format +msgid "Search %s Attribute" +msgstr "Pesquisar %s atributo" + +#: lib/Query.php:662 +msgid "Search Attribute" +msgstr "Pesquisar atributo" + +#: lib/Query.php:439 lib/Query.php:531 +msgid "Search Comments" +msgstr "Pesquisar comentários" + +#: lib/Query.php:437 +msgid "Search Owners" +msgstr "Pesquisar proprietários" + +#: lib/Query.php:438 +msgid "Search Requester" +msgstr "Pesquisa por requisitante" + +#: search.php:162 +msgid "Search Results" +msgstr "Resultados da pesquisa" + +#: templates/prevnext.inc:26 +#, php-format +msgid "Search Results: %s of %s" +msgstr "Resultados da pesquisa: %s de %s" + +#: lib/Query.php:530 +msgid "Search Summary" +msgstr "Sumário da pesquisa" + +#: search.php:64 search.php:179 config/prefs.php.dist:59 +msgid "Search Tickets" +msgstr "Pesquisar tickets" + +#: clearsearch.php:27 +msgid "Search cleared." +msgstr "Pesquisa limpa" + +#: clearsearch.php:30 +msgid "Searches cleared." +msgstr "Pesquisas limpas" + +#: config/prefs.php.dist:61 +msgid "Select the view to display after login:" +msgstr "Selecione o que ver depois do login:" + +#: admin.php:33 lib/Admin.php:790 +msgid "Send Reminders" +msgstr "Enviar lembretes" + +#: lib/Admin.php:801 +msgid "Send only for this list of ticket ids" +msgstr "Enviar apenas para esta lista de tickets ids" + +#: lib/Whups.php:198 +msgid "Set Queue" +msgstr "Configurar fila" + +#: ticket/queue.php:192 ticket/queue.php:201 ticket/queue.php:213 +msgid "Set Queue - Step 1" +msgstr "Configurar fila - passo 1" + +#: ticket/queue.php:193 ticket/queue.php:202 +msgid "Set Queue - Step 2" +msgstr "Configurar fila - passo 2" + +#: ticket/queue.php:203 +msgid "Set Queue - Step 3" +msgstr "Configurar fila - passo 3" + +#: ticket/queue.php:179 +#, php-format +msgid "Set Queue for %s" +msgstr "Configurar fila para %s" + +#: lib/Whups.php:201 +msgid "Set Type" +msgstr "Configurar tipo" + +#: ticket/type.php:140 ticket/type.php:149 +msgid "Set Type - Step 1" +msgstr "Configurar tipo - passo 1" + +#: ticket/type.php:141 +msgid "Set Type - Step 2" +msgstr "Configurar tipo - passo 2" + +#: ticket/type.php:127 +#, php-format +msgid "Set Type for %s" +msgstr "Configurar tipo para %s" + +#: config/prefs.php.dist:100 +msgid "Show \"(X Days Ago)\" in Date field of search results?" +msgstr "Mostrar \"(X dias atrás)\" no campo Data no resultado da pesquisa?" + +#: config/prefs.php.dist:127 +msgid "Show comments in chronological order, or most recent first?" +msgstr "Mostrar comentários na ordem cronológica, ou a mais recente primeiro?" + +#: config/prefs.php.dist:78 +msgid "Show ticket IDs in the summary view?" +msgstr "Mostrar IDs dos tickets no sumário " + +#: config/prefs.php.dist:70 +msgid "Show tickets you have requested in the summary view?" +msgstr "Mostrar tickets que você requisitou no sumário?" + +#: config/templates.php.dist:16 +msgid "Simple HTML Report" +msgstr "Relatório HTML simples" + +#: templates/searchresults.inc:75 +msgid "Sort Direction" +msgstr "Direção de classificação" + +#: templates/searchresults.inc:76 templates/searchresults.inc:80 +#, php-format +msgid "Sort by %s" +msgstr "Classificado por %s" + +#: templates/queryrenderer.inc:123 ticket/update.php:45 ticket/type.php:67 +#: ticket/queue.php:110 lib/Whups.php:399 lib/Ticket.php:392 +#: lib/Ticket.php:422 lib/Ticket.php:498 lib/Query.php:589 +#: config/prefs.php.dist:30 +msgid "State" +msgstr "Estado" + +#: templates/comment.inc:64 +#, php-format +msgid "State ⇒ %s" +msgstr "Estado ⇒ %s" + +#: lib/Admin.php:439 lib/Admin.php:488 +msgid "State Category" +msgstr "Categoria do estado" + +#: lib/Admin.php:438 lib/Admin.php:485 lib/Admin.php:511 +msgid "State Description" +msgstr "Descrição do estado" + +#: lib/Admin.php:437 lib/Admin.php:463 lib/Admin.php:482 lib/Admin.php:508 +msgid "State Name" +msgstr "Nome do estado" + +#: lib/Admin.php:343 lib/Admin.php:391 +msgid "States for this Type" +msgstr "Estados para este tipo" + +#: lib/Create.php:117 config/prefs.php.dist:29 +msgid "Subject" +msgstr "Assunto" + +#: lib/Admin.php:17 lib/Admin.php:40 lib/Admin.php:65 lib/Admin.php:87 +msgid "Subject Name" +msgstr "Nome do assunto" + +#: lib/Admin.php:167 +msgid "Subjects associated with this Queue" +msgstr "Assuntos associados com esta fila" + +#: ticket/create.php:102 +msgid "Submit" +msgstr "Enviar" + +#: admin.php:158 +#, php-format +msgid "Successfully Cloned %s to %s." +msgstr "%s clonado com sucesso para %s." + +#: ticket/type.php:118 +msgid "Successfully changed ticket type." +msgstr "Tipo do ticket alterado com sucesso." + +#: templates/queryrenderer.inc:109 ticket/update.php:42 ticket/delete.php:34 +#: lib/Whups.php:398 lib/Ticket.php:400 lib/Ticket.php:414 lib/Ticket.php:415 +#: lib/Ticket.php:417 lib/Ticket.php:489 +msgid "Summary" +msgstr "Sumário" + +#: templates/comment.inc:40 +#, php-format +msgid "Summary ⇒ %s" +msgstr "Sumário ⇒ %s" + +#: search.php:50 +msgid "Summary like" +msgstr "Sumário como" + +#: templates/comment.inc:54 +#, php-format +msgid "Taken from %s" +msgstr "Pego de %s" + +#: lib/Query.php:528 +msgid "Text" +msgstr "Texto" + +#: query.php:39 +msgid "Text Criteria" +msgstr "Critério do Texto" + +#: view.php:44 lib/Ticket.php:295 +msgid "The VFS backend needs to be configured to enable attachment uploads." +msgstr "O backend VFS precisa ser configurado para ativar envio de anexos." + +#: admin.php:799 +#, php-format +msgid "The attribute '%s' has been added to %s." +msgstr "O atributo '%s' foi adicionado para %s." + +#: admin.php:881 +msgid "The attribute has been deleted." +msgstr "O atributo foi apagado." + +#: admin.php:852 +msgid "The attribute has been modified." +msgstr "O artibuto foi modificado." + +#: admin.php:886 +msgid "The attribute was not deleted." +msgstr "O atributo não foi apagado." + +#: admin.php:436 +#, php-format +msgid "The priority '%s' has been added to %s." +msgstr "A prioridade '%s' foi adicionada para %s." + +#: admin.php:517 +msgid "The priority has been deleted." +msgstr "A prioridade foi apagada." + +#: admin.php:489 +msgid "The priority has been modified." +msgstr "A prioridade foi modificada." + +#: admin.php:522 +msgid "The priority was not deleted." +msgstr "A prioriadade não foi modificada." + +#: admin.php:237 +#, php-format +msgid "The queue '%s' has been created." +msgstr "A fila '%s' foi criada." + +#: admin.php:305 +msgid "The queue has been deleted." +msgstr "A fila foi apagada." + +#: admin.php:287 +msgid "The queue has been modified." +msgstr "A fila foi modificada." + +#: admin.php:310 +msgid "The queue was not deleted." +msgstr "A fila não foi apagada." + +#: data.php:24 +msgid "The requested template does not exist." +msgstr "O modelo pedido não existe." + +#: admin.php:325 +#, php-format +msgid "The state '%s' has been added to %s." +msgstr "O estado '%s' foi adicionado para %s." + +#: admin.php:408 +msgid "The state has been deleted." +msgstr "O estado foi apagado." + +#: admin.php:379 +msgid "The state has been modified." +msgstr "O estado foi modificado." + +#: admin.php:413 +msgid "The state was not deleted." +msgstr "O estado não foi apagado." + +#: admin.php:613 +#, php-format +msgid "The subject '%s' has been added." +msgstr "O assunto '%s' foi adicionado." + +#: admin.php:669 +msgid "The subject has been deleted." +msgstr "O assunto foi apagado." + +#: admin.php:650 +msgid "The subject has been modified." +msgstr "O assunto foi modificado." + +#: admin.php:674 +msgid "The subject was not deleted." +msgstr "O assunto não foi apagado." + +#: ticket/delete.php:75 +msgid "The ticket was not deleted." +msgstr "O ticket foi apagado." + +#: admin.php:176 +#, php-format +msgid "The type '%s' has been modified." +msgstr "O tipo '%s' foi modificado." + +#: admin.php:218 +msgid "The type has been deleted." +msgstr "O tipo foi apagado." + +#: admin.php:223 +msgid "The type was not deleted." +msgstr "O tipo não foi apagado." + +#: admin.php:689 +#, php-format +msgid "The version '%s' has been added to %s." +msgstr "A versão '%s' foi adicionada para %s." + +#: admin.php:771 +msgid "The version has been deleted." +msgstr "A versão foi apagada." + +#: admin.php:743 +msgid "The version has been modified." +msgstr "A versão foi modificada." + +#: admin.php:776 +msgid "The version was not deleted." +msgstr "A versão não foi apagada." + +#: lib/Admin.php:726 +msgid "There are no attribute types to edit" +msgstr "Não há tipos de atributos para editar" + +#: lib/Query.php:662 +msgid "There are no attributes defined for the current type" +msgstr "Não há atributos definidos para o tipo atual" + +#: lib/Admin.php:550 +msgid "There are no priorities to edit" +msgstr "Não há prioridades para editar" + +#: lib/Admin.php:798 +msgid "There are no queues available." +msgstr "Não há filas disponíveis" + +#: lib/Admin.php:126 +msgid "There are no queues to edit" +msgstr "Não há filas para editar" + +#: lib/Create.php:35 +msgid "There are no queues which you can create tickets in." +msgstr "Não há filas em que se possa criar tickets" + +#: search.php:42 +msgid "There are no queues which you can search." +msgstr "Não há filas em que se possa pesquisar" + +#: lib/Admin.php:459 +msgid "There are no states to edit" +msgstr "Não há estados para editar" + +#: lib/Admin.php:37 +msgid "There are no subjects to edit" +msgstr "Não há assuntos para editar" + +#: lib/Create.php:58 +msgid "" +"There are no ticket types associated with this queue; until there are, you " +"cannot create any tickets in this queue." +msgstr "" + +#: lib/Admin.php:314 +msgid "There are no types to edit" +msgstr "Não há tipos para editar" + +#: lib/Admin.php:276 +msgid "There are no users responsible for this queue." +msgstr "Não há usuários responsáveis por esta fila." + +#: ticket/people.php:63 lib/Create.php:167 +msgid "There are no users to which this ticket can be assigned." +msgstr "Não há usuários que possam assinar este ticket." + +#: lib/Admin.php:638 +msgid "There are no versions to edit" +msgstr "Não há versões para editar" + +#: graph.php:30 +msgid "There is no data for this graph." +msgstr "Não há dados para este gráfico." + +#: lib/Reports.php:154 +msgid "There is no data for this report." +msgstr "Não há dados para este relatório." + +#: admin.php:556 +#, php-format +msgid "There was an error adding '%s' to the responsible list for '%s': %s" +msgstr "Houve um erro ao adicionar '%s' para a lista responsável por '%s': %s" + +#: admin.php:615 +#, php-format +msgid "There was an error adding the subject: %s." +msgstr "Houve um erro ao adicionar o assunto: %s." + +#: admin.php:802 +#, php-format +msgid "There was an error creating the attribute: %s." +msgstr "Houve um erro ao criar o atributo: %s." + +#: admin.php:438 +#, php-format +msgid "There was an error creating the priority: %s." +msgstr "Houve um erro ao criar a prioridade: %s." + +#: admin.php:245 +#, php-format +msgid "There was an error creating the queue: %s." +msgstr "Houve um erro ao criar a fila: %s." + +#: admin.php:327 +#, php-format +msgid "There was an error creating the state: %s." +msgstr "Houve um erro ao criar o estado: %s." + +#: admin.php:691 +#, php-format +msgid "There was an error creating the version: %s." +msgstr "Houve um erro ao criar a versão: %s." + +#: admin.php:883 +#, php-format +msgid "There was an error deleting the attribute: %s." +msgstr "Houve um erro ao apagar o atributo: %s." + +#: admin.php:519 +#, php-format +msgid "There was an error deleting the priority: %s." +msgstr "Houve um erro ao apagar o a prioridade: %s." + +#: admin.php:307 +#, php-format +msgid "There was an error deleting the queue: %s." +msgstr "Houve um erro ao apagar a fila: %s." + +#: admin.php:410 +#, php-format +msgid "There was an error deleting the state: %s." +msgstr "Houve um erro ao apagar o estado: %s." + +#: admin.php:671 +#, php-format +msgid "There was an error deleting the subject: %s." +msgstr "Houve um erro ao apagar o assunto: %s." + +#: ticket/delete.php:72 +#, php-format +msgid "There was an error deleting the ticket: %s" +msgstr "Houve um erro ao apagar o ticket: %s" + +#: admin.php:220 +#, php-format +msgid "There was an error deleting the type: %s." +msgstr "Houve um erro ao apagar o tipo: %s." + +#: admin.php:773 +#, php-format +msgid "There was an error deleting the version: %s." +msgstr "Houve um erro ao apagar a versão: %s." + +#: admin.php:859 +#, php-format +msgid "There was an error editing the attribute: %s." +msgstr "Houve um erro ao editar o atributo: %s." + +#: admin.php:494 +#, php-format +msgid "There was an error editing the priority: %s." +msgstr "Houve um erro ao editar a prioridade: %s." + +#: admin.php:291 +#, php-format +msgid "There was an error editing the queue: %s." +msgstr "Houve um erro ao editar a fila: %s." + +#: admin.php:384 +#, php-format +msgid "There was an error editing the state: %s." +msgstr "Houve um erro ao editar o estado: %s." + +#: admin.php:655 +#, php-format +msgid "There was an error editing the subject: %s." +msgstr "Houve um erro ao editar o assunto: %s." + +#: admin.php:748 +#, php-format +msgid "There was an error editing the version: %s." +msgstr "Houve um erro ao editar a versão: %s." + +#: lib/Admin.php:236 +#, php-format +msgid "There was an error listing users: %s; %s" +msgstr "Houve um erro ao listar os usuários: %s; %s" + +#: mybugs.php:38 +#, php-format +msgid "There was an error listing your assigned tickets: %s" +msgstr "Houve um erro ao listar seus tickets assinados: %s" + +#: mybugs.php:54 +#, php-format +msgid "There was an error listing your open requests: %s" +msgstr "Houve um erro ao listar seus pedidos abertos: %s" + +#: admin.php:174 +#, php-format +msgid "There was an error modifying the type: %s." +msgstr "Houve um erro ao modificar o tipo: %s." + +#: search.php:156 +#, php-format +msgid "There was an error performing your search: %s" +msgstr "Houve um erro ao fazer sua pesquisa: %s" + +#: admin.php:593 +#, php-format +msgid "There was an error removing '%s' from the responsible list for '%s': %s" +msgstr "Houve um erro ao remover '%s' da lista de responsabilidade de '%s': %s" + +#: data.php:27 +msgid "This is not a search results template." +msgstr "Este não é um modelo de resultado de pesquisa." + +#: lib/Admin.php:57 +msgid "This is not a valid subject." +msgstr "Este não é um assunto válido." + +#: ticket/queue.php:79 lib/Create.php:69 +msgid "" +"This queue requires that you specify a version, but there are no versions " +"associated with it. Until versions are created for this queue, you will not " +"be able to create tickets." +msgstr "" + +#: lib/Ticket.php:411 +msgid "Ticket" +msgstr "Ticket" + +#: ticket/delete.php:68 +#, php-format +msgid "Ticket %d has been deleted." +msgstr "Ticket %d foi apagado" + +#: lib/Driver/sql.php:783 +#, php-format +msgid "Ticket %s was not found." +msgstr "Ticket %s não foi encontrado" + +#: search.php:49 +msgid "Ticket ID" +msgstr "Identificação do ticket" + +#: lib/Create.php:115 +msgid "Ticket State" +msgstr "Status do ticket" + +#: templates/reports/stats.inc:4 +msgid "Ticket Stats" +msgstr "Estatísticas do ticket" + +#: lib/Block/summary.php:3 +msgid "Ticket Summary" +msgstr "Sumário do ticket" + +#: lib/Create.php:63 +msgid "Ticket Type" +msgstr "Tipo do ticket" + +#: lib/Admin.php:153 +msgid "Ticket Types associated with this Queue" +msgstr "Tipos de tickets associados com esta fila" + +#: lib/Ticket.php:407 +#, php-format +msgid "Ticket URL: %s\n" +msgstr "URL do ticket: %s\n" + +#: ticket/update.php:127 +msgid "Ticket Updated" +msgstr "Ticket atualizado" + +#: lib/Block/summary.php:52 +msgid "Tickets assigned to you" +msgstr "Tickets assinados por você" + +#: search.php:52 +msgid "Tickets which are" +msgstr "Tickets que são" + +#: lib/Block/summary.php:69 +msgid "Tickets you requested" +msgstr "Tickets que você requisitou" + +#: templates/queryrenderer.inc:117 ticket/queue.php:87 lib/Whups.php:400 +#: lib/Ticket.php:394 lib/Ticket.php:424 lib/Ticket.php:497 lib/Query.php:583 +#: config/prefs.php.dist:31 +msgid "Type" +msgstr "Tipo" + +#: templates/comment.inc:72 +#, php-format +msgid "Type ⇒ %s" +msgstr "Tipo ⇒ %s" + +#: lib/Admin.php:294 lib/Admin.php:338 lib/Admin.php:387 +msgid "Type Description" +msgstr "Descrição do tipo" + +#: lib/Admin.php:293 lib/Admin.php:317 lib/Admin.php:335 lib/Admin.php:384 +msgid "Type Name" +msgstr "Nome do tipo" + +#: search.php:55 +msgid "Types" +msgstr "Tipos" + +#: lib/Ticket.php:502 +msgid "Unassigned" +msgstr "Não assinado" + +#: lib/Admin.php:809 +msgid "Unassigned tickets" +msgstr "Tickets não assinados" + +#: lib/Driver.php:96 +msgid "Unconfirmed" +msgstr "Não confirmado" + +#: templates/queryrenderer.inc:153 +#, php-format +msgid "Unknown node type %s" +msgstr "tipo de nó desconhecido %s" + +#: lib/Whups.php:192 +msgid "Update" +msgstr "Atualizar" + +#: ticket/update.php:149 +#, php-format +msgid "Update %s" +msgstr "Atualizar %s" + +#: templates/admin/mtmatrix.inc:28 +msgid "Update Associations" +msgstr "Atualizar associações" + +#: ticket/people.php:122 +#, php-format +msgid "Update People for %s" +msgstr "Atualizar pessoas para %s" + +#: lib/Ticket.php:399 lib/Ticket.php:412 +msgid "Updated By" +msgstr "Atualizado por" + +#: lib/Query.php:584 +msgid "" +"Use the Change Ticket Type form to switch the current Ticket Type. If you " +"select \"Any\" here, the criteria you add will search every kind of ticket. " +"If you choose the current ticket type, you will be limiting this branch of " +"your search to that type." +msgstr "" + +#: lib/Admin.php:235 lib/Admin.php:245 lib/Admin.php:248 +msgid "User" +msgstr "Usuário" + +#: query.php:36 +msgid "User Criteria" +msgstr "Critério do usuário" + +#: lib/Query.php:435 +msgid "User ID" +msgstr "Identificação do usuário" + +#: lib/Admin.php:177 +msgid "Users responsible for this Queue" +msgstr "Usuários responsáveis por esta fila" + +#: lib/Admin.php:280 +msgid "Users responsible for this queue" +msgstr "Usuários responsáveis por esta fila" + +#: lib/Ticket.php:391 lib/Ticket.php:421 config/prefs.php.dist:34 +msgid "Version" +msgstr "Versão" + +#: lib/Admin.php:618 lib/Admin.php:664 lib/Admin.php:687 +msgid "Version Description" +msgstr "Descrição da versão" + +#: lib/Admin.php:617 lib/Admin.php:642 lib/Admin.php:661 lib/Admin.php:684 +msgid "Version Name" +msgstr "Nome da versão" + +#: templates/reports/graphs.inc:14 +msgid "View Graphs" +msgstr "Ver gráficos" + +#: ticket/people.php:77 ticket/type.php:45 ticket/comment.php:40 +#: ticket/queue.php:50 +msgid "Viewable only by members of" +msgstr "Visível apenas por membros de" + +#: config/prefs.php.dist:87 +msgid "Weekday Day Month" +msgstr "Dia da semana Dia Mês" + +#: config/prefs.php.dist:88 +msgid "Weekday Day Month HH:MM:SS TZ" +msgstr "Dia da semana Dia Mês HH:MM:SS TZ" + +#: ticket/delete.php:37 lib/Admin.php:90 lib/Admin.php:210 lib/Admin.php:398 +#: lib/Admin.php:514 lib/Admin.php:602 lib/Admin.php:690 lib/Admin.php:778 +msgid "Yes" +msgstr "Sim" + +#: view.php:40 +msgid "You are not allowed to view this ticket." +msgstr "Você não tem permissão para ver este ticket." + +#: lib/Driver/sql.php:786 +#, php-format +msgid "You do not have permission to access this ticket (%s)." +msgstr "Você não tem permissão para acessar este ticket (%s)." + +#: lib/Query.php:739 +msgid "You have no saved queries." +msgstr "Você não salvou as consultas" + +#: lib/Whups.php:430 +msgid "You must select at least one queue to send reminders for." +msgstr "Você deve selecionar ao menos uma fila para enviar lembretes" + +#: ticket/comment.php:25 lib/Create.php:29 +msgid "Your Email Address" +msgstr "Seu e-mail" + +#: ticket/create.php:157 +#, php-format +msgid "" +"Your ticket ID is %s. An appropriate person has been notified of this " +"request." +msgstr "" + +#: templates/prevnext.inc:13 +msgid "[< Prev]" +msgstr "[< Anterior]" + +#: templates/prevnext.inc:12 +msgid "[<< First]" +msgstr "[<< Primeira]" + +#: templates/prevnext.inc:17 +msgid "[Last >>]" +msgstr "[Última >>]" + +#: templates/prevnext.inc:16 +msgid "[Next >]" +msgstr "[Próxima >]" + +#: lib/Whups.php:497 +msgid "_Admin" +msgstr "_Administração" + +#: lib/Whups.php:486 +#, php-format +msgid "_My %s" +msgstr "_Meus %s" + +#: lib/Whups.php:489 +msgid "_New Ticket" +msgstr "_Novo ticket" + +#: lib/Whups.php:491 +msgid "_Query Builder" +msgstr "_Construtor de consultas" + +#: lib/Whups.php:492 +msgid "_Reports" +msgstr "_Relatórios" + +#: lib/Whups.php:488 +msgid "_Search" +msgstr "_Pesquisa" + +#: scripts/mail-filter.php:108 +#, php-format +msgid "bad priority `%s' for type." +msgstr "Prioridade `%s' ruim para tipo." + +#: scripts/mail-filter.php:122 +#, php-format +msgid "Estado `%s' ruim para tipo." +msgstr "" + +#: templates/queryrenderer.inc:143 +msgid "contains (case insensitive) substring" +msgstr "contem sequência (sensível ao caso)" + +#: templates/queryrenderer.inc:144 +msgid "contains (case sensitive) substring" +msgstr "contem sequência (sensível ao caso)" + +#: templates/queryrenderer.inc:145 +msgid "contains the word" +msgstr "contem palavra" + +#: scripts/mail-filter.php:133 +#, php-format +msgid "error processing message: %s" +msgstr "erro ao processar mensagem: %s" + +#: templates/queryrenderer.inc:142 +msgid "is" +msgstr "é" + +#: templates/queryrenderer.inc:140 +msgid "is greater than" +msgstr "é maior que" + +#: templates/queryrenderer.inc:141 +msgid "is less than" +msgstr "é menor que" + +#: templates/queryrenderer.inc:146 +msgid "matches the pattern" +msgstr "coincide com o padrão" diff --git a/whups/po/ro_RO.po b/whups/po/ro_RO.po new file mode 100644 index 000000000..51211cb70 --- /dev/null +++ b/whups/po/ro_RO.po @@ -0,0 +1,1676 @@ +# Romanian translations for Whups package. +# Copyright 2003-2009 The Horde Project +# This file is distributed under the same license as the Whups package. +# Eugen Hoanca , 2003. +# +msgid "" +msgstr "" +"Project-Id-Version: Whups 0.0.1\n" +"POT-Creation-Date: 2003-03-04 13:46+0100\n" +"PO-Revision-Date: 2003-03-27 10:54+0200\n" +"Last-Translator: Eugen Hoanca \n" +"Language-Team: Romanian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: templates/reports/stats.inc:20 +msgid "%s days" +msgstr "%s zile" + +#: admin.php:544 +msgid "'%s' added to those responsible for '%s'" +msgstr "'%s' adaugat la responsabilii pentru '%s'" + +#: admin.php:583 +msgid "'%s' is no longer among those responsible for '%s'" +msgstr "'%s' nu mai este responsabil pentru '%s'" + +#: templates/comment.inc:53 +msgid ", initial priority of '%s'." +msgstr ", prioritate initiala a '%s'." + +#: templates/comment.inc:56 +msgid ", priority changed to '%s'." +msgstr ", prioritate schimbata in '%s'." + +#: templates/comment.inc:59 +msgid ", priority is '%s'." +msgstr ", prioritatea este '%s'." + +#: admin.php:110 +msgid "- Stage 1" +msgstr "- Faza 1" + +#: admin.php:115 +msgid "- Stage 2" +msgstr "- Faza 2" + +#: lib/Driver.php:89 +msgid "-Added By: %s\n" +msgstr "-Adaugat de: %s\n" + +#: lib/Driver.php:108 +msgid "-Assigned By: %s" +msgstr "-Atribuit de: %s" + +#: lib/Driver.php:107 +msgid "-Assigned To: %s" +msgstr "-Atribuit lui: %s" + +#: lib/Driver.php:199 +msgid "-Comment by %s on %s:" +msgstr "-Comentariu de %s la %s:" + +#: lib/Driver.php:74 +msgid "-Created By: %s\n" +msgstr "-Creat de: %s\n" + +#: lib/Driver.php:106 lib/Driver.php:126 lib/Driver.php:144 +msgid "-Queue: %s" +msgstr "-Modul: %s" + +#: lib/Driver.php:73 lib/Driver.php:88 +msgid "-Queue: %s\n" +msgstr "-Modul: %s\n" + +#: lib/Driver.php:145 +msgid "-New Priority: %s" +msgstr "-Prioritate noua: %s" + +#: lib/Driver.php:127 +msgid "-New State: %s" +msgstr "-Stare noua: %s" + +#: lib/Driver.php:109 +msgid "-State: %s" +msgstr "-Stare: %s" + +#: lib/Driver.php:75 lib/Driver.php:90 lib/Driver.php:110 lib/Driver.php:128 +#: lib/Driver.php:146 +msgid "-Summary:" +msgstr "Cuprins:" + +#: lib/Driver.php:105 lib/Driver.php:125 lib/Driver.php:143 +msgid "-Ticket %s" +msgstr "-Tichet %s" + +#: lib/Driver.php:72 lib/Driver.php:87 +msgid "-Ticket %s\n" +msgstr "-Tichet %s\n" + +#: lib/api.php:148 +msgid "No summary" +msgstr "Fara cuprins" + +#: lib/Admin.php:675 +msgid "Add Attribute" +msgstr "Adaugare atribut" + +#: lib/Query.php:542 +msgid "Add Attribute Criterion" +msgstr "Adaugare criteriu atribut" + +#: details.php:44 +msgid "Add Comment" +msgstr "Adaugare comentariu" + +#: details.php:101 +msgid "Add Comment Succeeded" +msgstr "Adaugare reusita de comentariu" + +#: query.php:191 +msgid "Add Criterion" +msgstr "Adaugare criteriu" + +#: lib/Admin.php:99 lib/Admin.php:100 +msgid "Add Queue" +msgstr "Adaugare modul" + +#: lib/Admin.php:501 +msgid "Add Priority" +msgstr "Adaugare prioritate" + +#: lib/Query.php:487 +msgid "Add Property Criterion" +msgstr "Adaugare criteriu de proprietate" + +#: lib/Admin.php:403 +msgid "Add State" +msgstr "Adaugare stare" + +#: lib/Admin.php:14 lib/Admin.php:15 +msgid "Add Subject" +msgstr "Adaugare subiect" + +#: lib/Query.php:443 +msgid "Add Text Criterion" +msgstr "Adaugare criteriu text" + +#: lib/Admin.php:279 lib/Admin.php:280 +msgid "Add Type" +msgstr "Adaugare tip" + +#: admin.php:110 admin.php:115 +msgid "Add Type %s" +msgstr "Adaugare tip %s" + +#: lib/Query.php:391 +msgid "Add User Criterion" +msgstr "Adaugare criteriu utilizator" + +#: lib/Admin.php:217 +msgid "Add Users" +msgstr "Adaugare utilizatori" + +#: lib/Admin.php:588 +msgid "Add Version" +msgstr "Adaugare versiune" + +#: create.php:151 +msgid "Adding your ticket failed: %s." +msgstr "Adaugarea tichetului esuata: %s." + +#: lib/Search.php:177 +msgid "Additional Comment" +msgstr "Comentariu aditional" + +#: lib/api.php:81 templates/menu/menu.inc:23 +msgid "Admin" +msgstr "Admin" + +#: lib/Whups.php:24 lib/Whups.php:25 admin.php:81 +msgid "Administration" +msgstr "Administrare" + +#: create.php:158 +msgid "An appropriate person has been notified of this request." +msgstr "Persoana potrivita a fost notificata de aceasta cerere." + +#: lib/Query.php:343 templates/queryrenderer.inc:90 +msgid "And" +msgstr "Si" + +#: lib/Query.php:490 lib/Query.php:491 lib/Search.php:26 lib/Search.php:54 +#: lib/Search.php:55 search.php:50 search.php:51 search.php:53 search.php:67 +msgid "Any" +msgstr "Orice" + +#: lib/Search.php:124 lib/Search.php:170 lib/Search.php:245 lib/Search.php:287 +#: lib/Search.php:351 +msgid "Any Group" +msgstr "Orice grup" + +#: config/prefs.php.dist:58 +msgid "Ascending" +msgstr "Crescator" + +#: details.php:46 +msgid "Assign Ticket" +msgstr "Atribuire tichet" + +#: details.php:144 +msgid "Assign Ticket Succeeded" +msgstr "Atribuire tichet reusita" + +#: lib/Whups.php:313 lib/Search.php:96 lib/Driver.php:64 +#: config/prefs.php.dist:47 +msgid "Assigned" +msgstr "Atribuit" + +#: lib/Driver/sql.php:235 +msgid "Assigned ticket to %s" +msgstr "Tichet atribuit lui %s" + +#: lib/Create.php:128 lib/Search.php:175 +msgid "Assignee" +msgstr "Atribuire" + +#: query.php:47 +msgid "Attribute Criteria" +msgstr "Criteriu atribut" + +#: lib/Admin.php:679 lib/Admin.php:723 lib/Admin.php:748 +msgid "Attribute Description" +msgstr "Descriere atribut" + +#: lib/Admin.php:678 lib/Admin.php:701 lib/Admin.php:720 lib/Admin.php:745 +msgid "Attribute Name" +msgstr "Nume atribut" + +#: lib/Admin.php:348 +msgid "Attributes for this Type" +msgstr "Atribute pentru acest Tip" + +#: config/prefs.php.dist:129 +msgid "Autolink to other tickets in comments" +msgstr "Link automat pentru alte tichete in comentarii" + +#: reports.php:22 +msgid "Average time a ticket is unresolved" +msgstr "Tim mediu in care un tichet nu er rezolvat" + +#: lib/Query.php:350 +msgid "Branch Type" +msgstr "Tip ramura" + +#: lib/Query.php:44 +msgid "Case Insensitive Substring" +msgstr "Subsir caz insenzitiv" + +#: lib/Query.php:45 +msgid "Case Sensitive Substring" +msgstr "Subsir caz senzitiv" + +#: templates/queryrenderer.inc:25 +msgid "Change" +msgstr "Schimba" + +#: lib/Query.php:361 +msgid "Change Ticket Type" +msgstr "Shimba tip tichet" + +#: config/prefs.php.dist:14 +msgid "" +"Change display options such as the color scheme and how search results are " +"sorted." +msgstr "" +"Schimbare optiuni afisaj precum schema de culor si modul in care rezultatele " +" cautarii sunt sortate." + +#: config/prefs.php.dist:21 +msgid "Change options for email notifications of ticket activity." +msgstr "Schimbare optiuni pentru notificari e-mail ale activitatzii tichetului." + +#: query.php:53 +msgid "Choose Action:" +msgstr "Alegere actiune:" + +#: config/prefs.php.dist:139 +msgid "Chronological (oldest first)" +msgstr "Cronologic (cele mai vechi primele)" + +#: config/templates.php.dist:59 +msgid "Comma Separated Values (CSV file)" +msgstr "Valori separate prin virgula (fisier CSV)" + +#: lib/Search.php:132 lib/Search.php:255 lib/Search.php:297 lib/Search.php:330 +#: lib/Search.php:365 templates/queryrenderer.inc:104 +msgid "Comment" +msgstr "Comentariu" + +#: templates/queryrenderer.inc:103 +msgid "Commentor" +msgstr "Comentator" + +#: lib/Whups.php:18 lib/Whups.php:19 config/prefs.php.dist:71 +msgid "Create Ticket" +msgstr "Creare Tichet" + +#: lib/Create.php:22 +msgid "Create Ticket - Stage 1" +msgstr "Creare tichet - Faza 1" + +#: lib/Create.php:43 +msgid "Create Ticket - Stage 2" +msgstr "Creare tichet - Faza 2" + +#: lib/Create.php:73 +msgid "Create Ticket - Stage 3" +msgstr "Creare tichet - Faza 3" + +#: lib/Create.php:113 +msgid "Create Ticket - Stage 4" +msgstr "Creare tichet - Faza 4" + +#: create.php:31 +msgid "Create Tickets" +msgstr "Creare tichete" + +#: lib/Whups.php:312 lib/Search.php:95 config/prefs.php.dist:46 +msgid "Created" +msgstr "Creat" + +#: query.php:182 query.php:197 +msgid "Current Query" +msgstr "Chestionare curenta" + +#: lib/Query.php:366 +msgid "Current Type" +msgstr "Tip curent" + +#: query.php:45 +msgid "Date Criteria" +msgstr "Criteriu data" + +#: config/prefs.php.dist:102 +msgid "Date/Time format for search results" +msgstr "Format Data/Timp pentru rezultate cautare" + +#: config/prefs.php.dist:49 +msgid "Default sorting criteria:" +msgstr "Criteriu implicit de sortare:" + +#: config/prefs.php.dist:60 +msgid "Default sorting direction:" +msgstr "Directie implicita de sortare:" + +#: query.php:54 +msgid "Delete" +msgstr "Stergere" + +#: lib/Admin.php:691 admin.php:847 +msgid "Delete Attribute" +msgstr "Stergere atribut" + +#: lib/Admin.php:735 +msgid "Delete Attribute Confirmation" +msgstr "Confirmare stergere atribut" + +#: lib/Admin.php:115 admin.php:235 +msgid "Delete Queue" +msgstr "Stergere modul" + +#: lib/Admin.php:191 +msgid "Delete Queue Confirmation" +msgstr "Confirmare stergere modul" + +#: lib/Admin.php:517 admin.php:456 +msgid "Delete Priority" +msgstr "Stergere prioritate" + +#: lib/Admin.php:561 +msgid "Delete Priority Confirmation" +msgstr "Confirmare stergere prioritate" + +#: lib/Admin.php:423 admin.php:338 +msgid "Delete State" +msgstr "Stergere stare" + +#: lib/Admin.php:473 +msgid "Delete State Confirmation" +msgstr "Confirmare stergere stare" + +#: lib/Admin.php:29 admin.php:630 +msgid "Delete Subject" +msgstr "Sterge subiect" + +#: lib/Admin.php:76 +msgid "Delete Subject Confirmation" +msgstr "Confirmare stergere subiect" + +#: details.php:54 +msgid "Delete Ticket" +msgstr "Stergere tichet" + +#: details.php:222 +msgid "Delete Ticket Succeeded" +msgstr "Stergere tichet reusita" + +#: lib/Admin.php:295 admin.php:145 +msgid "Delete Type" +msgstr "Stergere tip" + +#: lib/Admin.php:361 +msgid "Delete Type Confirmation" +msgstr "Confirmare stergere tip" + +#: lib/Admin.php:604 admin.php:730 +msgid "Delete Version" +msgstr "Stergere versiune" + +#: lib/Admin.php:648 +msgid "Delete Version Confirmation" +msgstr "Confirmare stergere versiune" + +#: config/prefs.php.dist:59 +msgid "Descending" +msgstr "Descrescator" + +#: lib/Create.php:102 +msgid "Description" +msgstr "Descriere" + +#: config/prefs.php.dist:13 +msgid "Display Options" +msgstr "Optiuni afisaj" + +#: query.php:55 +msgid "Edit" +msgstr "Editare" + +#: lib/Admin.php:138 lib/Admin.php:318 +msgid "Edit %s" +msgstr "Editare %s" + +#: lib/Admin.php:691 lib/Admin.php:712 admin.php:842 +msgid "Edit Attribute" +msgstr "Editare atribut" + +#: lib/Admin.php:330 details.php:52 +msgid "Edit Attributes" +msgstr "Editare atribute" + +#: lib/Admin.php:115 admin.php:229 +msgid "Edit Queue" +msgstr "Editare modul" + +#: admin.php:57 +msgid "Edit Queues" +msgstr "Editare module" + +#: lib/Admin.php:326 lib/Admin.php:374 +msgid "Edit Priorities" +msgstr "Editare prioritati" + +#: lib/Admin.php:517 lib/Admin.php:538 admin.php:451 +msgid "Edit Priority" +msgstr "Editare proritate" + +#: runquery.php:21 +msgid "Edit Query" +msgstr "Editare chestionare" + +#: lib/Admin.php:423 lib/Admin.php:444 admin.php:333 +msgid "Edit State" +msgstr "Editare stare" + +#: lib/Admin.php:322 lib/Admin.php:370 +msgid "Edit States" +msgstr "Editare stari" + +#: lib/Admin.php:29 lib/Admin.php:49 admin.php:625 +msgid "Edit Subject" +msgstr "Editare subiect" + +#: admin.php:59 +msgid "Edit Subjects" +msgstr "Editare subiecte" + +#: lib/Admin.php:295 admin.php:139 +msgid "Edit Type" +msgstr "Editare tip" + +#: admin.php:58 +msgid "Edit Types" +msgstr "Editare tipuri" + +#: lib/Admin.php:604 lib/Admin.php:625 admin.php:725 +msgid "Edit Version" +msgstr "Editare versiune" + +#: lib/Admin.php:690 +msgid "Edit or Delete Attributes" +msgstr "Editare sau stergere atribute" + +#: lib/Admin.php:114 +msgid "Edit or Delete Queues" +msgstr "Editare sau stergere module" + +#: lib/Admin.php:516 +msgid "Edit or Delete Priorities" +msgstr "Editare sau stergere prioritati" + +#: lib/Admin.php:422 +msgid "Edit or Delete States" +msgstr "Editare sau stergere stari" + +#: lib/Admin.php:28 +msgid "Edit or Delete Subjects" +msgstr "Editare sau stergere subiecte" + +#: lib/Admin.php:294 +msgid "Edit or Delete Types" +msgstr "Editare sau stergere tipuri" + +#: lib/Admin.php:603 +msgid "Edit or Delete Versions" +msgstr "Editare sau stergere versiuni" + +#: lib/Admin.php:153 +msgid "Edit the permissions on this module" +msgstr "Editare permisiuni pentru acest modul" + +#: lib/Admin.php:151 +msgid "Edit the users responsible for this module" +msgstr "Editare utilizatori responsabili pentru acest modul" + +#: lib/Admin.php:152 +msgid "Edit the versions for this module" +msgstr "Editare versiuni pentru modul" + +#: query.php:171 +msgid "Error: Unknown query form %s, defaulting to properties" +msgstr "Eroare: chestionar necunoscut %s, intoarcere la proprietati" + +#: lib/Query.php:43 +msgid "Exact Match" +msgstr "Potrivire exacta" + +#: runquery.php:68 runquery.php:84 query.php:37 +msgid "Execute Query" +msgstr "Executa chestionare" + +#: lib/Admin.php:774 +msgid "For tickets from these modules" +msgstr "Pentru tichete din aceste module" + +#: lib/Admin.php:776 +msgid "For tickets which are" +msgstr "Pentru tichete care sunt" + +#: templates/menu/menu.inc:37 +msgid "Help" +msgstr "Ajutor" + +#: lib/Search.php:65 +msgid "Hide Assigned" +msgstr "Ascunde Atribuite" + +#: lib/Search.php:64 +msgid "Hide New" +msgstr "Ascunde noi" + +#: lib/Search.php:66 +msgid "Hide Resolved" +msgstr "Ascunde rezolvate" + +#: lib/Search.php:63 +msgid "Hide Unconfirmed" +msgstr "Ascunde neconfirmate" + +#: query.php:57 +msgid "Hoist" +msgstr "Ridicare" + +#: lib/Whups.php:305 lib/Query.php:493 templates/queryrenderer.inc:98 +#: config/prefs.php.dist:39 +msgid "Id" +msgstr "Id" + +#: lib/Driver.php:159 +msgid "If you believe you have recieved this mail in error, please contact %s." +msgstr "Daca ati primit acest mail din greseala, contactati %s." + +#: lib/Admin.php:779 +msgid "" +"If you select any tickets that do not have an owner, who should we send " +"email to?" +msgstr "" +"Daca selectati tichete fara proprietar, cui ar trebui trimis email ?" + +#: templates/comment.inc:43 +msgid "Initial state of '%s'" +msgstr "Stare initiala de '%s'" + +#: query.php:58 +msgid "Insert And" +msgstr "Inserare si" + +#: lib/Query.php:340 +msgid "Insert Branch" +msgstr "Inserare ramura" + +#: query.php:60 +msgid "Insert Not" +msgstr "Inserare nu" + +#: query.php:59 +msgid "Insert Or" +msgstr "Inserare sau" + +#: query.php:61 +msgid "Insert Query" +msgstr "Inserare chestionare" + +#: lib/Admin.php:166 +msgid "Keep a set of versions for this queue?" +msgstr "Pastrare set de versiuni pentru acest modul?" + +#: config/prefs.php.dist:6 +msgid "Language" +msgstr "Limba" + +#: lib/Query.php:621 runquery.php:23 query.php:38 +msgid "Load Query" +msgstr "Incarcare chestionare" + +#: templates/menu/menu.inc:28 +msgid "Login" +msgstr "Intrare" + +#: config/prefs.php.dist:100 +msgid "MM/DD/YY" +msgstr "LL/ZZ/AA" + +#: config/prefs.php.dist:101 +msgid "MM/DD/YY HH:MM:SS" +msgstr "LL/ZZ/AA OO:MM:SS" + +#: lib/Query.php:550 +msgid "Match" +msgstr "Potrivire" + +#: lib/Query.php:396 lib/Query.php:448 lib/Query.php:551 +msgid "Match Operator" +msgstr "Operator potrivire" + +#: lib/Query.php:47 +msgid "Match Pattern" +msgstr "Potrivire sablon" + +#: lib/Query.php:46 +msgid "Match Word" +msgstr "Potrivire cuvant" + +#: reports.php:23 +msgid "Maximum time a ticket is unresolved" +msgstr "Timp maxim de nerezolvare a unui tichet" + +#: reports.php:24 +msgid "Minimum time a ticket is unresolved" +msgstr "Timp minim de nerezolvare a unui tichet" + +#: lib/Whups.php:310 templates/queryrenderer.inc:99 config/prefs.php.dist:44 +msgid "Queue" +msgstr "Modul" + +#: lib/Admin.php:103 lib/Admin.php:160 lib/Admin.php:203 +msgid "Queue Description" +msgstr "Descriere modul" + +#: lib/Admin.php:102 lib/Admin.php:124 lib/Admin.php:157 lib/Admin.php:200 +#: lib/Create.php:26 lib/Create.php:31 lib/Search.php:39 lib/Search.php:80 +msgid "Queue Name" +msgstr "Nume modul" + +#: lib/Create.php:61 lib/Search.php:83 +msgid "Queue Version" +msgstr "Versiune modul" + +#: admin.php:60 +msgid "Queue/Type Matrix" +msgstr "Modul/Tip Matrice" + +#: search.php:73 +msgid "Queue: %s, Ticket: %s, Category %s" +msgstr "Modul: %s, Tichet: %s, Categorie %s" + +#: config/prefs.php.dist:140 +msgid "Most recent first" +msgstr "Cele mai recente primele" + +#: query.php:56 +msgid "Move" +msgstr "Mutare" + +#: mybugs.php:22 templates/menu/menu.inc:8 +msgid "My %s" +msgstr "%s mea(mele)" + +#: mybugs.php:44 +msgid "My Assigned Tickets" +msgstr "Tichetele atribuite mie" + +#: config/prefs.php.dist:69 +msgid "My Bugs" +msgstr "Problemele mele" + +#: mybugs.php:61 +msgid "My Open Requests" +msgstr "Cererile deschise ale mele" + +#: search.php:121 +msgid "My Searches" +msgstr "Cautarile mele" + +#: lib/Query.php:600 lib/Query.php:635 +msgid "Name" +msgstr "Nume" + +#: config/templates.php.dist:44 +msgid "Name, Email Report" +msgstr "Nume, raport email" + +#: lib/Driver.php:63 +msgid "New" +msgstr "Nou(a)" + +#: lib/Search.php:296 lib/Search.php:329 +msgid "New Priority" +msgstr "Prioritate noua" + +#: query.php:36 +msgid "New Query" +msgstr "Chestionare noua" + +#: lib/Search.php:176 lib/Search.php:254 +msgid "New State" +msgstr "Stare noua" + +#: lib/Block/summary.php:41 lib/api.php:107 templates/menu/menu.inc:11 +msgid "New Ticket" +msgstr "Tichet nou" + +#: lib/Driver.php:85 +msgid "New comment for ticket %s" +msgstr "Comentariu nou pentru tichetul %s" + +#: lib/Driver.php:70 +msgid "New ticket (%s): %s" +msgstr "Tichet nou (%s): %s" + +#: lib/Admin.php:81 lib/Admin.php:196 lib/Admin.php:366 lib/Admin.php:478 +#: lib/Admin.php:566 lib/Admin.php:653 lib/Admin.php:740 lib/Search.php:209 +msgid "No" +msgstr "Nu" + +#: lib/Driver/sql.php:1303 +msgid "No configuration information specified for SQL Bugs." +msgstr "Nici o configuratie specificata pentru problemele SQL." + +#: lib/Driver.php:56 +msgid "No such backend '%s' found" +msgstr "Nici un suport '%s' gasit" + +#: details.php:34 +msgid "No such ticket." +msgstr "Nici un asemenea tichet." + +#: lib/Whups.php:342 +msgid "No tickets matched your search criteria." +msgstr "Nici un tichet nu s-a potrivit criteriului de cautare." + +#: lib/Block/summary.php:90 +msgid "No tickets to display" +msgstr "Nici un tichet de afisat" + +#: lib/Reports.php:64 +msgid "None" +msgstr "Nici unul" + +#: lib/Query.php:345 templates/queryrenderer.inc:92 +msgid "Not" +msgstr "Nu" + +#: query.php:95 +msgid "Not yet implemented..." +msgstr "Neimplementat inca..." + +#: config/prefs.php.dist:20 +msgid "Notification Options" +msgstr "Optiuni notificari" + +#: config/prefs.php.dist:120 +msgid "Only notify me of ticket changes from other users" +msgstr "Notificare numai la schimbari tichet de catre alti utilizatori" + +#: templates/menu/menu.inc:18 +msgid "Options" +msgstr "Optiuni" + +#: lib/Query.php:344 templates/queryrenderer.inc:91 +msgid "Or" +msgstr "Sau" + +#: config/prefs.php.dist:12 config/prefs.php.dist:19 +msgid "Other Options" +msgstr "Alte optiuni" + +#: lib/Whups.php:314 lib/Search.php:91 templates/queryrenderer.inc:101 +msgid "Owner" +msgstr "Proprietar" + +#: lib/Query.php:349 +msgid "Path" +msgstr "Cale" + +#: lib/Search.php:186 lib/Search.php:222 lib/Search.php:264 lib/Search.php:306 +msgid "Permission Denied." +msgstr "Permisiune neacordata." + +#: lib/Admin.php:344 lib/Admin.php:387 +msgid "Priorities for this Type" +msgstr "Prioritati pentru acest tip" + +#: lib/Create.php:100 lib/Whups.php:309 lib/Query.php:495 lib/Search.php:60 +#: lib/Search.php:89 templates/queryrenderer.inc:114 config/prefs.php.dist:43 +msgid "Priority" +msgstr "Prioritate" + +#: lib/Admin.php:505 lib/Admin.php:549 lib/Admin.php:574 +msgid "Priority Description" +msgstr "Descriere Prioritate" + +#: lib/Admin.php:504 lib/Admin.php:527 lib/Admin.php:546 lib/Admin.php:571 +msgid "Priority Name" +msgstr "Nume prioritate" + +#: templates/comment.inc:82 +msgid "Private" +msgstr "Privat" + +#: query.php:43 +msgid "Property Criteria" +msgstr "Criteriu proprietate" + +#: lib/Whups.php:12 lib/Whups.php:13 query.php:143 templates/menu/menu.inc:13 +msgid "Query Builder" +msgstr "Creator chestionare" + +#: lib/Query.php:101 +msgid "Query Parameters" +msgstr "Parametri chestionare" + +#: runquery.php:73 +msgid "Query Results" +msgstr "Rezultate chestionare" + +#: runquery.php:22 +msgid "Re-execute Query" +msgstr "Re-executare chestionare" + +#: lib/Admin.php:751 +msgid "Really delete this attribute? This may cause data problems!!" +msgstr "Stergere sigura a acestui atribut? Poate cauza probleme datelor!!" + +#: lib/Admin.php:206 +msgid "Really delete this queue? This may cause data problems!!" +msgstr "Stergere sigura a acestui modul? Poate cauza probleme datelor!!" + +#: lib/Admin.php:577 +msgid "Really delete this priority? This may cause data problems!!" +msgstr "Stergere sigura a acestei prioritati? Poate cauza probleme datelor!!" + +#: lib/Admin.php:490 +msgid "Really delete this state? This may cause data problems!!" +msgstr "Stergere sigura a acestei stari? Poate cauza probleme datelor!!" + +#: lib/Admin.php:88 +msgid "Really delete this subject? This may cause data problems!!" +msgstr "Stergere sigura a acestui subiect? Poate cauza probleme datelor!!" + +#: lib/Search.php:216 +msgid "" +"Really delete this ticket? It will NOT be archived, and will be gone forever." +msgstr "" +"Stergere sigura a acestui tichet? NU va fi arhivat, si va disparea definitiv." + +#: lib/Admin.php:390 +msgid "Really delete this type? This may cause data problems!!" +msgstr "Stergere sigura a acestui tip? Poate cauza probleme datelor!!" + +#: lib/Admin.php:664 +msgid "Really delete this version? This may cause data problems!!" +msgstr "" + +#: search.php:105 +msgid "Refine Search" +msgstr "Redefinire cautare" + +#: search.php:103 +msgid "Refine search" +msgstr "Redefinire cautare" + +#: admin.php:928 +msgid "Reminders were sent." +msgstr "Aducerile aminte au fost trimise." + +#: lib/Admin.php:250 +msgid "Remove User" +msgstr "Sterge utilizator" + +#: lib/Whups.php:30 lib/Whups.php:31 reports.php:26 templates/menu/menu.inc:14 +msgid "Reports" +msgstr "Rapoarte" + +#: lib/Search.php:94 templates/queryrenderer.inc:102 +msgid "Requester" +msgstr "Solicitator" + +#: lib/Driver/sql.php:1318 +msgid "Required 'database' not specified in bugs configuration." +msgstr "'database' nespecificat in configuratia bugurilor." + +#: lib/Driver/sql.php:1309 +msgid "Required 'hostspec' not specified in bugs configuration." +msgstr "'hostspec' nespecificat in configuratia bugurilor." + +#: lib/Driver/sql.php:1315 +msgid "Required 'password' not specified in bugs configuration." +msgstr "'pasword' nespecificat in configuratia bugurilor." + +#: lib/Driver/sql.php:1306 +msgid "Required 'phptype' not specified in bugs configuration." +msgstr "'phptype' nespecificat in configuratia bugurilor." + +#: lib/Driver/sql.php:1312 +msgid "Required 'username' not specified in bugs configuration." +msgstr "'username' nespecificat in configuratia bugurilor." + +#: lib/Whups.php:315 lib/Search.php:97 lib/Driver.php:65 +#: config/prefs.php.dist:48 +msgid "Resolved" +msgstr "" + +#: lib/Admin.php:252 +msgid "Responsible Users" +msgstr "Utilizatori responsabili" + +#: lib/Admin.php:170 +msgid "Restrict ticket subjects to a specified list?" +msgstr "Restrange subiectele tichetelor la o lista specificata?" + +#: templates/searchresults.inc:47 +msgid "Save" +msgstr "Salvare" + +#: lib/Query.php:598 runquery.php:24 query.php:39 +msgid "Save Query" +msgstr "Salvare chestionare" + +#: templates/searchresults.inc:41 +msgid "Save these results as: " +msgstr "Salvare rezultate ca:" + +#: search.php:126 templates/menu/menu.inc:10 +msgid "Search" +msgstr "Cautare" + +#: lib/Query.php:554 +msgid "Search %s Attribute" +msgstr "Cautare atribut %s" + +#: lib/Query.php:397 +msgid "Search Assignee" +msgstr "Cautare atribuit" + +#: lib/Query.php:558 +msgid "Search Attribute" +msgstr "Cautare atribut" + +#: lib/Query.php:399 lib/Query.php:450 +msgid "Search Comments" +msgstr "Cautare comentarii" + +#: lib/Query.php:398 +msgid "Search Requester" +msgstr "Cautare solicitator" + +#: search.php:96 +msgid "Search Results" +msgstr "Rezultate cautare" + +#: lib/Query.php:449 +msgid "Search Summary" +msgstr "Cautare cuprins" + +#: lib/Whups.php:6 lib/Whups.php:7 search.php:27 search.php:124 +#: config/prefs.php.dist:70 +msgid "Search Tickets" +msgstr "Cautare tichete" + +#: config/prefs.php.dist:72 +msgid "Select the view to display after login:" +msgstr "Selectare tip vizualizare dupa intrare:" + +#: config/prefs.php.dist:30 +msgid "Select your preferred language:" +msgstr "Selectare limba favorita:" + +#: lib/Admin.php:762 admin.php:61 +msgid "Send Reminders" +msgstr "Trimite memorandum" + +#: lib/Admin.php:773 +msgid "Send only for this list of ticket ids" +msgstr "Trimitere doar pentru aceasta lista de id-uri tichete" + +#: details.php:48 details.php:50 +msgid "Set Priority" +msgstr "Setare prioritate" + +#: details.php:47 +msgid "Set State" +msgstr "Setare stare" + +#: details.php:205 +msgid "Set Ticket Attributes" +msgstr "Setare atribute tichet" + +#: details.php:124 details.php:184 +msgid "Set Ticket Priority" +msgstr "Setare prioritate tichet" + +#: details.php:164 +msgid "Set Ticket State Succeeded" +msgstr "Setare stare tichet reusita" + +#: config/prefs.php.dist:7 +msgid "Set your preferred display language." +msgstr "Setare limba favorita." + +#: config/prefs.php.dist:111 +msgid "Show \"(X Days Ago)\" in Date field of search results?" +msgstr "Afisare \"(Acum X zile)\" in campul Data al rezultatelor cautarii?" + +#: config/prefs.php.dist:138 +msgid "Show comments in chronological order, or most recent first?" +msgstr "Afisare comentarii cronologic, sau cele mai recente primele?" + +#: config/prefs.php.dist:89 +msgid "Show ticket IDs in the summary view?" +msgstr "Afisare ID-uri tichete in cuprins?" + +#: config/prefs.php.dist:81 +msgid "Show tickets you have requested in the summary view?" +msgstr "Afisare tichete solicitate in cuprins?" + +#: config/templates.php.dist:16 +msgid "Simple HTML Report" +msgstr "Raport HTML simplu" + +#: templates/index/notconfigured.inc:39 +msgid "Some of WHUPS's configuration files are missing:" +msgstr "Anumite fisiere de configurare WHUPS lipsesc:" + +#: templates/searchresults.inc:71 +msgid "Sort Direction" +msgstr "Directie sortare" + +#: templates/searchresults.inc:72 templates/searchresults.inc:76 +msgid "Sort by %s" +msgstr "Sortare dupa %s" + +#: lib/Whups.php:307 lib/Query.php:494 templates/queryrenderer.inc:109 +#: config/prefs.php.dist:41 +msgid "State" +msgstr "Stare" + +#: lib/Admin.php:411 lib/Admin.php:461 +msgid "State Category" +msgstr "Categorie stare" + +#: lib/Admin.php:410 lib/Admin.php:458 lib/Admin.php:487 +msgid "State Description" +msgstr "Descriere stare" + +#: lib/Admin.php:409 lib/Admin.php:433 lib/Admin.php:455 lib/Admin.php:484 +msgid "State Name" +msgstr "Nume stare" + +#: templates/comment.inc:46 +msgid "State changed to '%s'" +msgstr "Stare schimbata in '%s'" + +#: templates/comment.inc:49 +msgid "State is '%s'" +msgstr "Starea este '%s'" + +#: lib/Admin.php:340 lib/Admin.php:384 +msgid "States for this Type" +msgstr "Stare pentru acest tip" + +#: lib/Create.php:101 config/prefs.php.dist:40 +msgid "Subject" +msgstr "Subiect" + +#: lib/Admin.php:17 lib/Admin.php:38 lib/Admin.php:61 lib/Admin.php:85 +msgid "Subject Name" +msgstr "Nume subiect" + +#: lib/Admin.php:173 +msgid "Subjects associated with this Queue" +msgstr "Subiecte asociate cu acest modul" + +#: create.php:101 +msgid "Submit" +msgstr "Trimitere" + +#: lib/Whups.php:306 templates/queryrenderer.inc:105 +msgid "Summary" +msgstr "Cuprins" + +#: lib/Query.php:447 +msgid "Text" +msgstr "Text" + +#: query.php:46 +msgid "Text Criteria" +msgstr "Criteriu text" + +#: admin.php:809 +msgid "The attribute '%s' has been added to %s." +msgstr "Atributul '%s' a fost adaugat la '%s'." + +#: admin.php:897 +msgid "The attribute has been deleted." +msgstr "Atributul a fost sters." + +#: admin.php:866 +msgid "The attribute has been modified." +msgstr "Atributul a fost modificat." + +#: admin.php:902 +msgid "The attribute was not deleted." +msgstr "Atributul nu a fost sters." + +#: admin.php:205 +msgid "The queue '%s' has been created." +msgstr "Modulul '%s' a fost creat." + +#: admin.php:277 +msgid "The queue has been deleted." +msgstr "Modulul a fost sters." + +#: admin.php:257 +msgid "The queue has been modified." +msgstr "Modulul a fost modificat." + +#: admin.php:282 +msgid "The queue was not deleted." +msgstr "Modulul nu a fost sters." + +#: admin.php:418 +msgid "The priority '%s' has been added to %s." +msgstr "Prioritatea '%s' a fost adaugata la %s." + +#: admin.php:505 +msgid "The priority has been deleted." +msgstr "Prioritatea a fost stearsa." + +#: admin.php:475 +msgid "The priority has been modified." +msgstr "Prioritatea a fost modificata." + +#: admin.php:510 +msgid "The priority was not deleted." +msgstr "Prioritatea nu a fost stearsa." + +#: data.php:24 +msgid "The requested template does not exist." +msgstr "Modelul solicitat nu exista." + +#: admin.php:299 +msgid "The state '%s' has been added to %s." +msgstr "Starea '%s' a fost adaugata la %s." + +#: admin.php:388 +msgid "The state has been deleted." +msgstr "Starea a fost stearsa." + +#: admin.php:357 +msgid "The state has been modified." +msgstr "Starea a fost modificata." + +#: admin.php:393 +msgid "The state was not deleted." +msgstr "Starea nu a fost stearsa" + +#: admin.php:607 +msgid "The subject '%s' has been added." +msgstr "Subiectul '%s' a fost adaugat." + +#: admin.php:669 +msgid "The subject has been deleted." +msgstr "Subiectul a fost sters." + +#: admin.php:648 +msgid "The subject has been modified." +msgstr "Subiectul a fost modificat." + +#: admin.php:674 +msgid "The subject was not deleted." +msgstr "Subiectul nu a fost sters." + +#: admin.php:167 +msgid "The type '%s' has been modified." +msgstr "Tipul '%s' a fost modificat." + +#: admin.php:185 +msgid "The type has been deleted." +msgstr "Tipul a fost sters" + +#: admin.php:190 +msgid "The type was not deleted." +msgstr "Tipul nu a fost sters." + +#: admin.php:691 +msgid "The version '%s' has been added to %s." +msgstr "Versiunea '%s' a fost adaugata la %s." + +#: admin.php:779 +msgid "The version has been deleted." +msgstr "Versiunea a fost stearsa." + +#: admin.php:749 +msgid "The version has been modified." +msgstr "Versiunea a fost modificata." + +#: admin.php:784 +msgid "The version was not deleted." +msgstr "Versiunea nu a fost stearsa." + +#: lib/Admin.php:697 +msgid "There are no attribute types to edit" +msgstr "Nu exista tipuri de atribute de editat" + +#: lib/Query.php:557 +msgid "There are no attributes defined for the current type" +msgstr "Nu exista atribute definite pentru tipul curent" + +#: lib/Admin.php:768 +msgid "There are no queues available." +msgstr "Nu exista queue disponibile." + +#: lib/Admin.php:121 +msgid "There are no queues to edit" +msgstr "Nu exista queue de editat" + +#: lib/Create.php:31 +msgid "There are no queues which you can create tickets in." +msgstr "Nu exista queue in care sa se creeze tichete." + +#: lib/Search.php:30 +msgid "There are no queues which you can search." +msgstr "Nu exista queue pe care sa se caute." + +#: lib/Admin.php:523 +msgid "There are no priorities to edit" +msgstr "Nu exista prioritati editabile" + +#: lib/Admin.php:429 +msgid "There are no states to edit" +msgstr "Nu exista stari editabile" + +#: lib/Admin.php:35 +msgid "There are no subjects to edit" +msgstr "Nu exista subiecte editabile" + +#: lib/Create.php:48 +msgid "" +"There are no ticket types associated with this module; until there are, you " +"cannot create any tickets in this module." +msgstr "" +"Nu exista nici un tip de tichet asociat cu acest modul; pana vor exista, " +"nu puteti crea nici un tichet in acest modul." + +#: lib/Admin.php:301 +msgid "There are no types to edit" +msgstr "Nu exista tipuri editabile" + +#: lib/Admin.php:264 +msgid "There are no users responsible for this module." +msgstr "Nu exista utilizatori responsabili pentru acest modul." + +#: lib/Create.php:125 lib/Search.php:164 +msgid "There are no users to which this ticket can be assigned." +msgstr "Nu exista utilizatori caruia sa li se atribuie acest tichet." + +#: lib/Admin.php:610 +msgid "There are no versions to edit" +msgstr "Nu exista versiuni editabile" + +#: lib/Reports.php:143 +msgid "There is no data for this report." +msgstr "Nu exista date pentru acest raport." + +#: admin.php:546 +msgid "There was an error adding '%s' to the responsible list for '%s': %s" +msgstr "S-a produs o eroare de adaugare '%s' in lista responsabili pentru '%s': %s" + +#: admin.php:609 +msgid "There was an error adding the subject: %s." +msgstr "S-a produs o eroare in adaugarea subiectului: %s." + +#: admin.php:812 +msgid "There was an error creating the attribute: %s." +msgstr "S-a produs o eroare in crearea atributului: %s" + +#: admin.php:213 +msgid "There was an error creating the module: %s." +msgstr "S-a produs o eroare la crearea modulului: %s" + +#: admin.php:420 +msgid "There was an error creating the priority: %s." +msgstr "S-a produs o eroare la crearea prioritatii: %s." + +#: admin.php:301 +msgid "There was an error creating the state: %s." +msgstr "S-a produs o eroare la crearea starii: %s." + +#: admin.php:693 +msgid "There was an error creating the version: %s." +msgstr "S-a produs o eroare la crearea versiunii: %s." + +#: admin.php:899 +msgid "There was an error deleting the attribute: %s." +msgstr "S-a produs o eroare la stergerea atributului: %s" + +#: admin.php:279 +msgid "There was an error deleting the module: %s." +msgstr "S-a produs o eroare la stergerea modulului: %s." + +#: admin.php:507 +msgid "There was an error deleting the priority: %s." +msgstr "S-a produs o eroare la stergerea prioritatii: %s." + +#: admin.php:390 +msgid "There was an error deleting the state: %s." +msgstr "S-a produs o eroare la stergerea starii: %s." + +#: admin.php:671 +msgid "There was an error deleting the subject: %s." +msgstr "S-a produs o eroare la stergerea subiectului: %s." + +#: details.php:227 +msgid "There was an error deleting the ticket: %s" +msgstr "S-a produs o eroare la stergerea tichetului: %s" + +#: admin.php:187 +msgid "There was an error deleting the type: %s." +msgstr "S-a produs o eroare la stergerea tipului: %s." + +#: admin.php:781 +msgid "There was an error deleting the version: %s." +msgstr "S-a produs o eroare la stergerea versiunii: %s." + +#: admin.php:873 +msgid "There was an error editing the attribute: %s." +msgstr "S-a produs o eroare la editarea atributului: %s." + +#: admin.php:261 +msgid "There was an error editing the module: %s." +msgstr "S-a produs o eroare la editarea modulului: %s." + +#: admin.php:480 +msgid "There was an error editing the priority: %s." +msgstr "S-a produs o eroare la editarea prioritatii: %s." + +#: admin.php:362 +msgid "There was an error editing the state: %s." +msgstr "S-a produs o eroare la editarea starii: %s." + +#: admin.php:653 +msgid "There was an error editing the subject: %s." +msgstr "S-a produs o eroare la editarea subiectului: %s." + +#: admin.php:754 +msgid "There was an error editing the version: %s." +msgstr "S-a produs o eroare la editarea versiunii: %s." + +#: mybugs.php:40 +msgid "There was an error listing your assigned tickets: %s" +msgstr "S-a produs o eroare la listarea propriilor tichete: %s" + +#: mybugs.php:57 +msgid "There was an error listing your open requests: %s" +msgstr "S-a produs o eroare la listarea propriilor cereri deschise: %s" + +#: admin.php:165 +msgid "There was an error modifying the type: %s." +msgstr "S-a produs o eroare la modificarea tipului: %s." + +#: search.php:89 +msgid "There was an error performing your search: %s" +msgstr "S-a produs o eroare la efectuarea cautarii: %s" + +#: admin.php:585 +msgid "There was an error removing '%s' from the responsible list for '%s': %s" +msgstr "S-a produs o eroare la stergerea '%s' din lista responsabili pentru '%s': %s" + +#: templates/index/notconfigured.inc:58 +msgid "" +"This file controls the default preferences for Whups, and also controls " +"which preferences users can alter." +msgstr "" +"Acest fisier controleaza atat preferintele implicite pentru Whups, cat " +"si alte preferinte pentru utilizatori." + +#: templates/index/notconfigured.inc:51 +msgid "" +"This file controls the stylesheet that is used to set colors and fonts in " +"addition to or overriding Horde defaults." +msgstr "" +"Acest fisier controleaza schemva de culori si fonturi diferite de cele " +"implicite Horde." + +#: templates/index/notconfigured.inc:65 +msgid "" +"This file defines the templates that various parts of Whups use to format " +"data." +msgstr "" +"Acest fisier defineste modelele pe care diverse parti din Whups le " +"utilizeaza pentru formatarea datelor." + +#: data.php:27 +msgid "This is not a search results template." +msgstr "Acesta nu este un model de rezultate de cautare." + +#: lib/Admin.php:54 +msgid "This is not a valid subject." +msgstr "Acesta nu este un subiect valid." + +#: templates/index/notconfigured.inc:44 +msgid "" +"This is the main WHUPS configuration file. It contains paths and options for " +"all WHUPS scripts." +msgstr "" +"Acesta este principalul fisier de configurare WHUPS. Contine caile si " +"optiunile pentru toate scripturile WHUPS." + +#: lib/Driver.php:156 +msgid "This mail was automatically generated by %s" +msgstr "Acest mail a fost generat automat de %s" + +#: lib/Create.php:57 +msgid "" +"This queue requires that you specify a version, but there are no versions " +"associated with it. Until versions are created for this module, you will not " +"be able to create tickets." +msgstr "" +"Acest modul necesita specificare de versiune, dar nu exista versiuni asociate " +"cu el. Pana versiunile vor fi create pentru acest modul, nu veti putea " +"sa creati tichete." + +#: details.php:291 +msgid "Ticket %s Comments" +msgstr "Comentarii tichet %s" + +#: details.php:284 +msgid "Ticket %s Details" +msgstr "Detalii tichet %s" + +#: lib/Driver.php:103 +msgid "Ticket %s has been assigned" +msgstr "Tichetul %s a fost atribuit" + +#: lib/Driver.php:141 +msgid "Ticket %s has changed priority" +msgstr "Tichetul %s si-a schimbat prioritatea" + +#: lib/Driver.php:123 +msgid "Ticket %s has changed state" +msgstr "Tichetul %s si-a schimbat starea" + +#: lib/Driver/sql.php:603 +msgid "Ticket %s was not found." +msgstr "Tichetul %s nu a fost gasit." + +#: details.php:236 +msgid "Ticket Details" +msgstr "Detalii tichet" + +#: lib/Search.php:38 +msgid "Ticket ID" +msgstr "ID tichet" + +#: lib/Create.php:99 lib/Search.php:57 lib/Search.php:88 +msgid "Ticket State" +msgstr "Stare tichet" + +#: templates/reports/stats.inc:4 +msgid "Ticket Stats" +msgstr "Stare tichet" + +#: lib/Search.php:79 lib/Search.php:213 lib/api.php:69 +msgid "Ticket Summary" +msgstr "Cuprins tichet" + +#: lib/Create.php:52 lib/Search.php:87 +msgid "Ticket Type" +msgstr "Tip tichet" + +#: lib/Admin.php:163 +msgid "Ticket Types associated with this Queue" +msgstr "Tipuri tichet asociate cu acest modul" + +#: lib/Block/summary.php:68 lib/api.php:117 +msgid "Tickets assigned to you" +msgstr "Tickete atribuite tie" + +#: lib/Search.php:40 +msgid "Tickets which are" +msgstr "Tichete care sunt" + +#: lib/Block/summary.php:84 lib/api.php:133 +msgid "Tickets you requested" +msgstr "Tichete solicitate" + +#: lib/Whups.php:308 templates/queryrenderer.inc:100 config/prefs.php.dist:42 +msgid "Type" +msgstr "Tip" + +#: lib/Admin.php:283 lib/Admin.php:337 lib/Admin.php:381 +msgid "Type Description" +msgstr "Descriere tip" + +#: lib/Admin.php:282 lib/Admin.php:304 lib/Admin.php:334 lib/Admin.php:378 +msgid "Type Name" +msgstr "Nume tip" + +#: lib/Search.php:92 +msgid "Unassigned" +msgstr "Neatribuit" + +#: lib/Admin.php:779 +msgid "Unassigned tickets" +msgstr "Tichete neatribuite" + +#: lib/Driver.php:62 +msgid "Unconfirmed" +msgstr "Neconfirmat" + +#: templates/queryrenderer.inc:139 +msgid "Unknown node type %s" +msgstr "Tip nod %s necunoscut" + +#: lib/Admin.php:236 lib/Admin.php:238 +msgid "User" +msgstr "Utilizator" + +#: query.php:44 +msgid "User Criteria" +msgstr "Criteriu utilizator" + +#: lib/Query.php:395 +msgid "User ID" +msgstr "ID utilizator" + +#: prefs.php:34 +msgid "User Options" +msgstr "Optiuni utilizator" + +#: lib/Admin.php:176 +msgid "Users responsible for this Queue" +msgstr "Utilizatori responsabili pentru acest modul" + +#: lib/Admin.php:268 +msgid "Users responsible for this module" +msgstr "Utilizatori responsabili pentru acest modul" + +#: lib/Whups.php:311 config/prefs.php.dist:45 +msgid "Version" +msgstr "Versiune" + +#: lib/Admin.php:592 lib/Admin.php:636 lib/Admin.php:661 +msgid "Version Description" +msgstr "Descriere versiune" + +#: lib/Admin.php:591 lib/Admin.php:614 lib/Admin.php:633 lib/Admin.php:658 +msgid "Version Name" +msgstr "Nume versiune" + +#: lib/Search.php:135 lib/Search.php:179 lib/Search.php:257 lib/Search.php:299 +#: lib/Search.php:367 +msgid "Viewable only by members of" +msgstr "Vizualizabil doar de membri ai" + +#: templates/index/notconfigured.inc:4 +msgid "WHUPS is not properly configured" +msgstr "WHUPS nu este corect configurat" + +#: config/prefs.php.dist:98 +msgid "Weekday Day Month" +msgstr "Zi_saptamana Zi Luna" + +#: config/prefs.php.dist:99 +msgid "Weekday Day Month HH:MM:SS TZ" +msgstr "Zi_saptamana Zi Luna OO:MM:SS ZT" + +#: lib/Admin.php:81 lib/Admin.php:196 lib/Admin.php:366 lib/Admin.php:478 +#: lib/Admin.php:566 lib/Admin.php:653 lib/Admin.php:740 lib/Search.php:209 +msgid "Yes" +msgstr "Da" + +#: lib/Driver/sql.php:606 +msgid "You do not have permission to access this ticket (%s)." +msgstr "Nu aveti permisiunea de a accesa acest tichet (%s)." + +#: lib/Query.php:632 +msgid "You have no saved queries." +msgstr "Nu aveti chestionari salvate." + +#: lib/Whups.php:336 +msgid "You must select at least one queue to send reminders for." +msgstr "Trebuie sa selectati cel putin un modul pentru care se trimit memorandumuri." + +#: lib/Create.php:28 lib/Search.php:130 lib/Search.php:328 +msgid "Your Email Address" +msgstr "Adresa ta de e-mail" + +#: config/prefs.php.dist:5 +msgid "Your Information" +msgstr "Detalii personale" + +#: create.php:157 +msgid "Your ticket id is %s. " +msgstr "Id-ul tichetului tau este %s." + +#: templates/queryrenderer.inc:129 +msgid "contains (case insensitive) substring" +msgstr "contine (caz insenzitiv) subsirul" + +#: templates/queryrenderer.inc:130 +msgid "contains (case sensitive) substring" +msgstr "contine (caz senzitiv) subsirul" + +#: templates/queryrenderer.inc:131 +msgid "contains the word" +msgstr "contine cuvantul" + +#: templates/queryrenderer.inc:128 +msgid "is" +msgstr "este" + +#: templates/queryrenderer.inc:126 +msgid "is greater than" +msgstr "este mai mare ca" + +#: templates/queryrenderer.inc:127 +msgid "is less than" +msgstr "este mai mic ca" + +#: templates/queryrenderer.inc:132 +msgid "matches the pattern" +msgstr "se potriveste tiparului" diff --git a/whups/po/ru_RU.po b/whups/po/ru_RU.po new file mode 100644 index 000000000..9a0b5e784 --- /dev/null +++ b/whups/po/ru_RU.po @@ -0,0 +1,2210 @@ +# Russian translations for Whups package +# Copyright +# Illya Belov +# Alexey Zakharov , 2006 +# +msgid "" +msgstr "" +"Project-Id-Version: Whups 1.0-cvs\n" +"Report-Msgid-Bugs-To: dev@lists.horde.org\n" +"POT-Creation-Date: 2005-12-25 20:01+0200\n" +"PO-Revision-Date: 2006-01-15 11:00+0200\n" +"Last-Translator: Alexey Zakharov \n" +"Language-Team: Russian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CP1251\n" +"Content-Transfer-Encoding: 8bit\n" + +#: admin.php:603 +#, php-format +msgid "\"%s\" is no longer among those responsible for \"%s\"" +msgstr "" + +#: templates/menu.inc:5 +msgid "#Id" +msgstr "" + +#: lib/Driver.php:278 +#, php-format +msgid "%s (%s) wrote:" +msgstr "%s (%s) íàïèñàë:" + +#: admin.php:567 +#, php-format +msgid "%s added to those responsible for \"%s\"" +msgstr "" + +#: templates/reports/stats.inc:17 +#, php-format +msgid "%s days" +msgstr "%s äíåé" + +#: ticket/watch.php:58 +#, php-format +msgid "%s will be notified when this ticket is updated." +msgstr "%s áóäåò óâåäîìëåí ïðè îáíîâëåíèè ýòîãî çàïðîñà" + +#: ticket/watch.php:70 +#, php-format +msgid "%s will no longer receive updates for this ticket." +msgstr "%s áîëüøå íå áóäåò ïîëó÷àòü óâåäîìëåíèÿ ïî ýòîìó çàïðîñó" + +#: admin.php:81 +msgid "- Stage 1" +msgstr "- Øàã 1" + +#: admin.php:86 +msgid "- Stage 2" +msgstr "- Øàã 2" + +#: scripts/mail-filter.php:164 +msgid "--priority-name or --priority-id must specify a valid Priority." +msgstr "" + +#: scripts/mail-filter.php:158 +msgid "--queue-name or --queue-id must specify a valid Queue." +msgstr "" + +#: scripts/mail-filter.php:167 +msgid "--state-name or --state-id must specify a valid State." +msgstr "" + +#: scripts/mail-filter.php:161 +msgid "--type-name or --type-id must specify a valid Type." +msgstr "" + +#: templates/prevnext.inc:12 +#, fuzzy +msgid "<No summary" +msgstr "" + +#: view.php:55 +#, php-format +msgid "Access denied to %s" +msgstr "Äîñòóï çàïðåùåí äëÿ %s" + +#: lib/Admin.php:709 +msgid "Add Attribute" +msgstr "Äîáàâèòü àòòðèáóò" + +#: lib/Query.php:764 +msgid "Add Attribute Criterion" +msgstr "" + +#: query.php:205 +msgid "Add Criterion" +msgstr "Äîáàâèòü êðèòåðèé" + +#: lib/Query.php:590 +msgid "Add Group Criterion" +msgstr "Äîáàâèòü êðèòåðèè ãðóïïû" + +#: lib/Admin.php:533 +msgid "Add Priority" +msgstr "Äîáàâèòü ïðèîðèòåò" + +#: lib/Query.php:669 +msgid "Add Property Criterion" +msgstr "Äîáàâèòü êðèòåðèè ñâîéñòâà" + +#: lib/Admin.php:102 lib/Admin.php:103 +msgid "Add Queue" +msgstr "Äîáàâèòü Òåìó" + +#: lib/Admin.php:441 +msgid "Add State" +msgstr "Äîáàâèòü ñîñòîÿíèå" + +#: lib/Admin.php:14 lib/Admin.php:15 +msgid "Add Subject" +msgstr "Äîáàâèòü çàãëàâèå" + +#: lib/Query.php:625 +msgid "Add Text Criterion" +msgstr "Äîáàâèòü êðèòåðèè òåêñòà" + +#: lib/Admin.php:298 lib/Admin.php:299 +msgid "Add Type" +msgstr "Äîáàâèòü òèï" + +#: admin.php:81 admin.php:86 +#, php-format +msgid "Add Type %s" +msgstr "Äîáàâèòü òèï %s" + +#: lib/Query.php:537 +msgid "Add User Criterion" +msgstr "Äîáàâèòü êðèòåðèè ïîëüçîâàòåëÿ" + +#: lib/Admin.php:229 +msgid "Add Users" +msgstr "Äîáàâèòü ïîëüçîâàòåëåé" + +#: lib/Admin.php:621 +msgid "Add Version" +msgstr "Äîáàâèòü âåðñèþ" + +# fuzzy +#: ticket/watch.php:47 +msgid "Add Watcher" +msgstr "Äîáàâèòü" + +#: ticket/create.php:154 +#, php-format +msgid "Adding your ticket failed: %s." +msgstr "" + +#: admin.php:54 lib/api.php:694 +msgid "Administration" +msgstr "Àäìèíèñòðèðîâàíèå" + +# fuzzy +#: templates/queryrenderer.inc:90 lib/Query.php:518 +msgid "And" +msgstr "È" + +#: search.php:39 search.php:103 search.php:105 search.php:120 search.php:136 +#: search.php:138 lib/Query.php:675 lib/Query.php:683 lib/Query.php:688 +#: lib/Query.php:695 lib/Query.php:700 +msgid "Any" +msgstr "- Íå âàæíî -" + +# fuzzy +#: ticket/update.php:75 ticket/people.php:90 ticket/type.php:45 +#: ticket/comment.php:41 ticket/queue.php:50 +msgid "Any Group" +msgstr "Ëþáûå ãðóïïû" + +#: config/prefs.php.dist:47 +msgid "Ascending" +msgstr "Ïî âîçðîñòàíèþ" + +#: lib/api.php:709 +#, fuzzy +msgid "Assign" +msgstr " ðàáîòå" + +#: ticket/people.php:128 +msgid "Assign Ticket Succeeded" +msgstr "" + +#: lib/Whups.php:473 lib/Ticket.php:601 lib/Driver.php:142 +#: config/prefs.php.dist:36 +msgid "Assigned" +msgstr " ðàáîòå" + +#: templates/comment.inc:66 +#, php-format +msgid "Assigned to %s" +msgstr "" + +#: admin.php:955 +msgid "Associations updated successfully." +msgstr "" + +#: ticket/update.php:64 ticket/comment.php:29 lib/Create.php:124 +msgid "Attachment" +msgstr "Âëîæåíèå" + +#: ticket/deleteAttachment.php:29 +#, php-format +msgid "Attachment %s deleted." +msgstr "Âëîæåíèå %s óäàëåíî" + +#: lib/Ticket.php:388 +#, php-format +msgid "Attachment %s not found." +msgstr "Âëîæåíèå %s íå íàéäåíî" + +#: lib/Ticket.php:603 +msgid "Attachments" +msgstr "Âëîæåíèÿ" + +#: query.php:139 +msgid "Attribute Criteria" +msgstr "Àòòðèáóòû" + +# fuzzy +#: lib/Admin.php:713 lib/Admin.php:759 lib/Admin.php:782 +msgid "Attribute Description" +msgstr "Îïèñàíèå" + +#: lib/Admin.php:712 lib/Admin.php:737 lib/Admin.php:756 lib/Admin.php:779 +msgid "Attribute Name" +msgstr "Àòòðèáóò" + +#: lib/Admin.php:370 +msgid "Attributes for this Type" +msgstr "Àòòðèáóòû äëÿ ýòîãî Òèïà" + +#: config/prefs.php.dist:118 +msgid "Autolink to other tickets in comments?" +msgstr "Àâòîìàòè÷åñêèå ññûëêè íà äðóãèå çàïðîñû â êîìåíòàðèÿõ" + +#: lib/Reports.php:12 +msgid "Average days to close by Owner" +msgstr "Ñðåäíåå âðåìÿ ðåøåíèÿ ïî Îòâåòñòâåííûì" + +#: lib/Reports.php:14 +msgid "Average days to close by Queue" +msgstr "Ñðåäíåå âðåìÿ ðåøåíèÿ ïî Òåìå" + +#: lib/Reports.php:13 +msgid "Average days to close by Requester" +msgstr "Ñðåäíåå âðåìÿ ðåøåíèÿ ïî Çàïðîñèâøåìó" + +#: lib/Reports.php:19 +msgid "Average time a ticket is unresolved" +msgstr "Ñðåäíåå âðåìÿ ðåøåíèÿ çàïðîñà" + +#: lib/Query.php:523 +msgid "Branch Type" +msgstr "" + +#: lib/Query.php:56 +msgid "Case Insensitive Substring" +msgstr "÷àñòè÷íîå áåç ó÷åòà ðåãèñòðà" + +#: templates/queryrenderer.inc:27 +#, fuzzy +msgid "Change" +msgstr "Îòìåíèòü èçìåíåíèÿ\n" + +#: config/prefs.php.dist:11 +msgid "Change display options such as how search results are sorted." +msgstr "" +"Èçìåíèòü íàñòðîéêè îòîáðàæåíèÿ, íàïðèìåð ïîðÿäîê ñîðòèðîâêè ðåçóëüòàòîâ " +"ïîèñêà" + +#: config/prefs.php.dist:18 +msgid "Change options for email notifications of ticket activity." +msgstr "Èçìåíèòü íàñòðîéêè ðàññûëêè óâåäîìëåíèé ïî ýëåêòðîííîé ïî÷òå" + +#: query.php:142 +msgid "Choose Action:" +msgstr "Äåéñòâèå:" + +#: lib/Query.php:161 +msgid "Choose New Query instead of deleting the root node." +msgstr "" + +#: lib/Create.php:33 lib/Create.php:67 +msgid "Choose:" +msgstr "Âûáîð:" + +#: config/prefs.php.dist:128 +msgid "Chronological (oldest first)" +msgstr " õðîíîëîãè÷åñêîì ïîðÿäêå" + +#: templates/savedsearches.inc:27 +msgid "Clear All Searches" +msgstr "Î÷èñòèòü âñå ïîèñêîâûå çàïðîñû" + +#: lib/Admin.php:421 +msgid "Clone" +msgstr "Êëîíèðîâàòü" + +#: lib/Admin.php:427 +msgid "Clone Description" +msgstr "Êëîíèðîâàòü îïèñàíèå:" + +#: admin.php:120 lib/Admin.php:313 +msgid "Clone Type" +msgstr "Êëîíèðîâàòü òèï" + +#: config/templates.php.dist:43 +msgid "Comma Separated Values (CSV file)" +msgstr "CSV-ôàéë" + +#: templates/queryrenderer.inc:101 templates/comment.inc:90 +#: templates/comment.inc:121 ticket/update.php:65 ticket/people.php:78 +#: ticket/type.php:35 ticket/comment.php:28 ticket/queue.php:38 +#: lib/Whups.php:193 +msgid "Comment" +msgstr "Êîììåíòàðèé" + +#: ticket/comment.php:94 +msgid "Comment added" +msgstr "Êîììåíòàðèé äîáàâëåí" + +#: ticket/comment.php:100 +#, php-format +msgid "Comment on %s" +msgstr "Êîììåíòàðèé äëÿ %s" + +#: templates/queryrenderer.inc:100 +msgid "Commentor" +msgstr "Êîììåíòàòîð" + +#: lib/Admin.php:425 +#, php-format +msgid "Copy of %s" +msgstr "" + +#: lib/MIME/Viewer/zip.php:54 +msgid "Could not extract the requested file from the Zip archive." +msgstr "" + +#: lib/Query.php:595 +msgid "Could not find any groups." +msgstr "Íåò ãðóïï" + +#: lib/Mail.php:86 +#, fuzzy, php-format +msgid "Could not find ticket \"%s\"." +msgstr "Íå ìîãó îòêðûòü ìîäóëü Maintenance_Task %s" + +# fuzzy +#: lib/Admin.php:364 +msgid "Create Default Priorities" +msgstr "Ñîçäàòü ïðèîðèòåòû ïî óìîë÷àíèþ" + +#: lib/Admin.php:354 +msgid "Create Default States" +msgstr "Ñîçäàòü ñîñòîÿíèÿ ïî óìîë÷àíèþ" + +#: config/prefs.php.dist:60 +msgid "Create Ticket" +msgstr "Ñîçäàòü çàïðîñ" + +#: lib/Create.php:23 +msgid "Create Ticket - Step 1" +msgstr "Ñîçäàíèå çàïðîñà - Øàã 1" + +#: lib/Create.php:58 +msgid "Create Ticket - Step 2" +msgstr "Ñîçäàíèå çàïðîñà - Øàã 2" + +#: lib/Create.php:98 +msgid "Create Ticket - Step 3" +msgstr "Ñîçäàíèå çàïðîñà - Øàã 3" + +#: lib/Create.php:142 +msgid "Create Ticket - Step 4" +msgstr "Ñîçäàíèå çàïðîñà - Øàã 4" + +#: lib/Whups.php:472 lib/Ticket.php:600 config/prefs.php.dist:35 +msgid "Created" +msgstr "Ñîçäàíî" + +#: lib/Ticket.php:471 lib/Ticket.php:486 +#, fuzzy +msgid "Created By" +msgstr "Ñîçäàíî" + +# fuzzy +#: query.php:195 query.php:212 +msgid "Current Query" +msgstr "Òåêóùàÿ Òåìà" + +#: templates/queryrenderer.inc:25 +msgid "Current Ticket Type" +msgstr "" + +#: lib/Ticket.php:531 +msgid "DO NOT REPLY TO THIS MESSAGE. THIS EMAIL ADDRESS IS NOT MONITORED." +msgstr "ÍÅ ÎÒÂÅ×ÀÉÒÅ ÍÀ ÝÒÎ ÑÎÎÁÙÅÍÈÅ. ÝÒÎÒ EMAIL ÀÄÐÅÑ ÍÅ ÏÐÎÑÌÀÒÐÈÂÀÅÒÑß." + +#: config/prefs.php.dist:91 +msgid "Date/Time format for search results" +msgstr "Ôîðìàò äàòû/âðåìåíè äëÿ ðåçóëüòàòîâ ïîèñêà" + +#: config/prefs.php.dist:38 +msgid "Default sorting criteria:" +msgstr "Ñîðòèðîâêà ïî óìîë÷àíèþ:" + +#: config/prefs.php.dist:49 +msgid "Default sorting direction:" +msgstr "Íàïðàâëåíèå ñîðòèðîâêè ïî óìîë÷àíèþ:" + +#: query.php:143 lib/Whups.php:202 +msgid "Delete" +msgstr "Óäàëèòü" + +#: lib/Whups.php:641 lib/Whups.php:642 +#, php-format +msgid "Delete %s" +msgstr "Óäàëèòü %s" + +#: ticket/delete.php:58 +#, php-format +msgid "Delete %s?" +msgstr "Óäàëèòü %s?" + +#: admin.php:847 lib/Admin.php:725 +msgid "Delete Attribute" +msgstr "Óäàëèòü àòðèáóò" + +#: lib/Admin.php:771 +msgid "Delete Attribute Confirmation" +msgstr "Ïîäòâåðæäåíèå óäàëåíèÿ àòðèáóòà" + +#: admin.php:485 lib/Admin.php:549 +msgid "Delete Priority" +msgstr "Óäàëèòü ïðèîðèòåò" + +#: lib/Admin.php:595 +msgid "Delete Priority Confirmation" +msgstr "Ïîäòâåðæäåíèå óäàëåíèÿ ïðèîðèòåòà" + +#: lib/Query.php:145 +msgid "Delete Query" +msgstr "Óäàëèòü çàïðîñ" + +#: lib/Query.php:882 +msgid "Delete Query?" +msgstr "Óäàëèòü çàïðîñ?" + +#: admin.php:268 lib/Admin.php:119 +msgid "Delete Queue" +msgstr "Óäàëèòü Òåìó" + +#: lib/Admin.php:204 +msgid "Delete Queue Confirmation" +msgstr "Ïîäòâåðæäåíèå óäàëåíèÿ Òåìû" + +#: templates/savedsearches.inc:45 templates/savedsearches.inc:46 +msgid "Delete Search" +msgstr "Óäàëèòü ïîèñê" + +#: admin.php:375 lib/Admin.php:458 +msgid "Delete State" +msgstr "Óäàëèòü ñîñòîÿíèå" + +#: lib/Admin.php:507 +msgid "Delete State Confirmation" +msgstr "Ïîäòâåðæäåíèå óäàëåíèÿ ñîñòîÿíèÿ" + +#: admin.php:646 lib/Admin.php:29 +msgid "Delete Subject" +msgstr "Óäàëèòü òåìó" + +#: lib/Admin.php:80 +msgid "Delete Subject Confirmation" +msgstr "Ïîäòâåðæäåíèå óäàëåíèÿ òåìû" + +#: admin.php:114 lib/Admin.php:313 +msgid "Delete Type" +msgstr "Óäàëèòü òèï" + +#: lib/Admin.php:384 +msgid "Delete Type Confirmation" +msgstr "Ïîäòâåðæäåíèå óäàëåíèÿ òèïà" + +#: admin.php:738 lib/Admin.php:637 +msgid "Delete Version" +msgstr "Óäàëèòü âåðñèþ" + +#: lib/Admin.php:683 +msgid "Delete Version Confirmation" +msgstr "Ïîäòâåðæäåíèå óäàëåíèÿ âåðñèè" + +#: lib/Ticket.php:476 lib/Ticket.php:522 +msgid "Deleted Attachment" +msgstr "Óäàëèòü âëîæåíèå" + +#: templates/comment.inc:62 +#, php-format +msgid "Deleted Attachment: %s" +msgstr "Óäàëèòü âëîæåíèå: %s" + +#: config/prefs.php.dist:48 +msgid "Descending" +msgstr "Ïî óáûâàíèþ" + +#: lib/Create.php:125 +msgid "Description" +msgstr "Îïèñàíèå:" + +# fuzzy +#: config/prefs.php.dist:10 +msgid "Display Options" +msgstr "Íàñòðîéêè îòîáðàæåíèÿ" + +#: lib/Whups.php:633 +msgid "Download" +msgstr "Ñêà÷àòü" + +#: query.php:144 +msgid "Edit" +msgstr "Ðåäàêòèðîâàíèå" + +#: lib/Admin.php:148 lib/Admin.php:338 +#, php-format +msgid "Edit %s" +msgstr "Ðåäàêòèðîâàíèå %s" + +#: admin.php:842 lib/Admin.php:725 lib/Admin.php:748 +msgid "Edit Attribute" +msgstr "Ðåäàêòèðîâàòü àòòðèáóò" + +#: lib/Admin.php:372 +msgid "Edit Attributes" +msgstr "Ðåäàêòèðîâàòü àòòðèáóòû" + +#: lib/Query.php:134 +msgid "Edit Permissions" +msgstr "Ðåäàêòèðîâàòü ïðàâà" + +#: lib/Admin.php:362 +msgid "Edit Priorities" +msgstr "Ðåäàêòèðîâàòü ïðèîðèòåòû" + +#: admin.php:480 lib/Admin.php:549 lib/Admin.php:572 +msgid "Edit Priority" +msgstr "Ðåäàêòèðîâàòü ïðèîðèòåò" + +#: lib/Query.php:126 +msgid "Edit Query" +msgstr "Ðåäàêòèðîâàòü" + +#: admin.php:262 lib/Admin.php:119 lib/Admin.php:122 +msgid "Edit Queue" +msgstr "Ðåäàêòèðîâàòü Òåìó" + +#: admin.php:32 lib/Admin.php:121 +msgid "Edit Queues" +msgstr "Ðåäàêòèðîâàòü Òåìû" + +#: admin.php:370 lib/Admin.php:458 lib/Admin.php:481 +msgid "Edit State" +msgstr "Ðåäàêòèðîâàòü ñîñòîÿíèå" + +#: lib/Admin.php:352 +msgid "Edit States" +msgstr "Ðåäàêòèðîâàòü ñîñòîÿíèÿ" + +#: admin.php:641 lib/Admin.php:29 lib/Admin.php:51 +msgid "Edit Subject" +msgstr "Ðåäàêòèðîâàòü çàãëàâèÿ" + +#: admin.php:34 +msgid "Edit Subjects" +msgstr "Ðåäàêòèðîâàòü çàãëàâèÿ" + +#: admin.php:108 lib/Admin.php:313 +msgid "Edit Type" +msgstr "Ðåäàêòèðîâàòü òèï" + +#: admin.php:33 +msgid "Edit Types" +msgstr "Ðåäàêòèðîâàòü òèïû" + +#: admin.php:733 lib/Admin.php:637 lib/Admin.php:660 +msgid "Edit Version" +msgstr "Ðåäàêòèðîâàòü âåðñèþ" + +#: lib/Admin.php:724 +msgid "Edit or Delete Attributes" +msgstr "Äîáàâëåíè èëè Óäàëåíèå Àòòðèáóò" + +#: lib/Admin.php:548 +msgid "Edit or Delete Priorities" +msgstr "Ðåäàêòèðîâàíèå èëè Óäàëåíèå Ïðèîðèòåòîâ" + +#: lib/Admin.php:118 +msgid "Edit or Delete Queues" +msgstr "Ðåäàêòèðîâàíèå èëè Óäàëåíèå Òåì" + +#: lib/Admin.php:457 +msgid "Edit or Delete States" +msgstr "Ðåäàêòèðîâàíèå èëè Óäàëåíèå Ñîñòîÿíèé" + +#: lib/Admin.php:28 +msgid "Edit or Delete Subjects" +msgstr "Ðåäàêòèðîâàíèå èëè Óäàëåíèå Çàãëàâèé" + +#: lib/Admin.php:312 +msgid "Edit or Delete Types" +msgstr "Ðåäàêòèðîâàíèå èëè Óäàëåíèå Òèïîâ" + +#: lib/Admin.php:636 +msgid "Edit or Delete Versions" +msgstr "Ðåäàêòèðîâàíèå èëè Óäàëåíèå Âåðñèé" + +#: lib/Admin.php:191 +msgid "Edit the permissions on this queue" +msgstr "Ðåäàêòèðîâàòü ïðàâà äëÿ ýòîé òåìû" + +#: lib/Admin.php:186 +msgid "Edit the users responsible for this queue" +msgstr "Ðåäàêòèðîâàòü ïîëüçîâàòåëåé îòâåòñâåííûõ çà ýòó òåìó" + +#: lib/Admin.php:165 +msgid "Edit the versions for this queue" +msgstr "Ðåäàêòèðîâàòü âåðñèè äëÿ ýòîé òåìû" + +# fuzzy +#: ticket/watch.php:23 +msgid "Email address to notify" +msgstr "Äîáàâèòü àäðåñ:" + +# fuzzy +#: ticket/watch.php:35 +msgid "Email address to remove" +msgstr "Èñêëþ÷èòü àäðåñ:" + +#: query.php:171 +#, php-format +msgid "Error: Unknown query form %s, defaulting to properties" +msgstr "" + +#: lib/Query.php:55 +msgid "Exact Match" +msgstr "Ïîëíîå" + +#: runquery.php:69 runquery.php:83 lib/Query.php:138 +msgid "Execute Query" +msgstr "Âûïîëíèòü" + +#: lib/Admin.php:809 +msgid "For tickets from these queues" +msgstr "Äëÿ Çàïðîñîâ ïî Òåìå" + +#: lib/Admin.php:813 +msgid "For tickets which are" +msgstr "Äëÿ Çàïðîñîâ, êîòîðûå" + +#: templates/menu.inc:5 lib/Block/summary.php:29 +msgid "Go" +msgstr "->" + +#: query.php:136 +msgid "Group Criteria" +msgstr "Ãðóïïû" + +# fuzzy +#: ticket/people.php:66 lib/Create.php:173 +#, fuzzy +msgid "Group Owners" +msgstr "Ãðóïïû" + +#: templates/queryrenderer.inc:98 lib/Query.php:596 lib/Query.php:598 +msgid "Groups" +msgstr "Ãðóïïû" + +#: lib/api.php:697 +#, fuzzy +msgid "Hidden Comments" +msgstr "Êîìïàíèÿ" + +#: ticket/index.php:43 lib/Whups.php:189 +msgid "History" +msgstr "Èñòîðèÿ" + +#: query.php:145 +#, fuzzy +msgid "Hoist" +msgstr "Íàñòðîéêè" + +#: templates/queryrenderer.inc:96 lib/Whups.php:464 lib/Query.php:671 +#: config/prefs.php.dist:28 +msgid "Id" +msgstr "" + +#: search.php:52 +msgid "" +"If you don't select any categories, no filtering will be done on ticket " +"category." +msgstr "" +"Åñëè âû íå âûáåðèòå íè îäíîãî ñîñòîÿíèÿ - Çàïðîñû íå áóäóò ôèëüòðîâàòüñÿ ïî " +"ñîñòîÿíèþ" + +#: search.php:55 +msgid "" +"If you don't select any types, no filtering will be done on ticket type." +msgstr "" +"Åñëè âû íå âûáåðèòå íè îäíîãî òèïà - Çàïðîñû íå áóäóò ôèëüòðîâàòüñÿ ïî òèïó" + +#: lib/Admin.php:816 +msgid "" +"If you select any tickets that do not have an owner, who should we send " +"email to?" +msgstr "" +"Ïðè âûáîðå Çàïðîñà, êîòîðîìó íå íàçíà÷åí âëàäåëåö - êîìó ïîëûëàòü e-mail?" + +# fuzzy +#: query.php:146 +msgid "Insert And" +msgstr "Äîáàâèòü È" + +#: lib/Query.php:515 +#, fuzzy +msgid "Insert Branch" +msgstr "Ñîîáùåíèå" + +# fuzzy +#: query.php:148 +msgid "Insert Not" +msgstr "Äîáàâèòü ÍÅ" + +# fuzzy +#: query.php:147 +msgid "Insert Or" +msgstr "Äîáàâèòü ÈËÈ" + +#: lib/Whups.php:160 +msgid "Invalid Ticket Id" +msgstr "Íåâåðíûé ID Çàïðîñà" + +#: lib/Admin.php:162 +msgid "Keep a set of versions for this queue?" +msgstr "Ïîääåðæêà ðàçíûõ âåðñèé äëÿ ýòîé òåìû?" + +#: templates/prevnext.inc:17 +#, fuzzy +msgid "Last>>" +msgstr "Ïîñëåäíèé" + +#: lib/Query.php:139 lib/Query.php:842 +msgid "Load Query" +msgstr "Çàãðóçèòü" + +#: config/prefs.php.dist:89 +msgid "MM/DD/YY" +msgstr "ÌÌ/ÄÄ/ÃÃ" + +#: config/prefs.php.dist:90 +msgid "MM/DD/YY HH:MM:SS" +msgstr "ÌÌ/ÄÄ/Ãà ××:ÌÌ:ÑÑ" + +#: lib/Admin.php:419 +#, php-format +msgid "Make a clone of %s" +msgstr "Ñäåëàòü êëîí %s" + +#: lib/Query.php:770 +#, fuzzy +msgid "Match" +msgstr "Ïîèñê" + +#: lib/Query.php:540 lib/Query.php:628 lib/Query.php:771 +msgid "Match Operator" +msgstr "Ñîâïàäåíèå" + +#: lib/Query.php:59 +msgid "Match Pattern" +msgstr "Ìàñêà" + +#: lib/Query.php:58 +msgid "Match Word" +msgstr "Ñëîâî" + +#: lib/Reports.php:20 +msgid "Maximum time a ticket is unresolved" +msgstr "Ìàêñèìàëüíîå âðåìÿ ðåøåíèÿ çàïðîñà" + +#: lib/Reports.php:21 +msgid "Minimum time a ticket is unresolved" +msgstr "Ìèíèìàëüíîå âðåìÿ ðåøåíèÿ çàïðîñà" + +#: config/prefs.php.dist:129 +msgid "Most recent first" +msgstr "Ñíà÷àëà ñâåæèå" + +#: ticket/queue.php:173 +#, php-format +msgid "Moved ticket %d to \"%s\"" +msgstr "" + +#: mybugs.php:65 +#, php-format +msgid "My %s" +msgstr "" + +#: mybugs.php:44 +msgid "My Assigned Tickets" +msgstr "Çàïðîñû ìíå" + +# fuzzy +#: mybugs.php:60 +msgid "My Open Requests" +msgstr "Çàïðîñû îò ìåíÿ" + +#: mybugs.php:83 search.php:191 lib/Block/myqueries.php:3 +#: lib/Block/myqueries.php:26 +msgid "My Queries" +msgstr "Ìîè çàïðîñû" + +#: mybugs.php:79 search.php:187 lib/Block/mysearches.php:3 +#: lib/Block/mysearches.php:24 +msgid "My QuickSearches" +msgstr "Áûñòðûé ïîèñê" + +#: config/prefs.php.dist:58 +msgid "My Tickets" +msgstr "Ìîè çàïðîñû" + +#: lib/Ticket.php:537 +#, php-format +msgid "NEW: %s" +msgstr "ÍÎÂÛÉ: %s" + +#: lib/Query.php:819 lib/Query.php:857 +msgid "Name" +msgstr "Èìÿ" + +#: lib/Admin.php:424 +msgid "Name of the cloned copy" +msgstr "Èìÿ êëîíèðîâàííîé êîïèè" + +#: lib/Driver.php:141 +msgid "New" +msgstr "Íîâûå" + +#: lib/Ticket.php:475 lib/Ticket.php:517 +msgid "New Attachment" +msgstr "Íîâîå âëîæåíèå" + +#: templates/comment.inc:55 templates/comment.inc:57 +#, php-format +msgid "New Attachment: %s" +msgstr "Íîâîå âëîæåíèå: %s" + +# fuzzy +#: lib/Query.php:124 lib/Block/myqueries.php:27 lib/Block/myqueries.php:28 +msgid "New Query" +msgstr "Íîâûé" + +#: ticket/queue.php:37 +msgid "New Queue" +msgstr "Íîâàÿ Òåìà" + +#: ticket/people.php:75 +msgid "New State" +msgstr "Íîâîå ñîñòîÿíèå" + +#: ticket/create.php:27 lib/Block/summary.php:28 +msgid "New Ticket" +msgstr "Äîáàâèòü" + +#: ticket/type.php:34 +msgid "New Type" +msgstr "" + +#: templates/prevnext.inc:16 +#, fuzzy +msgid "Next>" +msgstr "Äàëåå" + +#: ticket/delete.php:37 lib/Admin.php:90 lib/Admin.php:217 lib/Admin.php:405 +#: lib/Admin.php:521 lib/Admin.php:609 lib/Admin.php:697 lib/Admin.php:785 +#: lib/Query.php:884 +msgid "No" +msgstr "Íåò" + +#: clearsearch.php:34 +msgid "No searches cleared." +msgstr "" + +#: reports.php:17 +#, fuzzy +msgid "No stats available." +msgstr "Íåò äîñòóïíûõ íàñòðîåê." + +#: lib/Driver.php:319 +#, fuzzy, php-format +msgid "No such backend \"%s\" found" +msgstr "Àäðåñàò óâåäîìëåíèÿ %s íå íàéäåí." + +#: lib/Whups.php:504 +msgid "No tickets matched your search criteria." +msgstr "Íå íàéäåíî Çàïðîñîâ â ñîîòâåòñòâèè ñ óñëîâèÿìè ïîèñêà" + +#: lib/Block/summary.php:75 +msgid "No tickets to display" +msgstr "Íåò çàìå÷àíèé äëÿ îòîáðàæåíèÿ" + +#: lib/Reports.php:88 +#, fuzzy +msgid "None" +msgstr "Òåëåôîí" + +#: templates/queryrenderer.inc:92 lib/Query.php:520 +#, fuzzy +msgid "Not" +msgstr "Íåò" + +#: query.php:77 +#, fuzzy +msgid "Not yet implemented." +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Íîâîå ñîîáùåíèå" + +#: config/prefs.php.dist:17 +msgid "Notification Options" +msgstr "Íàñòðîéêè îïîâåùåíèÿ" + +#: config/prefs.php.dist:109 +msgid "Only notify me of ticket changes from other users" +msgstr "Îïîâåùàòü ìåíÿ òîëüêî ïðè èçìåíåíèè çàïðîñà äðóãèìè ïîëüçîâàòåëÿìè" + +#: lib/Reports.php:11 +msgid "Open Tickets by Owner" +msgstr "Îòóðûòûå çàïðîñû ïî Îòâåòñòâåííûì" + +#: lib/Reports.php:9 +msgid "Open Tickets by Priority" +msgstr "Îòêðûòûå çàïðîñû ïî Ïðèîðèòåòó" + +#: lib/Reports.php:6 +msgid "Open Tickets by Queue" +msgstr "Îòêðûòûå çàïðîñû ïî Òåìå" + +#: lib/Reports.php:10 +msgid "Open Tickets by Requester" +msgstr "Îòêðûòûå çàïðîñû ïî Çàïðîñèâøåìó" + +#: lib/Reports.php:7 +msgid "Open Tickets by State" +msgstr "Îòêðûòûå çàïðîñû ïî Ñîñòîÿíèþ" + +#: lib/Reports.php:8 +msgid "Open Tickets by Type" +msgstr "Îòêðûòûå çàïðîñû ïî Òèïó" + +#: templates/queryrenderer.inc:91 lib/Query.php:519 +msgid "Or" +msgstr "" + +# fuzzy +#: config/prefs.php.dist:9 config/prefs.php.dist:16 +msgid "Other Options" +msgstr "Íàñòðîéêè ïîëüçîâàòåëÿ" + +#: templates/queryrenderer.inc:97 ticket/people.php:60 ticket/people.php:72 +#: lib/Create.php:167 lib/Create.php:179 lib/Whups.php:471 lib/Ticket.php:474 +#: lib/Ticket.php:509 lib/Ticket.php:510 lib/Ticket.php:512 lib/Ticket.php:596 +msgid "Owners" +msgstr "Âëàäåëåö" + +#: lib/Whups.php:196 +#, fuzzy +msgid "People" +msgstr "Ñöåíàðèé" + +#: lib/Whups.php:641 +#, fuzzy, php-format +msgid "Permanently delete %s?" +msgstr "Íåâîçìîæíî ñîåäèíèòüñÿ ñ SQL ñåðâåðîì." + +#: ticket/update.php:22 ticket/people.php:21 ticket/type.php:17 +#: ticket/delete.php:17 ticket/queue.php:17 ticket/deleteAttachment.php:17 +#, fuzzy +msgid "Permission Denied" +msgstr "Íàñòðîéêè ïîëüçîâàòåëÿ" + +#: ticket/update.php:83 ticket/delete.php:44 +#, fuzzy +msgid "Permission Denied." +msgstr "Ñîîáùåíèå" + +#: runquery.php:35 query.php:29 lib/Query.php:894 +#, fuzzy, php-format +msgid "Permission denied." +msgstr "Íàñòðîéêè ïîëüçîâàòåëÿ" + +#: lib/Admin.php:360 lib/Admin.php:402 +msgid "Priorities for this Type" +msgstr "Ïðèîðèòåòû äëÿ ýòîãî òèïà:" + +#: templates/queryrenderer.inc:138 ticket/update.php:52 ticket/type.php:69 +#: ticket/queue.php:116 lib/Create.php:122 lib/Whups.php:468 +#: lib/Ticket.php:466 lib/Ticket.php:594 lib/Query.php:699 +#: config/prefs.php.dist:32 +msgid "Priority" +msgstr "Ïðèîðèòåò" + +#: templates/comment.inc:99 +#, php-format +msgid "Priority ⇒ %s" +msgstr "Ïðèîðèòåò ⇒ %s" + +# fuzzy +#: lib/Admin.php:537 lib/Admin.php:583 lib/Admin.php:606 +msgid "Priority Description" +msgstr "Îïèñàíèå" + +# fuzzy +# fuzzy +#: lib/Admin.php:536 lib/Admin.php:561 lib/Admin.php:580 lib/Admin.php:603 +msgid "Priority Name" +msgstr "Ïðèîðèòåò" + +#: query.php:134 +msgid "Property Criteria" +msgstr "Ñâîéñòâà" + +#: query.php:152 +msgid "Query Builder" +msgstr "" + +#: lib/Query.php:95 +#, fuzzy +msgid "Query Parameters" +msgstr "Èìÿ" + +#: runquery.php:77 +#, fuzzy +msgid "Query Results" +msgstr "Ñáðîñèòü" + +#: search.php:48 templates/queryrenderer.inc:107 lib/Whups.php:469 +#: lib/Ticket.php:463 lib/Ticket.php:575 lib/Ticket.php:579 lib/Query.php:682 +#: config/prefs.php.dist:33 +msgid "Queue" +msgstr "Òåìà" + +#: templates/comment.inc:107 +#, php-format +msgid "Queue ⇒ %s" +msgstr "Òåìà ⇒ %s" + +#: lib/Admin.php:106 lib/Admin.php:155 lib/Admin.php:214 +msgid "Queue Description" +msgstr "Îïèñàíèå Òåìû" + +#: lib/Admin.php:105 lib/Admin.php:134 lib/Admin.php:152 lib/Admin.php:211 +#: lib/Create.php:33 lib/Create.php:41 +msgid "Queue Name" +msgstr "Òåìà" + +#: ticket/queue.php:85 lib/Create.php:80 lib/Ticket.php:584 lib/Ticket.php:588 +msgid "Queue Version" +msgstr "Âåðñèÿ" + +#: admin.php:35 templates/admin/mtmatrix.inc:6 +msgid "Queue/Type Matrix" +msgstr "Òåìà/Òèï" + +#: search.php:139 +#, php-format +msgid "Queue: %s, Ticket: %s, Category: %s, Type: %s, Summary: %s" +msgstr "" + +#: lib/api.php:156 lib/api.php:700 +msgid "Queues" +msgstr "Òåìû" + +#: lib/Ticket.php:539 +#, php-format +msgid "RESOLVED: %s" +msgstr "ÂÛÏÎËÍÅÍÎ: %s" + +#: lib/Admin.php:786 +msgid "Really delete this attribute? This may cause data problems!" +msgstr "Äåéñòâèòåëüíî óäàëèòü ýòîò àòòðèáóò? Âîçìîæíû ïðîáëåìû ñ äàííûìè!" + +#: lib/Admin.php:610 +msgid "Really delete this priority? This may cause data problems!" +msgstr "Äåéñòâèòåëüíî óäàëèòü ýòîò ïðèîðèòåò? Âîçìîæíû ïðîáëåìû ñ äàííûìè!" + +#: lib/Query.php:885 +msgid "Really delete this query? This operation is not undoable." +msgstr "Äåéñòâèòåëüíî óäàëèòü ýòîò çàïðîñ? Âîçìîæíû ïðîáëåìû ñ äàííûìè!" + +#: lib/Admin.php:218 +msgid "Really delete this queue? This may cause data problems!" +msgstr "Äåéñòâèòåëüíî óäàëèòü ýòó òåìó? Âîçìîæíû ïðîáëåìû ñ äàííûìè!" + +#: lib/Admin.php:522 +msgid "Really delete this state? This may cause data problems!" +msgstr "Äåéñòâèòåëüíî óäàëèòü ýòî ñîñòîÿíèå? Âîçìîæíû ïðîáëåìû ñ äàííûìè!" + +#: lib/Admin.php:91 +msgid "Really delete this subject? This may cause data problems!" +msgstr "Äåéñòâèòåëüíî óäàëèòü ýòî çàãëàâèå? Âîçìîæíû ïðîáëåìû ñ äàííûìè!" + +#: ticket/delete.php:38 +msgid "" +"Really delete this ticket? It will NOT be archived, and will be gone forever." +msgstr "" + +#: lib/Admin.php:406 +msgid "Really delete this type? This may cause data problems!" +msgstr "" + +#: lib/Admin.php:698 +msgid "Really delete this version? This may cause data problems!" +msgstr "" + +#: search.php:169 +msgid "Refine Search" +msgstr "Ïîèñê" + +#: admin.php:922 +msgid "Reminders were sent." +msgstr "" + +# fuzzy +#: lib/Admin.php:267 +msgid "Remove User" +msgstr "Óäàëèòü" + +#: ticket/watch.php:48 +#, fuzzy +msgid "Remove Watcher" +msgstr "Óäàëèòü ïàðó" + +#: reports.php:22 +#, fuzzy +msgid "Reports" +msgstr "Èìïîðò" + +#: templates/queryrenderer.inc:99 lib/Ticket.php:599 +msgid "Requester" +msgstr "Äîáàâèë" + +#: lib/Whups.php:474 lib/Ticket.php:602 lib/Driver.php:143 +#: config/prefs.php.dist:37 +msgid "Resolved" +msgstr "Âûïîëíåíî" + +#: lib/Admin.php:269 +msgid "Responsible Users" +msgstr "" + +#: ticket/update.php:76 +msgid "Restrict Comment to:" +msgstr "" + +#: lib/Admin.php:170 +msgid "Restrict ticket subjects to a specified list?" +msgstr "Îãðàíè÷èòü çàãëàâèÿ çàïðîñîâ ñïèñêîì?" + +# fuzzy, php-format +#: templates/prevnext.inc:25 +#, fuzzy +msgid "Return to Search Results" +msgstr "Ðåçóëüòàò ïîèñêà" + +# #-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-# +# fuzzy +# fuzzy +#: templates/searchresults.inc:96 +msgid "Save" +msgstr "Ñîõðàíèòü" + +#: lib/Query.php:142 lib/Query.php:817 +msgid "Save Query" +msgstr "Çàïèñàòü" + +#: templates/searchresults.inc:90 +msgid "Save these results as: " +msgstr "Ñîõðàíèòü ðåçóëüòàò êàê:" + +#: lib/Query.php:774 +#, php-format +msgid "Search %s Attribute" +msgstr "" + +# fuzzy, php-format +# fuzzy +#: lib/Query.php:777 +msgid "Search Attribute" +msgstr "Ïîèñê àòòðèáóòà:" + +# fuzzy +#: lib/Query.php:543 lib/Query.php:630 +msgid "Search Comments" +msgstr "Èñêàòü â êîììåíòàðèÿõ" + +# fuzzy, php-format +# fuzzy +#: lib/Query.php:541 +msgid "Search Owners" +msgstr "Èñêàòü â Îòâåòñòâåííûõ" + +# fuzzy +#: lib/Query.php:542 +msgid "Search Requester" +msgstr "Èñêàòü â Çàïðîñèâøèõ" + +# fuzzy, php-format +#: search.php:164 +msgid "Search Results" +msgstr "Ðåçóëüòàò ïîèñêà" + +#: templates/prevnext.inc:21 +#, php-format +msgid "Search Results: %s of %s" +msgstr "Ðåçóëüòàò ïîèñêà: %s èç %s" + +# fuzzy +#: lib/Query.php:629 +msgid "Search Summary" +msgstr "Êðàòêîå îáîáùåíèå:" + +# fuzzy, php-format +#: search.php:64 search.php:180 config/prefs.php.dist:59 +msgid "Search Tickets" +msgstr "Ïîèñê" + +#: clearsearch.php:27 +msgid "Search cleared." +msgstr "" + +#: clearsearch.php:30 +msgid "Searches cleared." +msgstr "" + +# fuzzy +#: config/prefs.php.dist:61 +msgid "Select the view to display after login:" +msgstr "Ðåæèì ðàáîòû ïîñëå âõîäà â Çàïðîñû:" + +#: admin.php:36 lib/Admin.php:797 +msgid "Send Reminders" +msgstr "Îòïðàâëåíèå íàïîìèíàíèé" + +#: lib/Admin.php:808 +msgid "Send only for this list of ticket ids" +msgstr "Îòïðàâëÿòü òîëüêî äëÿ óêàçàííûõ çàïðîñîâ:" + +#: lib/Whups.php:200 +msgid "Set Queue" +msgstr "Çàäàòü Òåìó" + +#: ticket/queue.php:194 ticket/queue.php:203 ticket/queue.php:215 +msgid "Set Queue - Step 1" +msgstr "" + +#: ticket/queue.php:195 ticket/queue.php:204 +msgid "Set Queue - Step 2" +msgstr "" + +#: ticket/queue.php:205 +msgid "Set Queue - Step 3" +msgstr "" + +#: ticket/queue.php:181 +#, php-format +msgid "Set Queue for %s" +msgstr "" + +#: lib/Whups.php:201 +msgid "Set Type" +msgstr "" + +#: ticket/type.php:137 ticket/type.php:146 +msgid "Set Type - Step 1" +msgstr "" + +#: ticket/type.php:138 +msgid "Set Type - Step 2" +msgstr "" + +#: ticket/type.php:124 +#, php-format +msgid "Set Type for %s" +msgstr "" + +#: config/prefs.php.dist:100 +msgid "Show \"(X Days Ago)\" in Date field of search results?" +msgstr "Ïîêàçûâàòü (õ Äíåé íàçàä) â Äàòå ïðè ïîèñêå?" + +#: config/prefs.php.dist:127 +msgid "Show comments in chronological order, or most recent first?" +msgstr "Ïîêàçûâàòü êîììåíòàðèè â õðîíîëîãè÷åñêîì ïîðÿäêå, èëè ñíà÷àëà ñâåæèå?" + +#: config/prefs.php.dist:78 +msgid "Show ticket IDs in the summary view?" +msgstr "Ïîêàçûâàòü ID Çàïðîñà â Îáùåì îáçîðå?" + +#: config/prefs.php.dist:70 +msgid "Show tickets you have requested in the summary view?" +msgstr "Ïîêàçûâàòü Çàïðîñû îò Âàñ â Îáùåì îáçîðå?" + +#: config/templates.php.dist:16 +msgid "Simple HTML Report" +msgstr "Ïðîñòîé HTML îò÷åò" + +#: templates/searchresults.inc:115 templates/searchresults.inc:118 +#, fuzzy, php-format +msgid "Sort by %s" +msgstr "Èìïîðò" + +#: templates/queryrenderer.inc:130 ticket/update.php:49 ticket/type.php:68 +#: ticket/queue.php:115 lib/Whups.php:466 lib/Ticket.php:465 +#: lib/Ticket.php:593 lib/Query.php:694 config/prefs.php.dist:30 +msgid "State" +msgstr "Ñîñòîÿíèå" + +#: templates/comment.inc:95 +#, php-format +msgid "State ⇒ %s" +msgstr "Ñîñòîÿíèå ⇒ %s" + +# fuzzy +#: lib/Admin.php:446 lib/Admin.php:495 +msgid "State Category" +msgstr "Êàòåãîðèÿ" + +# fuzzy +#: lib/Admin.php:445 lib/Admin.php:492 lib/Admin.php:518 +msgid "State Description" +msgstr "Îïèñàíèå" + +# fuzzy +#: lib/Admin.php:444 lib/Admin.php:470 lib/Admin.php:489 lib/Admin.php:515 +msgid "State Name" +msgstr "Ñîñòîÿíèå" + +#: lib/Admin.php:350 lib/Admin.php:398 +msgid "States for this Type" +msgstr "Ñîñòîÿíèÿ äëÿ ýòîãî òèïà:" + +#: lib/Create.php:123 config/prefs.php.dist:29 +msgid "Subject" +msgstr "Çàãëàâèå" + +#: lib/Admin.php:17 lib/Admin.php:40 lib/Admin.php:65 lib/Admin.php:87 +msgid "Subject Name" +msgstr "Çàãëàâèå" + +#: lib/Admin.php:174 +msgid "Subjects associated with this Queue" +msgstr "Çàãëàâèÿ, äîïóñòèìûå â äàííîé Òåìå" + +# fuzzy +#: ticket/create.php:102 +msgid "Submit" +msgstr " ÎÊ " + +#: admin.php:161 +#, fuzzy, php-format +msgid "Successfully Cloned %s to %s." +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Ïðîáëåìà ïðè ïðîñìîòðå çàïðîøåííîãî ïèñüìà." + +#: ticket/type.php:115 +msgid "Successfully changed ticket type." +msgstr "" + +#: templates/queryrenderer.inc:102 ticket/update.php:46 ticket/delete.php:34 +#: lib/Whups.php:465 lib/Ticket.php:473 lib/Ticket.php:488 lib/Ticket.php:489 +#: lib/Ticket.php:491 lib/Ticket.php:573 +msgid "Summary" +msgstr "Ñâîäêà" + +#: templates/comment.inc:49 +#, php-format +msgid "Summary ⇒ %s" +msgstr "Ñâîäêà ⇒ %s" + +#: search.php:50 +msgid "Summary like" +msgstr "Ñâîäêà ñîäåðæèò òåêñò" + +#: templates/comment.inc:71 +#, php-format +msgid "Taken from %s" +msgstr "" + +# fuzzy +#: lib/Query.php:627 +msgid "Text" +msgstr "Òåêñò" + +#: query.php:138 +msgid "Text Criteria" +msgstr "Òåêñò" + +#: view.php:44 lib/Ticket.php:339 lib/Ticket.php:377 +msgid "The VFS backend needs to be configured to enable attachment uploads." +msgstr "" + +#: admin.php:811 +#, php-format +msgid "The attribute \"%s\" has been added to %s." +msgstr "" + +#: admin.php:893 +msgid "The attribute has been deleted." +msgstr "" + +#: admin.php:864 +msgid "The attribute has been modified." +msgstr "" + +#: admin.php:898 +#, fuzzy +msgid "The attribute was not deleted." +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Íîâîå ñîîáùåíèå" + +#: admin.php:449 +#, php-format +msgid "The priority \"%s\" has been added to %s." +msgstr "" + +#: admin.php:530 +msgid "The priority has been deleted." +msgstr "" + +#: admin.php:502 +msgid "The priority has been modified." +msgstr "" + +#: admin.php:535 +msgid "The priority was not deleted." +msgstr "" + +#: lib/Query.php:898 +#, php-format +msgid "The query \"%s\" couldn't be deleted: %s" +msgstr "" + +#: lib/Query.php:900 +#, php-format +msgid "The query \"%s\" has been deleted." +msgstr "" + +#: lib/Query.php:865 +#, php-format +msgid "The query couldn't be loaded:" +msgstr "" + +#: admin.php:240 +#, php-format +msgid "The queue \"%s\" has been created." +msgstr "" + +#: admin.php:318 +msgid "The queue has been deleted." +msgstr "" + +#: admin.php:290 +msgid "The queue has been modified." +msgstr "" + +#: admin.php:323 +msgid "The queue was not deleted." +msgstr "" + +#: lib/MIME/Viewer/zip.php:60 +msgid "The requested file does not exist in the Zip attachment." +msgstr "" + +#: data.php:24 +#, fuzzy +msgid "The requested template does not exist." +msgstr "Àäðåñàò óâåäîìëåíèÿ %s íå íàéäåí." + +#: admin.php:338 +#, php-format +msgid "The state \"%s\" has been added to %s." +msgstr "" + +#: admin.php:421 +msgid "The state has been deleted." +msgstr "" + +#: admin.php:392 +msgid "The state has been modified." +msgstr "" + +#: admin.php:426 +#, fuzzy +msgid "The state was not deleted." +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Íîâîå ñîîáùåíèå" + +#: admin.php:625 +#, php-format +msgid "The subject \"%s\" has been added." +msgstr "Çàãëàâèå %s áûëî äîáàâëåíî" + +#: admin.php:681 +msgid "The subject has been deleted." +msgstr "Çàãëàâèå áûëî óäàëåíî" + +#: admin.php:662 +msgid "The subject has been modified." +msgstr "Çàãëàâèå èçìåíåíî" + +#: admin.php:686 +#, fuzzy +msgid "The subject was not deleted." +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Íîâîå ñîîáùåíèå" + +#: ticket/delete.php:75 +#, fuzzy +msgid "The ticket was not deleted." +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Íîâîå ñîîáùåíèå" + +#: admin.php:179 +#, php-format +msgid "The type \"%s\" has been modified." +msgstr "" + +#: admin.php:221 +msgid "The type has been deleted." +msgstr "" + +#: admin.php:226 +#, fuzzy +msgid "The type was not deleted." +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Íîâîå ñîîáùåíèå" + +#: admin.php:701 +#, php-format +msgid "The version \"%s\" has been added to %s." +msgstr "" + +#: admin.php:783 +#, fuzzy +msgid "The version has been deleted." +msgstr "Âàøè íàñòðîéêè áûëè îáíîâëåíû." + +#: admin.php:755 +msgid "The version has been modified." +msgstr "" + +#: admin.php:788 +#, fuzzy +msgid "The version was not deleted." +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Íîâîå ñîîáùåíèå" + +#: lib/Admin.php:733 +msgid "There are no attribute types to edit" +msgstr "Íåò àòòðèáóòîâ" + +#: lib/Query.php:777 +msgid "There are no attributes defined for the current type" +msgstr "Íåò àòòðèáóòîâ, îïðåäåëåííûõ äëÿ äàííîãî òèïà" + +# fuzzy +#: lib/Admin.php:557 +msgid "There are no priorities to edit" +msgstr "Íåò ïðèîðèòåòîâ" + +# fuzzy +#: lib/Admin.php:805 +msgid "There are no queues available." +msgstr "Íåò äîñòóïíûõ òåì." + +#: lib/Admin.php:131 +msgid "There are no queues to edit" +msgstr "Íåò òåì" + +#: lib/Create.php:41 +msgid "There are no queues which you can create tickets in." +msgstr "Íåò òåì" + +#: search.php:42 +msgid "There are no queues which you can search." +msgstr "Íåò òåì" + +#: lib/Admin.php:466 +msgid "There are no states to edit" +msgstr "Íåò ñîñòîÿíèé" + +#: lib/Admin.php:37 +msgid "There are no subjects to edit" +msgstr "Íåò çàãëàâèé" + +#: lib/Create.php:64 +msgid "" +"There are no ticket types associated with this queue; until there are, you " +"cannot create any tickets in this queue." +msgstr "Íåò òåì" + +#: lib/Admin.php:321 +#, fuzzy +msgid "There are no types to edit" +msgstr "Íåò äîñòóïíûõ íàñòðîåê." + +#: lib/Admin.php:283 +msgid "There are no users responsible for this queue." +msgstr "Íåò îòâåòñòâåííûõ çà äàííóþ Òåìó" + +#: ticket/people.php:71 lib/Create.php:178 +msgid "There are no users to which this ticket can be assigned." +msgstr "Íåò ïîëüçîâàòåëåé çà êåì ìîæíî çàêðåïèòü ýòî çàìå÷àíèå" + +#: lib/Admin.php:645 +msgid "There are no versions to edit" +msgstr "Íåò âåðñèé äëÿ ðåäàêòèðîâàíèÿ" + +#: graph.php:30 +msgid "There is no data for this graph." +msgstr "Íåò äàííûõ äëÿ ýòîãî ãðàôèêà" + +#: lib/Reports.php:161 +msgid "There is no data for this report." +msgstr "Íåò äàííûõ äëÿ ýòîãî îò÷åòà" + +#: admin.php:569 +#, fuzzy, php-format +msgid "There was an error adding \"%s\" to the responsible list for \"%s\": %s" +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Ïðîáëåìà ïðè ïðîñìîòðå çàïðîøåííîãî ïèñüìà." + +#: admin.php:627 +#, fuzzy, php-format +msgid "There was an error adding the subject: %s." +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Ïðîáëåìà ïðè ïðîñìîòðå çàïðîøåííîãî ïèñüìà." + +#: admin.php:814 +#, fuzzy, php-format +msgid "There was an error creating the attribute: %s." +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Ïðîáëåìà ïðè ïðîñìîòðå çàïðîøåííîãî ïèñüìà." + +#: admin.php:451 +#, fuzzy, php-format +msgid "There was an error creating the priority: %s." +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Ïðîáëåìà ïðè ïðîñìîòðå çàïðîøåííîãî ïèñüìà." + +#: admin.php:248 +#, fuzzy, php-format +msgid "There was an error creating the queue: %s." +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Ïðîáëåìà ïðè ïðîñìîòðå çàïðîøåííîãî ïèñüìà." + +#: admin.php:340 +#, fuzzy, php-format +msgid "There was an error creating the state: %s." +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Ïðîáëåìà ïðè ïðîñìîòðå çàïðîøåííîãî ïèñüìà." + +#: admin.php:703 +#, fuzzy, php-format +msgid "There was an error creating the version: %s." +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Ïðîáëåìà ïðè ïðîñìîòðå çàïðîøåííîãî ïèñüìà." + +#: admin.php:895 +#, fuzzy, php-format +msgid "There was an error deleting the attribute: %s." +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Ïðîáëåìà ïðè ïðîñìîòðå çàïðîøåííîãî ïèñüìà." + +#: admin.php:532 +#, fuzzy, php-format +msgid "There was an error deleting the priority: %s." +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Ïðîáëåìà ïðè ïðîñìîòðå çàïðîøåííîãî ïèñüìà." + +#: admin.php:320 +#, fuzzy, php-format +msgid "There was an error deleting the queue: %s." +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Ïðîáëåìà ïðè ïðîñìîòðå çàïðîøåííîãî ïèñüìà." + +#: admin.php:423 +#, fuzzy, php-format +msgid "There was an error deleting the state: %s." +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Ïðîáëåìà ïðè ïðîñìîòðå çàïðîøåííîãî ïèñüìà." + +#: admin.php:683 +#, fuzzy, php-format +msgid "There was an error deleting the subject: %s." +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Ïðîáëåìà ïðè ïðîñìîòðå çàïðîøåííîãî ïèñüìà." + +#: ticket/delete.php:72 +#, fuzzy, php-format +msgid "There was an error deleting the ticket: %s" +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Ïðîáëåìà ïðè ïðîñìîòðå çàïðîøåííîãî ïèñüìà." + +#: admin.php:223 +#, fuzzy, php-format +msgid "There was an error deleting the type: %s." +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Ïðîáëåìà ïðè ïðîñìîòðå çàïðîøåííîãî ïèñüìà." + +#: admin.php:785 +#, fuzzy, php-format +msgid "There was an error deleting the version: %s." +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Ïðîáëåìà ïðè ïðîñìîòðå çàïðîøåííîãî ïèñüìà." + +#: admin.php:871 +#, fuzzy, php-format +msgid "There was an error editing the attribute: %s." +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Ïðîáëåìà ïðè ïðîñìîòðå çàïðîøåííîãî ïèñüìà." + +#: admin.php:507 +#, fuzzy, php-format +msgid "There was an error editing the priority: %s." +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Ïðîáëåìà ïðè ïðîñìîòðå çàïðîøåííîãî ïèñüìà." + +#: admin.php:304 +#, fuzzy, php-format +msgid "There was an error editing the queue: %s." +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Ïðîáëåìà ïðè ïðîñìîòðå çàïðîøåííîãî ïèñüìà." + +#: admin.php:397 +#, fuzzy, php-format +msgid "There was an error editing the state: %s." +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Ïðîáëåìà ïðè ïðîñìîòðå çàïðîøåííîãî ïèñüìà." + +#: admin.php:667 +#, fuzzy, php-format +msgid "There was an error editing the subject: %s." +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Ïðîáëåìà ïðè ïðîñìîòðå çàïðîøåííîãî ïèñüìà." + +#: admin.php:760 +#, fuzzy, php-format +msgid "There was an error editing the version: %s." +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Ïðîáëåìà ïðè ïðîñìîòðå çàïðîøåííîãî ïèñüìà." + +#: lib/Admin.php:243 +#, fuzzy, php-format +msgid "There was an error listing users: %s; %s" +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Ïðîáëåìà ïðè ïðîñìîòðå çàïðîøåííîãî ïèñüìà." + +#: mybugs.php:39 +#, fuzzy, php-format +msgid "There was an error listing your assigned tickets: %s" +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Ïðîáëåìà ïðè ïðîñìîòðå çàïðîøåííîãî ïèñüìà." + +#: mybugs.php:55 +#, fuzzy, php-format +msgid "There was an error listing your open requests: %s" +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Ïðîáëåìà ïðè ïðîñìîòðå çàïðîøåííîãî ïèñüìà." + +#: admin.php:177 +#, fuzzy, php-format +msgid "There was an error modifying the type: %s." +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Ïðîáëåìà ïðè ïðîñìîòðå çàïðîøåííîãî ïèñüìà." + +#: search.php:158 +#, fuzzy, php-format +msgid "There was an error performing your search: %s" +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Ïðîáëåìà ïðè ïðîñìîòðå çàïðîøåííîãî ïèñüìà." + +#: admin.php:605 +#, fuzzy, php-format +msgid "" +"There was an error removing \"%s\" from the responsible list for \"%s\": %s" +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Ïðîáëåìà ïðè ïðîñìîòðå çàïðîøåííîãî ïèñüìà." + +#: data.php:27 +msgid "This is not a search results template." +msgstr "" + +#: lib/Admin.php:57 +#, fuzzy +msgid "This is not a valid subject." +msgstr "Ýòî çíà÷åíèå äîëæíî áûòü ÷èñëîì." + +#: ticket/queue.php:80 lib/Create.php:75 +msgid "" +"This queue requires that you specify a version, but there are no versions " +"associated with it. Until versions are created for this queue, you will not " +"be able to create tickets." +msgstr "" + +#: lib/Ticket.php:485 +#, fuzzy +msgid "Ticket" +msgstr "Çàãîëîâîê" + +#: ticket/delete.php:68 +#, php-format +msgid "Ticket %d has been deleted." +msgstr "" + +#: lib/api.php:746 +#, fuzzy, php-format +msgid "Ticket %s - %s" +msgstr "Çàïðîñû" + +#: lib/Driver/sql.php:869 +#, fuzzy, php-format +msgid "Ticket %s was not found." +msgstr "Àäðåñàò óâåäîìëåíèÿ %s íå íàéäåí." + +#: search.php:49 +msgid "Ticket ID" +msgstr "ID çàìå÷àíèÿ" + +#: lib/Create.php:121 +msgid "Ticket State" +msgstr "Ñîñòîÿíèå" + +#: templates/reports/stats.inc:3 +msgid "Ticket Stats" +msgstr "Ñòàòèñòèêà ïî çàïðîñàì:" + +#: lib/Block/summary.php:3 +#, fuzzy +msgid "Ticket Summary" +msgstr "Ãëàâíàÿ" + +#: lib/Create.php:69 +msgid "Ticket Type" +msgstr "Òèï çàïðîñà" + +#: lib/Admin.php:158 +msgid "Ticket Types associated with this Queue" +msgstr "Òèïû çàïðîñîâ, äîïóñòèìûå ïî ýòîé Òåìå" + +#: lib/Ticket.php:481 +#, php-format +msgid "Ticket URL: %s\n" +msgstr "" + +#: ticket/update.php:137 +#, fuzzy +msgid "Ticket Updated" +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Áûñòðûé ñòàðò" + +#: lib/api.php:767 +msgid "Tickets" +msgstr "Çàïðîñû" + +#: lib/Block/summary.php:52 +msgid "Tickets assigned to you" +msgstr "" + +#: search.php:52 +msgid "Tickets which are" +msgstr "Ñîñòîÿíèå" + +#: lib/Block/summary.php:69 +msgid "Tickets you requested" +msgstr "" + +#: templates/queryrenderer.inc:121 ticket/queue.php:88 lib/Whups.php:467 +#: lib/Ticket.php:467 lib/Ticket.php:592 lib/Query.php:674 +#: config/prefs.php.dist:31 +msgid "Type" +msgstr "Òèï" + +#: templates/comment.inc:103 +#, php-format +msgid "Type ⇒ %s" +msgstr "Òèï ⇒ %s" + +#: lib/Admin.php:301 lib/Admin.php:345 lib/Admin.php:394 +msgid "Type Description" +msgstr "Îïèñàíèå òèïà" + +#: lib/Admin.php:300 lib/Admin.php:324 lib/Admin.php:342 lib/Admin.php:391 +msgid "Type Name" +msgstr "Èìÿ òèïà" + +#: search.php:55 +msgid "Types" +msgstr "Òèï" + +#: lib/Ticket.php:597 +msgid "Unassigned" +msgstr "Íå íàçíà÷åí" + +#: lib/Admin.php:816 +msgid "Unassigned tickets" +msgstr "Íåíàçíà÷åííûå Çàïðîñû" + +#: lib/Driver.php:140 +msgid "Unconfirmed" +msgstr "Íåïîäòâåðæäåíî" + +#: templates/queryrenderer.inc:148 templates/queryrenderer.inc:188 +#, php-format +msgid "Unknown node type %s" +msgstr "" + +#: templates/comment.inc:84 lib/Whups.php:191 lib/api.php:714 +#, fuzzy +msgid "Update" +msgstr "Îáíîâèòü" + +#: ticket/update.php:153 +#, fuzzy, php-format +msgid "Update %s" +msgstr "Ñîõðàíèòü íàñòðîéêè" + +#: templates/admin/mtmatrix.inc:29 +msgid "Update Associations" +msgstr "Îáíîâèòü àññîöèàöèè" + +#: ticket/people.php:134 +#, fuzzy, php-format +msgid "Update People for %s" +msgstr "Ñîõðàíèòü íàñòðîéêè" + +#: lib/Ticket.php:472 lib/Ticket.php:486 +#, fuzzy +msgid "Updated By" +msgstr "" +"#-#-#-#-# ru_RU.po (Horde v2.1) #-#-#-#-#\n" +"#-#-#-#-# ru_RU.po (IMP v3.1) #-#-#-#-#\n" +"Áûñòðûé ñòàðò" + +# fuzzy +#: lib/Admin.php:242 lib/Admin.php:252 lib/Admin.php:255 +msgid "User" +msgstr "Ïîëüçîâàòåëü" + +# fuzzy +#: query.php:135 +msgid "User Criteria" +msgstr "Ïîëüçîâàòåëü" + +# fuzzy +#: lib/Query.php:539 +msgid "User ID" +msgstr "ID ïîëüçîâàòåëÿ" + +#: lib/Admin.php:184 +msgid "Users responsible for this Queue" +msgstr "Îòâåòñòâåííûå ïî äàííîé òåìå" + +#: lib/Admin.php:287 +msgid "Users responsible for this queue" +msgstr "Îòâåòñòâåííûå ïî äàííîé òåìå" + +# fuzzy +#: templates/queryrenderer.inc:115 lib/Whups.php:470 lib/Ticket.php:464 +#: lib/Query.php:686 config/prefs.php.dist:34 +msgid "Version" +msgstr "Âåðñèÿ" + +# fuzzy +#: lib/Admin.php:625 lib/Admin.php:671 lib/Admin.php:694 +msgid "Version Description" +msgstr "Îïèñàíèå âåðñèè" + +# fuzzy +#: lib/Admin.php:624 lib/Admin.php:649 lib/Admin.php:668 lib/Admin.php:691 +msgid "Version Name" +msgstr "Íàçâàíèå âåðñèè" + +#: templates/reports/graphs.inc:13 +msgid "View Graphs" +msgstr "Ïðîñìîòð ãðàôèêîâ:" + +#: ticket/people.php:91 ticket/type.php:46 ticket/comment.php:42 +#: ticket/queue.php:51 +msgid "Viewable only by members of" +msgstr "" + +# fuzzy +#: lib/Whups.php:194 +msgid "Watch" +msgstr "Îòñëåæèâàíèå" + +# fuzzy, php-format +# fuzzy, php-format +#: ticket/watch.php:76 +msgid "Watchers for %s" +msgstr "Îòñëåæèâàþùèå çàïðîñ %s" + +#: config/prefs.php.dist:87 +msgid "Weekday Day Month" +msgstr "Äåíü íåäåëè, Äåíü, Ìåñÿö" + +#: config/prefs.php.dist:88 +msgid "Weekday Day Month HH:MM:SS TZ" +msgstr "Äåíü íåäåëè, Äåíü, Ìåñÿö, ××:ÌÌ:ÑÑ" + +#: ticket/delete.php:37 lib/Admin.php:90 lib/Admin.php:217 lib/Admin.php:405 +#: lib/Admin.php:521 lib/Admin.php:609 lib/Admin.php:697 lib/Admin.php:785 +#: lib/Query.php:884 +msgid "Yes" +msgstr "Äà" + +#: view.php:40 +msgid "You are not allowed to view this ticket." +msgstr "" + +#: lib/Driver/sql.php:872 +#, php-format +msgid "You do not have permission to access this ticket (%s)." +msgstr "" + +# fuzzy +#: lib/Query.php:854 +#, fuzzy +msgid "You have no saved queries." +msgstr "Âû âûøëè èç ñèñòåìû." + +#: lib/Whups.php:498 +msgid "You must select at least one queue to send reminders for." +msgstr "" + +# fuzzy +#: ticket/comment.php:26 lib/Create.php:35 +msgid "Your Email Address" +msgstr "Âàø Email:" + +#: ticket/create.php:157 +#, php-format +msgid "" +"Your ticket ID is %s. An appropriate person has been notified of this " +"request." +msgstr "" +"ID Âàøåãî çàìå÷àíèÿ %s. Îòâåòñâåííûå ëèöà áóäóò èçâåùåíû î Âàøåì çàïðîñå." + +#: lib/Whups.php:563 +msgid "_Admin" +msgstr "" + +#: lib/Whups.php:552 +#, php-format +msgid "_My %s" +msgstr "Ìîè %s" + +#: lib/Whups.php:555 +msgid "_New Ticket" +msgstr "Äîáàâèòü" + +#: lib/Whups.php:557 +msgid "_Query Builder" +msgstr "Ïîñòðîèòü îò÷åò" + +#: lib/Whups.php:559 +msgid "_Reports" +msgstr "Ãðàôèêè" + +#: lib/Whups.php:554 +msgid "_Search" +msgstr "Ïîèñê" + +#: templates/queryrenderer.inc:168 +msgid "contains (case insensitive) substring" +msgstr "" + +#: templates/queryrenderer.inc:172 +msgid "contains (case sensitive) substring" +msgstr "" + +#: templates/queryrenderer.inc:176 +#, fuzzy +msgid "contains the word" +msgstr "Ïàðîëü" + +#: scripts/mail-filter.php:176 +#, php-format +msgid "error processing message: %s" +msgstr "" + +#: lib/api.php:755 +msgid "estimated time" +msgstr "" + +#: templates/queryrenderer.inc:164 +msgid "is" +msgstr "" + +#: templates/queryrenderer.inc:156 +msgid "is greater than" +msgstr "" + +#: templates/queryrenderer.inc:160 +msgid "is less than" +msgstr "" + +#: templates/queryrenderer.inc:180 +msgid "matches the pattern" +msgstr "" diff --git a/whups/po/sl_SI.po b/whups/po/sl_SI.po new file mode 100644 index 000000000..8463ec0be --- /dev/null +++ b/whups/po/sl_SI.po @@ -0,0 +1,2078 @@ +# Slovenian translations for Whups packaga +# Slovenski prevod Whups paketa +# Copyright 2006-2009 The Horde Project +# This file is distributed under the same license as the horde package. +# Automatically generated, 2006. +# +msgid "" +msgstr "" +"Project-Id-Version: whups\n" +"Report-Msgid-Bugs-To: dev@lists.horde.org\n" +"POT-Creation-Date: 2006-07-25 11:30+0200\n" +"PO-Revision-Date: 2006-04-30 10:32+0100\n" +"Last-Translator: duck@obala.net\n" +"Language-Team: sl_SI \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: admin.php:603 +#, php-format +msgid "\"%s\" is no longer among those responsible for \"%s\"" +msgstr "\"%s\" ni več zadolžene za \"%s\"" + +#: templates/menu.inc:5 +msgid "#Id" +msgstr "#Id" + +#: lib/Driver.php:307 +#, php-format +msgid "%s (%s) wrote:" +msgstr "%s (%s) je napisal:" + +#: admin.php:567 +#, php-format +msgid "%s added to those responsible for \"%s\"" +msgstr "%s je bil dodan med zadolžene za \"%s\"" + +#: templates/reports/stats.inc:17 +#, php-format +msgid "%s days" +msgstr "%s dni" + +#: ticket/watch.php:58 +#, php-format +msgid "%s will be notified when this ticket is updated." +msgstr "%s bo opozoren ob spremembi te prijave." + +#: ticket/watch.php:70 +#, php-format +msgid "%s will no longer receive updates for this ticket." +msgstr "%s ne bo več dobilval opozoril ob spremembi te prijave." + +#: admin.php:81 +msgid "- Stage 1" +msgstr "- Korak 1" + +#: admin.php:86 +msgid "- Stage 2" +msgstr "- Korak 2" + +#: scripts/mail-filter.php:164 +msgid "--priority-name or --priority-id must specify a valid Priority." +msgstr "" + +#: scripts/mail-filter.php:158 +msgid "--queue-name or --queue-id must specify a valid Queue." +msgstr "" + +#: scripts/mail-filter.php:167 +msgid "--state-name or --state-id must specify a valid State." +msgstr "" + +#: scripts/mail-filter.php:161 +msgid "--type-name or --type-id must specify a valid Type." +msgstr "" + +#: templates/prevnext.inc:12 +msgid "<>" +msgstr "Zadnji>>" + +#: lib/Query.php:842 +msgid "Load Query" +msgstr "Prikliči poizvedbo" + +#: config/prefs.php.dist:97 +msgid "MM/DD/YY" +msgstr "MM/DD/LL" + +#: config/prefs.php.dist:98 +msgid "MM/DD/YY HH:MM:SS" +msgstr "MM/DD/LL UU:MM::SS" + +#: lib/Admin.php:419 +#, php-format +msgid "Make a clone of %s" +msgstr "Podvoji %s" + +#: lib/Query.php:770 +msgid "Match" +msgstr "Ustreza" + +#: lib/Query.php:540 lib/Query.php:628 lib/Query.php:771 +msgid "Match Operator" +msgstr "Operator primerjanja" + +#: lib/Query.php:59 +msgid "Match Pattern" +msgstr "Primerjaj z" + +#: lib/Query.php:58 +msgid "Match Word" +msgstr "Prejaj besedo" + +#: lib/Reports.php:20 +msgid "Maximum time a ticket is unresolved" +msgstr "Največ časa nereÅ¡enih prijav" + +#: lib/Reports.php:21 +msgid "Minimum time a ticket is unresolved" +msgstr "Najhitreje reÅ¡ena prijava" + +#: config/prefs.php.dist:128 +msgid "Most recent first" +msgstr "NajnovejÅ¡e na prvem mestu" + +#: ticket/queue.php:173 +#, fuzzy, php-format +msgid "Moved ticket %d to \"%s\"" +msgstr "Premaknjena %s v \"%s\"" + +#: mybugs.php:51 +#, php-format +msgid "My %s" +msgstr "Moje %s" + +#: mybugs_edit.php:30 +#, php-format +msgid "My %s :: Add Content" +msgstr "Moje %s :: Dodaj vsebino" + +#: search.php:192 lib/Block/myqueries.php:3 lib/Block/myqueries.php:26 +msgid "My Queries" +msgstr "Moje poizvedbe" + +#: search.php:187 lib/Block/mysearches.php:3 lib/Block/mysearches.php:24 +msgid "My QuickSearches" +msgstr "Moja hitra iskanja" + +#: lib/Block/myrequests.php:3 lib/Block/myrequests.php:24 +msgid "My Requests" +msgstr "Moji zahtevki" + +#: lib/Block/mytickets.php:3 lib/Block/mytickets.php:24 +#: config/prefs.php.dist:66 +msgid "My Tickets" +msgstr "Moje prijave" + +#: lib/Ticket.php:537 +#, fuzzy, php-format +msgid "NEW: %s" +msgstr "NOVA: %S" + +#: lib/Query.php:819 lib/Query.php:857 +msgid "Name" +msgstr "Ime" + +#: lib/Admin.php:424 +msgid "Name of the cloned copy" +msgstr "Ime podvojenega" + +#: lib/Query.php:124 +msgid "Ne_w Query" +msgstr "Nova poizvedba" + +#: lib/Driver.php:160 +msgid "New" +msgstr "Novo" + +#: lib/Ticket.php:475 lib/Ticket.php:517 +msgid "New Attachment" +msgstr "Nova priponka" + +#: templates/comment.inc:55 templates/comment.inc:57 +#, php-format +msgid "New Attachment: %s" +msgstr "Nova priponka: %s" + +#: lib/Block/myqueries.php:28 +msgid "New Query" +msgstr "Nova poizvedba" + +#: ticket/queue.php:37 +msgid "New Queue" +msgstr "Nova skupina" + +#: ticket/people.php:75 +msgid "New State" +msgstr "Nov status" + +#: ticket/create.php:27 lib/Block/summary.php:27 +msgid "New Ticket" +msgstr "Nova prijava" + +#: ticket/type.php:34 +msgid "New Type" +msgstr "Nov tip" + +#: templates/prevnext.inc:16 +msgid "Next>" +msgstr "Naslednji>" + +#: ticket/delete.php:37 lib/Admin.php:90 lib/Admin.php:217 lib/Admin.php:405 +#: lib/Admin.php:521 lib/Admin.php:609 lib/Admin.php:697 lib/Admin.php:785 +#: lib/Query.php:884 +msgid "No" +msgstr "Ne" + +#: lib/Block/myqueries.php:49 +msgid "No queries have been saved" +msgstr "Ni shranjenih poizvedb" + +#: clearsearch.php:34 +msgid "No searches cleared." +msgstr "Ni počiščenih iskanj" + +#: lib/Block/mysearches.php:43 +msgid "No searches have been saved" +msgstr "Ni shranjeih iskanj" + +#: reports.php:17 +msgid "No stats available." +msgstr "Ni razpoložljivih statusov" + +#: lib/Driver.php:348 +#, php-format +msgid "No such backend \"%s\" found" +msgstr "Ne najdem vira podatkov \"%s\"" + +#: lib/Block/mytickets.php:50 lib/Block/summary.php:87 +#: lib/Block/myrequests.php:51 +msgid "No summary" +msgstr "Ni povzetka" + +#: lib/Block/mytickets.php:60 lib/Block/myrequests.php:61 +msgid "No tickets are assigned to you." +msgstr "Ni vam dodljenih prijav" + +#: lib/Whups.php:529 +msgid "No tickets matched your search criteria." +msgstr "NI prijav ki bi ustrezale iskalnim pogojem." + +#: lib/Block/summary.php:74 +msgid "No tickets to display" +msgstr "Ni prijav za priz" + +#: lib/Reports.php:88 +msgid "None" +msgstr "Nič" + +#: templates/queryrenderer.inc:92 lib/Query.php:520 +msgid "Not" +msgstr "Ne" + +#: query.php:77 +msgid "Not yet implemented." +msgstr "Ni podprto" + +#: config/prefs.php.dist:17 +msgid "Notification Options" +msgstr "Nastavitve javljanja" + +#: config/prefs.php.dist:108 +msgid "Only notify me of ticket changes from other users" +msgstr "Javi mi samo če je prijava spremenjena od drugega uporabnika" + +#: lib/Reports.php:11 +msgid "Open Tickets by Owner" +msgstr "Odprte prijeva po uporabnika" + +#: lib/Reports.php:9 +msgid "Open Tickets by Priority" +msgstr "Odprte prijave po prioriteti" + +#: lib/Reports.php:6 +msgid "Open Tickets by Queue" +msgstr "Odprte prijave po skupini" + +#: lib/Reports.php:10 +msgid "Open Tickets by Requester" +msgstr "Odprte prijave po prijavitelju" + +#: lib/Reports.php:7 +msgid "Open Tickets by State" +msgstr "Odprte prijave statusu" + +#: lib/Reports.php:8 +msgid "Open Tickets by Type" +msgstr "Odprte prijave tipu" + +#: templates/queryrenderer.inc:91 lib/Query.php:519 +msgid "Or" +msgstr "Ali" + +#: config/prefs.php.dist:9 config/prefs.php.dist:16 +msgid "Other Options" +msgstr "Ostale nastavitve" + +#: templates/queryrenderer.inc:97 ticket/people.php:60 ticket/people.php:72 +#: lib/Whups.php:496 lib/Ticket.php:474 lib/Ticket.php:509 lib/Ticket.php:510 +#: lib/Ticket.php:512 lib/Ticket.php:596 lib/Forms/CreateTicket.php:187 +#: lib/Forms/CreateTicket.php:199 +msgid "Owners" +msgstr "Zadolženi" + +#: lib/Whups.php:668 +#, php-format +msgid "Permanently delete %s?" +msgstr "Dokončno izbriÅ¡em %s?" + +#: ticket/update.php:22 ticket/people.php:21 ticket/type.php:17 +#: ticket/delete.php:17 ticket/queue.php:17 ticket/deleteAttachment.php:17 +msgid "Permission Denied" +msgstr "Dostop zavrnjen" + +#: ticket/update.php:83 ticket/delete.php:44 +msgid "Permission Denied." +msgstr "Dostop zavrnjen." + +#: runquery.php:35 query.php:29 lib/Query.php:894 +#, php-format +msgid "Permission denied." +msgstr "Dostop zavrnjen." + +#: lib/Admin.php:360 lib/Admin.php:402 +msgid "Priorities for this Type" +msgstr "Prioritete za tip" + +#: templates/queryrenderer.inc:138 ticket/update.php:52 ticket/type.php:69 +#: ticket/queue.php:116 lib/Whups.php:493 lib/Ticket.php:466 +#: lib/Ticket.php:594 lib/Query.php:699 lib/Forms/CreateTicket.php:126 +#: config/prefs.php.dist:40 +msgid "Priority" +msgstr "Prioriteta" + +#: templates/comment.inc:99 +#, php-format +msgid "Priority ⇒ %s" +msgstr "Priorteta ⇒ %s" + +#: lib/Admin.php:537 lib/Admin.php:583 lib/Admin.php:606 +msgid "Priority Description" +msgstr "Opis prioritete" + +#: lib/Admin.php:536 lib/Admin.php:561 lib/Admin.php:580 lib/Admin.php:603 +msgid "Priority Name" +msgstr "Ime prioritete" + +#: query.php:153 +msgid "Query Builder" +msgstr "Tvorec poizvedb" + +#: lib/Query.php:95 +msgid "Query Parameters" +msgstr "Lastnosti poizvedve" + +#: runquery.php:77 +msgid "Query Results" +msgstr "Rezultati poizvedbe" + +#: search.php:48 templates/queryrenderer.inc:107 lib/Whups.php:494 +#: lib/Ticket.php:463 lib/Ticket.php:575 lib/Ticket.php:579 lib/Query.php:682 +#: config/prefs.php.dist:41 +msgid "Queue" +msgstr "Skupina" + +#: templates/comment.inc:107 +#, php-format +msgid "Queue ⇒ %s" +msgstr "Skupina ⇒ %s" + +#: lib/Admin.php:106 lib/Admin.php:155 lib/Admin.php:214 +msgid "Queue Description" +msgstr "Odpis skupine" + +#: lib/Admin.php:105 lib/Admin.php:134 lib/Admin.php:152 lib/Admin.php:211 +#: lib/Forms/CreateTicket.php:27 lib/Forms/CreateTicket.php:37 +msgid "Queue Name" +msgstr "Ime skupine" + +#: ticket/queue.php:85 lib/Ticket.php:584 lib/Ticket.php:588 +#: lib/Forms/CreateTicket.php:77 +msgid "Queue Version" +msgstr "Verzije skupine" + +#: admin.php:35 +msgid "Queue/Type Matri_x" +msgstr "Matrica Skupin/Tipov" + +#: templates/admin/mtmatrix.inc:6 +msgid "Queue/Type Matrix" +msgstr "Matrica Skupin/Tipov" + +#: search.php:139 +#, php-format +msgid "Queue: %s, Ticket: %s, Category: %s, Type: %s, Summary: %s" +msgstr "Skupina: %s, Prijava: %s, Kategorija: %s, Tip: %s, Povzetek: %s" + +#: lib/api.php:156 lib/api.php:700 +msgid "Queues" +msgstr "Skupine" + +#: lib/Ticket.php:539 +#, fuzzy, php-format +msgid "RESOLVED: %s" +msgstr "REÅ ENA: %S" + +#: lib/Admin.php:786 +msgid "Really delete this attribute? This may cause data problems!" +msgstr "" +"Resnično želite izbrisati to lastnost? Lahko povzroči probleme v podatkih." + +#: lib/Admin.php:610 +msgid "Really delete this priority? This may cause data problems!" +msgstr "" +"Resnično želite izbrisati to prioriteto? Lahko povzroči probleme v podatkih." + +#: lib/Query.php:885 +msgid "Really delete this query? This operation is not undoable." +msgstr "" +"Resnično želite izbrisati to poizvedbo? Lahko povzroči probleme v podatkih." + +#: lib/Admin.php:218 +msgid "Really delete this queue? This may cause data problems!" +msgstr "" +"Resnično želite izbrisati to skupino? Lahko povzroči probleme v podatkih." + +#: lib/Admin.php:522 +msgid "Really delete this state? This may cause data problems!" +msgstr "" +"Resnično želite izbrisati ta status? Lahko povzroči probleme v podatkih." + +#: lib/Admin.php:91 +msgid "Really delete this subject? This may cause data problems!" +msgstr "" +"Resnično želite izbrisati ta postavko? Lahko povzroči probleme v podatkih." + +#: ticket/delete.php:38 +msgid "" +"Really delete this ticket? It will NOT be archived, and will be gone forever." +msgstr "" +"Resnično želite izrisati to prijavo? Podatki bodo v celoti odstranjenih za " +"vedno." + +#: lib/Admin.php:406 +msgid "Really delete this type? This may cause data problems!" +msgstr "Resnično želite izbrisati ta tip? Lahko povzroči probleme v podatkih." + +#: lib/Admin.php:698 +msgid "Really delete this version? This may cause data problems!" +msgstr "" +"Resnično želite izbrisati to verzijo? Lahko povzroči probleme v podatkih." + +#: search.php:169 +msgid "Refine Search" +msgstr "Bolj točno iskanje" + +#: admin.php:922 +msgid "Reminders were sent." +msgstr "Opomniki so bili poslani." + +#: lib/Admin.php:267 +msgid "Remove User" +msgstr "Odstrani uproabnika" + +#: ticket/watch.php:48 +msgid "Remove Watcher" +msgstr "Odstrani sleditelja" + +#: reports.php:22 +msgid "Reports" +msgstr "Poročila" + +#: templates/queryrenderer.inc:99 lib/Ticket.php:599 +msgid "Requester" +msgstr "Prijavitelj" + +#: lib/Whups.php:499 lib/Ticket.php:602 lib/Driver.php:162 +#: config/prefs.php.dist:45 +msgid "Resolved" +msgstr "ReÅ¡ena" + +#: lib/Admin.php:269 +msgid "Responsible Users" +msgstr "Odgovorni uporabniki" + +#: ticket/update.php:76 +msgid "Restrict Comment to:" +msgstr "Omeji komentarje na:" + +#: lib/Admin.php:170 +msgid "Restrict ticket subjects to a specified list?" +msgstr "Omeji prijave postavk na določen spisek?" + +#: templates/prevnext.inc:25 +msgid "Return to Search Results" +msgstr "Vrni se na rezultate iskanja" + +#: lib/Whups.php:219 +msgid "S_et Queue" +msgstr "Določi skupino" + +#: lib/Query.php:142 +msgid "Sa_ve Query" +msgstr "Shrani poizvedbo" + +#: templates/searchresults.inc:94 +msgid "Save" +msgstr "Shrani" + +#: lib/Query.php:817 +msgid "Save Query" +msgstr "Shrani poizvedbo" + +#: templates/searchresults.inc:88 +msgid "Save these results as: " +msgstr "Shrani rezultate kot: " + +#: lib/Query.php:774 +#, fuzzy, php-format +msgid "Search %s Attribute" +msgstr "Išči &s lastnost" + +#: lib/Query.php:777 +msgid "Search Attribute" +msgstr "Išči lastnost" + +#: lib/Query.php:543 lib/Query.php:630 +msgid "Search Comments" +msgstr "Išči komentar" + +#: lib/Query.php:541 +msgid "Search Owners" +msgstr "Išči lastnike" + +#: lib/Query.php:542 +msgid "Search Requester" +msgstr "Išči prijavitelja" + +#: search.php:164 +msgid "Search Results" +msgstr "Rezltati iskanja" + +#: templates/prevnext.inc:21 +#, php-format +msgid "Search Results: %s of %s" +msgstr "Rezltati iskanja: %s of %s" + +#: lib/Query.php:629 +msgid "Search Summary" +msgstr "Povzetek iskanja" + +#: search.php:64 search.php:180 config/prefs.php.dist:67 +msgid "Search Tickets" +msgstr "Išči prijave" + +#: clearsearch.php:27 +msgid "Search cleared." +msgstr "Iskanje počiščeno." + +#: clearsearch.php:30 +msgid "Searches cleared." +msgstr "Iskanja počiščena." + +#: config/prefs.php.dist:69 +msgid "Select the view to display after login:" +msgstr "Izberi prgled ob prijavi:" + +#: admin.php:36 +msgid "Sen_d Reminders" +msgstr "PoÅ¡lji opomnike" + +#: lib/Admin.php:797 +msgid "Send Reminders" +msgstr "PoÅ¡lji opomnike" + +#: lib/Admin.php:808 +msgid "Send only for this list of ticket ids" +msgstr "PoÅ¡lji opomnike samo za prijave Å¡tevilka (id):" + +#: ticket/queue.php:194 ticket/queue.php:203 ticket/queue.php:215 +msgid "Set Queue - Step 1" +msgstr "Nastavi skupino - Korak 1" + +#: ticket/queue.php:195 ticket/queue.php:204 +msgid "Set Queue - Step 2" +msgstr "Nastavi skupino - Korak 2" + +#: ticket/queue.php:205 +msgid "Set Queue - Step 3" +msgstr "Nastavi skupino - Korak 3" + +#: ticket/queue.php:181 +#, php-format +msgid "Set Queue for %s" +msgstr "Nastavi skupino za %s" + +#: ticket/type.php:137 ticket/type.php:146 +msgid "Set Type - Step 1" +msgstr "Nastavi tip - Korak 1" + +#: ticket/type.php:138 +msgid "Set Type - Step 2" +msgstr "Nastavi tip - Korak 2" + +#: ticket/type.php:124 +#, php-format +msgid "Set Type for %s" +msgstr "Nastavi tipe za %s" + +#: lib/Whups.php:220 +msgid "Set _Type" +msgstr "Nastavi tip" + +#: config/prefs.php.dist:126 +msgid "Show comments in chronological order, or most recent first?" +msgstr "" +"Prikaž komentarje v kronoloÅ¡kem vrsnem redu ali najnovejÅ¡i naj bodo prvi?" + +#: config/prefs.php.dist:86 +msgid "Show ticket IDs in the summary view?" +msgstr "Prikaži IDje prijav v pregledu povzetkov?" + +#: config/prefs.php.dist:78 +msgid "Show tickets you have requested in the summary view?" +msgstr "Prikaži svoje prijave v povzetku?" + +#: config/templates.php.dist:16 +msgid "Simple HTML Report" +msgstr "Enostaveno HTML poročilo" + +#: templates/searchresults.inc:113 templates/searchresults.inc:116 +#, php-format +msgid "Sort by %s" +msgstr "Razvrsti po %s" + +#: lib/Forms/CreateTicket.php:121 lib/Forms/CreateTicket.php:143 +#: lib/Forms/AddComment.php:20 lib/Forms/AddComment.php:51 +msgid "Spam protection" +msgstr "Spam Zaščita" + +#: templates/queryrenderer.inc:130 ticket/update.php:49 ticket/type.php:68 +#: ticket/queue.php:115 lib/Whups.php:491 lib/Ticket.php:465 +#: lib/Ticket.php:593 lib/Query.php:694 config/prefs.php.dist:38 +msgid "State" +msgstr "Status" + +#: templates/comment.inc:95 +#, php-format +msgid "State ⇒ %s" +msgstr "Status ⇒ %s" + +#: lib/Admin.php:446 lib/Admin.php:495 +msgid "State Category" +msgstr "Kategorija statusa" + +#: lib/Admin.php:445 lib/Admin.php:492 lib/Admin.php:518 +msgid "State Description" +msgstr "Opis statusa" + +#: lib/Admin.php:444 lib/Admin.php:470 lib/Admin.php:489 lib/Admin.php:515 +msgid "State Name" +msgstr "Ime statusa" + +#: lib/Admin.php:350 lib/Admin.php:398 +msgid "States for this Type" +msgstr "Statusi za tip" + +#: lib/Forms/CreateTicket.php:127 config/prefs.php.dist:37 +msgid "Subject" +msgstr "Naslov" + +#: lib/Admin.php:17 lib/Admin.php:40 lib/Admin.php:65 lib/Admin.php:87 +msgid "Subject Name" +msgstr "Ime postavke" + +#: lib/Admin.php:174 +msgid "Subjects associated with this Queue" +msgstr "Postavka povezana k tej skupini" + +#: ticket/create.php:102 +msgid "Submit" +msgstr "PoÅ¡lji" + +#: admin.php:161 +#, php-format +msgid "Successfully Cloned %s to %s." +msgstr "UspeÅ¡no podvojen %s v %s." + +#: ticket/type.php:115 +msgid "Successfully changed ticket type." +msgstr "UspeÅ¡no spremenjen tip prijave" + +#: templates/queryrenderer.inc:102 ticket/update.php:46 ticket/delete.php:34 +#: lib/Whups.php:490 lib/Ticket.php:473 lib/Ticket.php:488 lib/Ticket.php:489 +#: lib/Ticket.php:491 lib/Ticket.php:573 +msgid "Summary" +msgstr "Povzetek" + +#: templates/comment.inc:49 +#, php-format +msgid "Summary ⇒ %s" +msgstr "Povzetek ⇒ %s" + +#: search.php:50 +msgid "Summary like" +msgstr "Povzetek podoben" + +#: templates/comment.inc:71 +#, php-format +msgid "Taken from %s" +msgstr "Vzet iz %s" + +#: lib/Query.php:627 +msgid "Text" +msgstr "Besedilo" + +#: view.php:44 lib/Ticket.php:339 lib/Ticket.php:377 +msgid "The VFS backend needs to be configured to enable attachment uploads." +msgstr "VFS vir podatkov mora biti nastavljen če želite uporabljati priponke" + +#: admin.php:811 +#, php-format +msgid "The attribute \"%s\" has been added to %s." +msgstr "Lastnost \"%s\" je bila dodana k %s" + +#: admin.php:893 +msgid "The attribute has been deleted." +msgstr "Lastnost je bila zbrisana." + +#: admin.php:864 +msgid "The attribute has been modified." +msgstr "Lastnost je bila spremenjena." + +#: admin.php:898 +msgid "The attribute was not deleted." +msgstr "Lastnost ni bila izbisana." + +#: admin.php:449 +#, php-format +msgid "The priority \"%s\" has been added to %s." +msgstr "Prioriteta \"%s\" je bila dodana k %s." + +#: admin.php:530 +msgid "The priority has been deleted." +msgstr "Prioriteta je bila izbrisana." + +#: admin.php:502 +msgid "The priority has been modified." +msgstr "Prioriteta je bila spremenjena." + +#: admin.php:535 +msgid "The priority was not deleted." +msgstr "Prioriteta ni bila izbrisana." + +#: lib/Query.php:898 +#, php-format +msgid "The query \"%s\" couldn't be deleted: %s" +msgstr "POizvedbe \"%s\" ni mogoče izbrisati: %s" + +#: lib/Query.php:900 +#, php-format +msgid "The query \"%s\" has been deleted." +msgstr "Poizvedba \"%s\" je bila izbrisana." + +#: lib/Query.php:865 +#, php-format +msgid "The query couldn't be loaded:" +msgstr "Poizvedba ne more biti naložena:" + +#: admin.php:240 +#, php-format +msgid "The queue \"%s\" has been created." +msgstr "Skupina \"%s\" je bila tvorjena." + +#: admin.php:318 +msgid "The queue has been deleted." +msgstr "Skupina \"%s\" je bila izbrisana." + +#: admin.php:290 +msgid "The queue has been modified." +msgstr "Skupina je bila spremenjena." + +#: admin.php:323 +msgid "The queue was not deleted." +msgstr "Skupina je ni bila izbrisana." + +#: lib/MIME/Viewer/zip.php:60 +msgid "The requested file does not exist in the Zip attachment." +msgstr "zahtevana priponka ne obstaja v ZIP datoteki." + +#: data.php:24 +msgid "The requested template does not exist." +msgstr "Zahtevana Å¡ablona ne obstaja." + +#: admin.php:338 +#, php-format +msgid "The state \"%s\" has been added to %s." +msgstr "Status \"%s\" je bil dodan k %s." + +#: admin.php:421 +msgid "The state has been deleted." +msgstr "Status je bil izbrisan." + +#: admin.php:392 +msgid "The state has been modified." +msgstr "Status je bil spremenjen." + +#: admin.php:426 +msgid "The state was not deleted." +msgstr "Status ni bil izbrisan." + +#: admin.php:625 +#, php-format +msgid "The subject \"%s\" has been added." +msgstr "Postavka \"%s\" je bila dodana." + +#: admin.php:681 +msgid "The subject has been deleted." +msgstr "Postavka je bila izbrisana." + +#: admin.php:662 +msgid "The subject has been modified." +msgstr "Postavka je bila spremenjena." + +#: admin.php:686 +msgid "The subject was not deleted." +msgstr "Postavka ni bila izbrisana." + +#: ticket/delete.php:75 +msgid "The ticket was not deleted." +msgstr "Prijava ni bila izbrisana." + +#: admin.php:179 +#, php-format +msgid "The type \"%s\" has been modified." +msgstr "Tip \"%s\" je bil spremenjen." + +#: admin.php:221 +msgid "The type has been deleted." +msgstr "Tip je bil izbrisan." + +#: admin.php:226 +msgid "The type was not deleted." +msgstr "Tip ni bil izbrisan." + +#: admin.php:701 +#, php-format +msgid "The version \"%s\" has been added to %s." +msgstr "Verzija \"%s\" has je vila dodana k %s." + +#: admin.php:783 +msgid "The version has been deleted." +msgstr "Verzija je bila izbrisana." + +#: admin.php:755 +msgid "The version has been modified." +msgstr "Verzija je bila spremenjena." + +#: admin.php:788 +msgid "The version was not deleted." +msgstr "Verzija ni bila izbrisana." + +#: lib/Admin.php:733 +msgid "There are no attribute types to edit" +msgstr "Ni lastnosti tipa za urejanje" + +#: lib/Query.php:777 +msgid "There are no attributes defined for the current type" +msgstr "Ni nastavljenih lastnosti za trenutni tip" + +#: lib/Admin.php:557 +msgid "There are no priorities to edit" +msgstr "Ni prioritet za urejanje" + +#: lib/Admin.php:805 +msgid "There are no queues available." +msgstr "Ni skupin na voljo." + +#: lib/Admin.php:131 +msgid "There are no queues to edit" +msgstr "Ni skupin za urejanja" + +#: lib/Forms/CreateTicket.php:27 +msgid "There are no queues which you can create tickets in." +msgstr "Ni skupin v katerih lahko tvorite prijave." + +#: search.php:42 +msgid "There are no queues which you can search." +msgstr "Ni skupin v katerih bi lahko iskali." + +#: lib/Admin.php:466 +msgid "There are no states to edit" +msgstr "Ni statusov za urejanje" + +#: lib/Admin.php:37 +msgid "There are no subjects to edit" +msgstr "Ni postavk za urejanje." + +#: lib/Forms/CreateTicket.php:61 +msgid "" +"There are no ticket types associated with this queue; until there are, you " +"cannot create any tickets in this queue." +msgstr "" +"Ni tipov povezanih s to skupino; dokler niso, ne morete tvoriti prijav v " +"njej." + +#: lib/Admin.php:321 +msgid "There are no types to edit" +msgstr "Ni tipov za urejanje" + +#: lib/Admin.php:283 +msgid "There are no users responsible for this queue." +msgstr "Ni odgovorih za to skupino." + +#: ticket/people.php:71 lib/Forms/CreateTicket.php:198 +msgid "There are no users to which this ticket can be assigned." +msgstr "Ni odgovornih katerim bi lahko dodelili prijavo." + +#: lib/Admin.php:645 +msgid "There are no versions to edit" +msgstr "Ni verzij za urejanje." + +#: graph.php:30 +msgid "There is no data for this graph." +msgstr "Ni podatkov za pripravo grafa." + +#: lib/Reports.php:161 +msgid "There is no data for this report." +msgstr "Ni podatkov za pripravo poročila.s" + +#: admin.php:569 +#, php-format +msgid "There was an error adding \"%s\" to the responsible list for \"%s\": %s" +msgstr "PriÅ¡lo je do napake pri dodajanju \"%s\" med odgovorne za \"%s\": %s" + +#: admin.php:627 +#, php-format +msgid "There was an error adding the subject: %s." +msgstr "PriÅ¡lo je do napake pri dodajanju postavke: %s." + +#: admin.php:814 +#, php-format +msgid "There was an error creating the attribute: %s." +msgstr "PriÅ¡lo je do napake pri dodajanju atributa: %s." + +#: admin.php:451 +#, php-format +msgid "There was an error creating the priority: %s." +msgstr "PriÅ¡lo je do napake pri tvorjenju prioritete: %s" + +#: admin.php:248 +#, php-format +msgid "There was an error creating the queue: %s." +msgstr "PriÅ¡lo je do napake pri tvorjenju skupine: %s." + +#: admin.php:340 +#, php-format +msgid "There was an error creating the state: %s." +msgstr "PriÅ¡lo je do napake pri tvorjenju statusa: %s" + +#: admin.php:703 +#, php-format +msgid "There was an error creating the version: %s." +msgstr "PriÅ¡lo je do napake pri tvorjenju verzije: %s" + +#: admin.php:895 +#, php-format +msgid "There was an error deleting the attribute: %s." +msgstr "PriÅ¡lo je do napake pri izbrisu lastnosti: %s" + +#: admin.php:532 +#, php-format +msgid "There was an error deleting the priority: %s." +msgstr "PriÅ¡lo je do napake pri izbrisu prioritete: %s" + +#: admin.php:320 +#, php-format +msgid "There was an error deleting the queue: %s." +msgstr "PriÅ¡lo je do napake pri izbrisu statusa: %s" + +#: admin.php:423 +#, php-format +msgid "There was an error deleting the state: %s." +msgstr "PriÅ¡lo je do napake pri izbrisu statusa: %s" + +#: admin.php:683 +#, php-format +msgid "There was an error deleting the subject: %s." +msgstr "PriÅ¡lo je do napake pri brisanju postavke: %s." + +#: ticket/delete.php:72 +#, php-format +msgid "There was an error deleting the ticket: %s" +msgstr "PriÅ¡lo je do napake pri izbrisu priajve: %s" + +#: admin.php:223 +#, php-format +msgid "There was an error deleting the type: %s." +msgstr "PriÅ¡lo je do napake pri izbrisu tipa: %s" + +#: admin.php:785 +#, php-format +msgid "There was an error deleting the version: %s." +msgstr "PriÅ¡lo je do napake pri urejanju verzije: %s" + +#: admin.php:871 +#, php-format +msgid "There was an error editing the attribute: %s." +msgstr "PriÅ¡lo je do napake pri urejanju lastnosti: %s" + +#: admin.php:507 +#, php-format +msgid "There was an error editing the priority: %s." +msgstr "PriÅ¡lo je do napake pri urejanju prioritete: %s" + +#: admin.php:304 +#, php-format +msgid "There was an error editing the queue: %s." +msgstr "PriÅ¡lo je do napake pri urejanju skupine: %s." + +#: admin.php:397 +#, php-format +msgid "There was an error editing the state: %s." +msgstr "PriÅ¡lo je do napake pri urejanju statusa: %s" + +#: admin.php:667 +#, php-format +msgid "There was an error editing the subject: %s." +msgstr "PriÅ¡lo je do napake pri urejanju posavke: %s." + +#: admin.php:760 +#, php-format +msgid "There was an error editing the version: %s." +msgstr "PriÅ¡lo je do napake pri urejanju verzije: %s" + +#: lib/Admin.php:243 +#, fuzzy, php-format +msgid "There was an error listing users: %s; %s" +msgstr "PriÅ¡lo je do napake pri branju spiska uporabnikov: %s." + +#: admin.php:177 +#, php-format +msgid "There was an error modifying the type: %s." +msgstr "PriÅ¡lo je do napake pri spreminjanju tipa: %s" + +#: search.php:158 +#, php-format +msgid "There was an error performing your search: %s" +msgstr "PriÅ¡lo je do napake pri izvjanju iskanja: %s" + +#: admin.php:605 +#, php-format +msgid "" +"There was an error removing \"%s\" from the responsible list for \"%s\": %s" +msgstr "PriÅ¡lo je do napake brisanju \"%s\" iz spiska odgovornih za \"%s\": %s" + +#: data.php:27 +msgid "This is not a search results template." +msgstr "Ni rezultatov iskanja v tej Å¡abloni." + +#: lib/Admin.php:57 +msgid "This is not a valid subject." +msgstr "Ni veljavne postavke." + +#: ticket/queue.php:80 lib/Forms/CreateTicket.php:72 +msgid "" +"This queue requires that you specify a version, but there are no versions " +"associated with it. Until versions are created for this queue, you will not " +"be able to create tickets." +msgstr "" +"Te skupine zahtevajo določitev veruije, ampak ni vezij povezanih z njimi." +"Dokler niso ne morete tvorit prijav v njih." + +#: lib/Ticket.php:485 +msgid "Ticket" +msgstr "Prijava" + +#: ticket/delete.php:68 +#, php-format +msgid "Ticket %d has been deleted." +msgstr "Prijava %d je bila izbrisana." + +#: lib/api.php:746 +#, php-format +msgid "Ticket %s - %s" +msgstr "Prijava %s - %s" + +#: lib/Driver/sql.php:869 +#, php-format +msgid "Ticket %s was not found." +msgstr "Ne najdem prijave %s" + +#: search.php:49 +msgid "Ticket ID" +msgstr "Priajva Å t." + +#: lib/Forms/CreateTicket.php:125 +msgid "Ticket State" +msgstr "Satus prijave" + +#: templates/reports/stats.inc:3 +msgid "Ticket Stats" +msgstr "Prijava oddana" + +#: lib/Block/summary.php:3 +msgid "Ticket Summary" +msgstr "Povzetek prijave" + +#: lib/Forms/CreateTicket.php:66 +msgid "Ticket Type" +msgstr "Tip prijave" + +#: lib/Admin.php:158 +msgid "Ticket Types associated with this Queue" +msgstr "Tip prijav povezani s to skupino" + +#: lib/Ticket.php:481 +#, php-format +msgid "Ticket URL: %s\n" +msgstr "Podrobnosti prijave: %s\n" + +#: ticket/update.php:137 +msgid "Ticket Updated" +msgstr "Prijava žurirana" + +#: lib/api.php:767 +msgid "Tickets" +msgstr "Prijave" + +#: lib/Block/summary.php:51 +msgid "Tickets assigned to you" +msgstr "Tebi dodeljene prijave" + +#: search.php:52 +msgid "Tickets which are" +msgstr "Prijave so" + +#: lib/Block/summary.php:68 +msgid "Tickets you requested" +msgstr "Od vas oddane prijave" + +#: templates/queryrenderer.inc:121 ticket/queue.php:88 lib/Whups.php:492 +#: lib/Ticket.php:467 lib/Ticket.php:592 lib/Query.php:674 +#: config/prefs.php.dist:39 +msgid "Type" +msgstr "Tip" + +#: templates/comment.inc:103 +#, php-format +msgid "Type ⇒ %s" +msgstr "Tip ⇒ %s" + +#: lib/Admin.php:301 lib/Admin.php:345 lib/Admin.php:394 +msgid "Type Description" +msgstr "Opis tipa" + +#: lib/Admin.php:300 lib/Admin.php:324 lib/Admin.php:342 lib/Admin.php:391 +msgid "Type Name" +msgstr "Ime tipa" + +#: search.php:55 +msgid "Types" +msgstr "Tipi" + +#: lib/Ticket.php:597 +msgid "Unassigned" +msgstr "Nedodeljena" + +#: lib/Admin.php:816 +msgid "Unassigned tickets" +msgstr "Nedodljene prijave" + +#: lib/Driver.php:159 +msgid "Unconfirmed" +msgstr "Nepotrjene" + +#: templates/queryrenderer.inc:148 templates/queryrenderer.inc:188 +#, php-format +msgid "Unknown node type %s" +msgstr "Neznan vozel prijave %s" + +#: templates/comment.inc:84 lib/api.php:714 +msgid "Update" +msgstr "Ažuriraj" + +#: ticket/update.php:153 +#, php-format +msgid "Update %s" +msgstr "Ažuriraj %s" + +#: templates/admin/mtmatrix.inc:29 +msgid "Update Associations" +msgstr "Ažuriraj povezavo" + +#: ticket/people.php:134 +#, php-format +msgid "Update People for %s" +msgstr "Ažuriraj odgovorne za %s" + +#: lib/Ticket.php:472 lib/Ticket.php:486 +msgid "Updated By" +msgstr "Spremenjena od" + +#: lib/Admin.php:242 lib/Admin.php:252 lib/Admin.php:255 +msgid "User" +msgstr "Uporabnik" + +#: lib/Query.php:539 +msgid "User ID" +msgstr "Uporabnik" + +#: lib/Admin.php:184 +msgid "Users responsible for this Queue" +msgstr "Uporabiki odgovorni za to kupino" + +#: lib/Admin.php:287 +msgid "Users responsible for this queue" +msgstr "Uporabiki odgovorni za to kupino" + +#: templates/queryrenderer.inc:115 lib/Whups.php:495 lib/Ticket.php:464 +#: lib/Query.php:686 config/prefs.php.dist:42 +msgid "Version" +msgstr "Verzija" + +#: lib/Admin.php:625 lib/Admin.php:671 lib/Admin.php:694 +msgid "Version Description" +msgstr "Opis verzije" + +#: lib/Admin.php:624 lib/Admin.php:649 lib/Admin.php:668 lib/Admin.php:691 +msgid "Version Name" +msgstr "Ime verzije" + +#: templates/reports/graphs.inc:13 +msgid "View Graphs" +msgstr "Preglej grafe" + +#: ticket/people.php:91 ticket/type.php:46 ticket/queue.php:51 +#: lib/Forms/AddComment.php:38 +msgid "Viewable only by members of" +msgstr "Prikazani samo člani od" + +#: lib/Forms/AddComment.php:25 +msgid "Watch this ticket" +msgstr "Sledi tej prijavi" + +#: ticket/watch.php:76 +#, php-format +msgid "Watchers for %s" +msgstr "Sleditelji prijave %s" + +#: config/prefs.php.dist:95 +msgid "Weekday Day Month" +msgstr "Dan v tednu, Dan, Mesec" + +#: config/prefs.php.dist:96 +msgid "Weekday Day Month HH:MM:SS TZ" +msgstr "Dan v tednu, Dan, Mesec UU:MM::SS TZ" + +#: ticket/delete.php:37 lib/Admin.php:90 lib/Admin.php:217 lib/Admin.php:405 +#: lib/Admin.php:521 lib/Admin.php:609 lib/Admin.php:697 lib/Admin.php:785 +#: lib/Query.php:884 +msgid "Yes" +msgstr "Da" + +#: view.php:40 +msgid "You are not allowed to view this ticket." +msgstr "Nimate pravic za pogled te prijave." + +#: lib/Driver/sql.php:872 +#, php-format +msgid "You do not have permission to access this ticket (%s)." +msgstr "Nimate pravic za dostop do prijave (%s)." + +#: lib/Query.php:854 +msgid "You have no saved queries." +msgstr "Nimate shranjenih poizvedb." + +#: lib/Whups.php:523 +msgid "You must select at least one queue to send reminders for." +msgstr "Izbrati morate vsaj eno skupino za poslati oponike." + +#: lib/Forms/CreateTicket.php:119 lib/Forms/AddComment.php:18 +msgid "Your Email Address" +msgstr "VaÅ¡ elektronski naslov" + +#: ticket/create.php:157 +#, php-format +msgid "" +"Your ticket ID is %s. An appropriate person has been notified of this " +"request." +msgstr "" +"VaÅ¡a prijava Å¡t. ID je %s. Ustrezena odgovorna oseba je bila obveščena o tem " +"zahtevku." + +#: lib/Whups.php:588 +msgid "_Admin" +msgstr "Administracija" + +#: lib/Whups.php:212 +msgid "_Comment" +msgstr "Komentar" + +#: lib/Whups.php:221 +msgid "_Delete" +msgstr "IzbriÅ¡i" + +#: lib/Query.php:145 +msgid "_Delete Query" +msgstr "IzbriÅ¡i poizvedbo" + +#: lib/Query.php:126 +msgid "_Edit Query" +msgstr "Uredi poizvedbo" + +#: admin.php:32 +msgid "_Edit Queues" +msgstr "Uredi skupine" + +#: query.php:137 +msgid "_Group Criteria" +msgstr "Skupine" + +#: lib/Query.php:139 +msgid "_Load Query" +msgstr "Naloži poizvedbo" + +#: lib/Whups.php:577 +#, php-format +msgid "_My %s" +msgstr "Moje %s" + +#: lib/Whups.php:580 +msgid "_New Ticket" +msgstr "Tvori prijavo" + +#: lib/Whups.php:215 +msgid "_People" +msgstr "Odgovorni" + +#: query.php:135 +msgid "_Property Criteria" +msgstr "Osnovno" + +#: lib/Whups.php:582 +msgid "_Query Builder" +msgstr "Tvorec poizvedb" + +#: lib/Whups.php:584 +msgid "_Reports" +msgstr "Poročila" + +#: lib/Whups.php:579 +msgid "_Search" +msgstr "Išči" + +#: query.php:139 +msgid "_Text Criteria" +msgstr "Opis" + +#: lib/Whups.php:210 +msgid "_Update" +msgstr "Ažuriraj" + +#: query.php:136 +msgid "_User Criteria" +msgstr "Uporabniki" + +#: lib/Whups.php:213 +msgid "_Watch" +msgstr "Sledi" + +#: templates/queryrenderer.inc:168 +msgid "contains (case insensitive) substring" +msgstr "vsebuje zvezo (neobčutljivo na velike/male)" + +#: templates/queryrenderer.inc:172 +msgid "contains (case sensitive) substring" +msgstr "vsebuje zvezo (občutljivo na velike/male)" + +#: templates/queryrenderer.inc:176 +msgid "contains the word" +msgstr "vsebuje besede" + +#: scripts/mail-filter.php:176 +#, php-format +msgid "error processing message: %s" +msgstr "napaka v procesiranju sporočila: %s" + +#: lib/api.php:755 +msgid "estimated time" +msgstr "predviden čas" + +#: templates/queryrenderer.inc:164 +msgid "is" +msgstr "je" + +#: templates/queryrenderer.inc:156 +msgid "is greater than" +msgstr "je večji od" + +#: templates/queryrenderer.inc:160 +msgid "is less than" +msgstr "je manjÅ¡i od" + +#: templates/queryrenderer.inc:180 +msgid "matches the pattern" +msgstr "ustreza primerjavi" diff --git a/whups/po/tr_TR.po b/whups/po/tr_TR.po new file mode 100644 index 000000000..a6074ec0a --- /dev/null +++ b/whups/po/tr_TR.po @@ -0,0 +1,2452 @@ +# Turkish translations for Whups package +# whups paketi için Türkçe çeviriler. +# Copyright 2008-2009 The Horde Project +# This file is distributed under the same license as the Whups package. +# Akif Dinc , 2008. +# +msgid "" +msgstr "" +"Project-Id-Version: Whups H3 (2.0-cvs)\n" +"Report-Msgid-Bugs-To: dev@lists.horde.org\n" +"POT-Creation-Date: 2008-10-30 16:08+0100\n" +"PO-Revision-Date: 2008-10-31 18:30+0100\n" +"Last-Translator: Akif Dinc \n" +"Language-Team: i18n@lists.horde.org\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-9\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: admin/index.php:745 +#, php-format +msgid "\"%s\" is no longer among those responsible for \"%s\"" +msgstr "\"%s\" artýk \"%s\" sorumlular arasýna girmiyor" + +#: templates/menu.inc:5 +msgid "#Id" +msgstr "#Id" + +#: templates/ticket/watchers.inc:3 +#, php-format +msgid "%d people watching, %d people responsible" +msgstr "%d þahýs takip ediyor, %d þahýs sorumlu" + +#: queue/rss.php:96 +#, php-format +msgid "%s %s tickets in %s" +msgstr "%s %s bilet var %s'de" + +#: queue/rss.php:100 +#, php-format +msgid "%s %s tickets in all queues" +msgstr "tüm kuyruklarda %s %s bilet var" + +#: lib/Renderer/Comment.php:120 +#, php-format +msgid "%s ⇒ %s" +msgstr "%s ⇒ %s" + +#: lib/Driver.php:497 +#, php-format +msgid "%s (%s) wrote:" +msgstr "%s (%s) dediki:" + +#: admin/index.php:700 +#, php-format +msgid "%s added to those responsible for \"%s\"" +msgstr "%s \"%s\" için sorumlulara eklenmiþtir" + +#: templates/reports/stats.inc:15 +#, php-format +msgid "%s days" +msgstr "%s gün" + +#: queue/rss.php:104 +#, php-format +msgid "%s tickets in %s" +msgstr "%s bilet var %s'de" + +#: queue/rss.php:108 +#, php-format +msgid "%s tickets in all queues" +msgstr "Tüm kuyruklarda %s bilet var" + +#: ticket/watch.php:60 +#, php-format +msgid "%s will be notified when this ticket is updated." +msgstr "bu bilet güncelleþtirildiðinde %s bilgilendirilecektir" + +#: ticket/watch.php:72 +#, php-format +msgid "%s will no longer receive updates for this ticket." +msgstr "%s'ye güncelleþtirme bilgileri artýk iletilmiyecektir" + +#: admin/index.php:109 +msgid "- Stage 1" +msgstr "- 1 Basamak" + +#: admin/index.php:114 +msgid "- Stage 2" +msgstr "- 2 Basamak" + +#: scripts/mail-filter.php:172 +msgid "--queue-name or --queue-id must specify a valid and public queue." +msgstr "" + +#: templates/prevnext.inc:16 +msgid "<>" +msgstr "Son>>" + +#: lib/Forms/Query.php:411 +msgid "Load Query" +msgstr "Sorgulamayý Yükle" + +#: lib/Forms/VarRenderer.php:46 +msgid "Loading..." +msgstr "Yükleniyor..." + +#: config/prefs.php.dist:106 +msgid "MM/DD/YY" +msgstr "AA/GG/YY" + +#: config/prefs.php.dist:107 +msgid "MM/DD/YY HH:MM:SS" +msgstr "AA/GG/YY SS:DD:SS" + +#: lib/Forms/Admin/Type.php:193 +#, php-format +msgid "Make a clone of %s" +msgstr "%s'i klonla" + +#: lib/Forms/AddComment.php:38 lib/Forms/EditTicket.php:167 +msgid "Make this comment visible only to members of a group?" +msgstr "Bu yorum sadece üyesi olan gruplara mý gösterilsin?" + +#: lib/Forms/Query.php:274 +msgid "Match" +msgstr "Eþleþen" + +#: lib/Forms/Query.php:45 lib/Forms/Query.php:129 lib/Forms/Query.php:275 +msgid "Match Operator" +msgstr "" + +#: lib/Query.php:167 +msgid "Match Pattern" +msgstr "Eþleþen Örüntü" + +#: lib/Query.php:166 +msgid "Match Word" +msgstr "Eþleþen Kelime" + +#: reports.php:30 +msgid "Maximum time a ticket is unresolved" +msgstr "En çok iþgal etmiþ açýk bilet zamaný" + +#: lib/Block/tree_menu.php:3 +msgid "Menu List" +msgstr "" + +#: reports.php:31 +msgid "Minimum time a ticket is unresolved" +msgstr "En az iþgal etmiþ açýk bilet zamaný" + +#: config/prefs.php.dist:146 +msgid "Most recent first" +msgstr "En sonu ilk yap" + +#: templates/prefs/sourceselect.inc:312 +msgid "Move down" +msgstr "Aþaðý indir" + +#: templates/prefs/sourceselect.inc:310 +msgid "Move up" +msgstr "Yukarý çýkar" + +#: ticket/queue.php:181 +#, php-format +msgid "Moved ticket %d to \"%s\"" +msgstr "%d biletini \"%s\" aktar" + +#: mybugs.php:54 +#, php-format +msgid "My %s" +msgstr "Benim %s" + +#: mybugs_edit.php:33 +#, php-format +msgid "My %s :: Add Content" +msgstr "Benim %s :: Ýçerik Ekle" + +#: search.php:178 lib/Block/myqueries.php:3 lib/Block/myqueries.php:24 +msgid "My Queries" +msgstr "Benim Sorgulamalarým" + +#: lib/Block/myrequests.php:3 lib/Block/myrequests.php:24 +msgid "My Requests" +msgstr "Benim Baþvurularým " + +#: lib/Block/mytickets.php:3 lib/Block/mytickets.php:24 +#: config/prefs.php.dist:75 +msgid "My Tickets" +msgstr "Benim Biletlerim" + +#: lib/api.php:884 +msgid "My tickets by assignment date" +msgstr "" + +#: lib/api.php:883 +msgid "My tickets by creation date" +msgstr "" + +#: lib/api.php:885 +msgid "My tickets by due date" +msgstr "" + +#: lib/api.php:886 +msgid "My tickets by resolution date" +msgstr "" + +#: lib/Forms/Query.php:422 +msgid "Name" +msgstr "Ad" + +#: lib/Forms/Admin/Type.php:198 +msgid "Name of the cloned copy" +msgstr "Klonlanmýþ kopyanýn adý" + +#: lib/Query.php:216 +msgid "Ne_w Query" +msgstr "Ye_ni Sorgulama" + +#: lib/Driver.php:197 +msgid "New" +msgstr "Yeni" + +#: lib/Ticket.php:618 lib/Ticket.php:711 +msgid "New Attachment" +msgstr "Yeni Ek" + +#: lib/Renderer/Comment.php:58 lib/Renderer/Comment.php:62 +#, php-format +msgid "New Attachment: %s" +msgstr "Yeni Ek: %s" + +#: ticket/queue.php:32 +msgid "New Queue" +msgstr "Yeni Kuyruk" + +#: ticket/create.php:67 lib/Block/tree_menu.php:21 +msgid "New Ticket" +msgstr "Yeni Bilet" + +#: ticket/type.php:31 +msgid "New Type" +msgstr "Yeni Tür" + +#: templates/prevnext.inc:26 +msgid "Next>" +msgstr "Sonra>" + +#: ticket/delete.php:33 lib/Forms/Query.php:449 lib/Forms/Admin/Queue.php:174 +#: lib/Forms/Admin/State.php:121 lib/Forms/Admin/Type.php:176 +#: lib/Forms/Admin/Reply.php:110 lib/Forms/Admin/Version.php:96 +#: lib/Forms/Admin/Attribute.php:149 lib/Forms/Admin/Priority.php:121 +msgid "No" +msgstr "" + +#: lib/Ticket.php:100 +#, php-format +msgid "" +"No priority for this ticket and no default priority for ticket type \"%s\" " +"specified." +msgstr "" + +#: lib/Block/myqueries.php:46 +msgid "No queries have been saved." +msgstr "Kaydedilmiþ sorgulamalar yok" + +#: lib/Block/query.php:62 lib/Driver/sql.php:553 +msgid "No query to run" +msgstr "Ýþlenebilineçek sorgulamalar yok" + +#: lib/Block/queuecontents.php:25 +msgid "No queues available." +msgstr "Kullanýlabileçek sorgulamalar yok" + +#: lib/Ticket.php:92 +#, php-format +msgid "" +"No state for this ticket and no default state for ticket type \"%s\" " +"specified." +msgstr "" +"Bu bilet için durum yok ve varsayýlan durumda bu bilet türü olan\"%s\" için " +"belirlenmemiþ." + +#: reports.php:35 +msgid "No stats available." +msgstr "Mevcut istatistik yok" + +#: lib/Driver.php:533 +#, php-format +msgid "No such backend \"%s\" found" +msgstr "" + +#: lib/View.php:33 +#, php-format +msgid "No such view \"%s\" found" +msgstr "" + +#: lib/Block/mytickets.php:45 +msgid "No tickets are assigned to you." +msgstr "Size atanmýþ bilet yok" + +#: lib/Block/unassigned.php:45 +msgid "No tickets are unassigned!" +msgstr "Atanmamýþ bilet yok!" + +#: lib/Block/queuecontents.php:62 lib/Block/queuecontents.php:73 +msgid "No tickets in queue." +msgstr "Kuyrukta bilet yok." + +#: lib/Whups.php:720 +msgid "No tickets matched your search criteria." +msgstr "Arama kriterlerinize uyan bilet yok." + +#: lib/Ticket.php:84 +#, php-format +msgid "No type for this ticket and no default type for queue \"%s\" specified." +msgstr "" + +#: templates/prefs/sourceselect.inc:35 lib/Reports.php:67 +msgid "None" +msgstr "Hiç" + +#: lib/Forms/Query.php:26 lib/Renderer/Query.php:79 +msgid "Not" +msgstr "Hayýr" + +#: config/prefs.php.dist:17 +msgid "Notification Options" +msgstr "Bilgilendirilme Ayarlarý" + +#: config/prefs.php.dist:117 +msgid "Only notify me of ticket changes from other users?" +msgstr "Sadece diðer kullanýcýlarýn deðiþmiþ biletleri mi bana bildirilsin?" + +#: config/prefs.php.dist:126 +msgid "Only notify me of ticket changes with comments?" +msgstr "Sadece yorumlarý deðiþmiþ bileler mi bana bildirilsin?" + +#: queue/rss.php:43 +msgid "Open" +msgstr "Açýk" + +#: lib/Block/queuesummary.php:49 +msgid "Open Tickets" +msgstr "Açýk Biletler" + +#: reports.php:23 +msgid "Open Tickets by Owner" +msgstr "Sahibine Göre Açýk Biletler" + +#: reports.php:21 +msgid "Open Tickets by Priority" +msgstr "Önceliklere Göre Açýk Biletler" + +#: reports.php:18 +msgid "Open Tickets by Queue" +msgstr "Kuyruða Göre Açýk Bilet" + +#: reports.php:22 +msgid "Open Tickets by Requester" +msgstr "Baþvuruculara Göre Henüz Açýk Biletler" + +#: reports.php:19 +msgid "Open Tickets by State" +msgstr "Duruma Göre Açýk Biletler" + +#: reports.php:20 +msgid "Open Tickets by Type" +msgstr "" + +#: lib/Block/queuecontents.php:47 +#, php-format +msgid "Open Tickets in %s" +msgstr "%s'de Benim Sonuçlandýrýlmamýþ Biletlerim" + +#: queue/index.php:43 queue/index.php:57 queue/rss.php:119 +#, php-format +msgid "Open tickets in %s" +msgstr "%s'de açýk biletler" + +#: queue/rss.php:121 +msgid "Open tickets in all queues." +msgstr "Tüm kuyruklardaki açýk biletler" + +#: lib/Forms/Query.php:25 lib/Renderer/Query.php:78 +msgid "Or" +msgstr "Veya" + +#: lib/Whups.php:685 lib/Ticket.php:617 lib/Ticket.php:701 lib/Ticket.php:702 +#: lib/Ticket.php:705 lib/Ticket.php:812 lib/Ticket.php:833 lib/Ticket.php:958 +#: lib/Forms/EditTicket.php:104 lib/Forms/CreateTicket.php:225 +#: lib/Forms/CreateTicket.php:243 lib/Renderer/Query.php:84 +msgid "Owners" +msgstr "Sahipler" + +#: lib/Whups.php:870 +#, php-format +msgid "Permanently delete %s?" +msgstr "%s tamamen silinsin mi?" + +#: ticket/delete.php:51 ticket/type.php:74 ticket/queue.php:131 +#: ticket/update.php:22 ticket/deleteAttachment.php:21 +msgid "Permission Denied" +msgstr "Eriþim Ýzni Engellendi" + +#: ticket/delete.php:40 lib/Forms/EditTicket.php:197 +msgid "Permission Denied." +msgstr "Eriþim Ýzni Engellendi." + +#: lib/Forms/Query.php:459 query/run.php:44 query/index.php:31 +#, php-format +msgid "Permission denied." +msgstr "Eriþim izni engellendi." + +#: lib/Imple/ContactAutoCompleter.php:227 +msgid "Please resolve ambiguous or invalid addresses." +msgstr "" + +#: lib/Forms/Admin/Type.php:93 lib/Forms/Admin/Type.php:171 +msgid "Priorities for this Type" +msgstr "" + +#: ticket/type.php:66 ticket/queue.php:117 lib/Whups.php:673 lib/Whups.php:682 +#: lib/Ticket.php:610 lib/Ticket.php:807 lib/Ticket.php:953 +#: lib/Forms/EditTicket.php:68 lib/Forms/CreateTicket.php:147 +#: lib/Forms/Query.php:198 lib/Renderer/Query.php:125 config/prefs.php.dist:49 +msgid "Priority" +msgstr "Öncelik" + +#: lib/Renderer/Comment.php:115 +#, php-format +msgid "Priority ⇒ %s" +msgstr "Öncelik ⇒ %s" + +#: lib/Forms/Admin/Priority.php:24 lib/Forms/Admin/Priority.php:70 +#: lib/Forms/Admin/Priority.php:118 +msgid "Priority Description" +msgstr "Öncelik Tanýmlamasý" + +#: lib/Forms/Admin/Priority.php:23 lib/Forms/Admin/Priority.php:48 +#: lib/Forms/Admin/Priority.php:67 lib/Forms/Admin/Priority.php:94 +#: lib/Forms/Admin/Priority.php:115 +msgid "Priority Name" +msgstr "Öncelik Adý" + +#: search.php:178 +msgid "Public Queries" +msgstr "Herkese Açýk Sorgulamalar" + +#: query/index.php:172 +msgid "Query Builder" +msgstr "Sorgulama Kurucusu" + +#: lib/Forms/Query.php:387 +msgid "Query Name" +msgstr "Sorgulama Adý" + +#: lib/Forms/QueryParameterForm.php:20 +msgid "Query Parameters" +msgstr "Sorgulama Parametreleri" + +#: lib/Block/query.php:3 lib/Block/query.php:49 query/run.php:79 +#: query/rss.php:63 +msgid "Query Results" +msgstr "Sorgulama Sonuçlarý" + +#: lib/Forms/Query.php:389 +msgid "Query Slug" +msgstr "" + +#: lib/Block/query.php:33 +msgid "Query to run" +msgstr "Çalýþtýrýlmasý istenilen sorgulama" + +#: lib/Whups.php:683 lib/Ticket.php:606 lib/Ticket.php:803 lib/Ticket.php:918 +#: lib/Ticket.php:923 lib/Block/queuecontents.php:32 +#: lib/Block/queuesummary.php:49 lib/Forms/Query.php:181 +#: lib/Forms/Search.php:40 lib/Renderer/Query.php:94 config/prefs.php.dist:50 +msgid "Queue" +msgstr "Kuyruk" + +#: lib/Renderer/Comment.php:100 +#, php-format +msgid "Queue ⇒ %s" +msgstr "Sorgulama ⇒ %s" + +#: lib/Block/queuecontents.php:3 lib/Block/queuecontents.php:49 +msgid "Queue Contents" +msgstr "Kuyruðun Ýçindekiler" + +#: lib/Forms/Admin/Queue.php:24 lib/Forms/Admin/Queue.php:89 +#: lib/Forms/Admin/Queue.php:170 +msgid "Queue Description" +msgstr "Kuyruk Betimlemesi" + +#: lib/Forms/Admin/Queue.php:30 lib/Forms/Admin/Queue.php:97 +msgid "Queue Email" +msgstr "Kuyruk Epostasý" + +#: lib/Forms/CreateTicket.php:34 lib/Forms/CreateTicket.php:45 +#: lib/Forms/Admin/Queue.php:23 lib/Forms/Admin/Queue.php:60 +#: lib/Forms/Admin/Queue.php:85 lib/Forms/Admin/Queue.php:166 +msgid "Queue Name" +msgstr "Kuyruk Adý" + +#: lib/Forms/Admin/Queue.php:26 lib/Forms/Admin/Queue.php:93 +msgid "Queue Slug" +msgstr "" + +#: lib/Block/queuesummary.php:3 lib/Block/queuesummary.php:24 +msgid "Queue Summary" +msgstr "Kuyruk Özeti" + +#: ticket/queue.php:86 lib/Ticket.php:932 lib/Ticket.php:938 +#: lib/Forms/CreateTicket.php:93 +msgid "Queue Version" +msgstr "Kuyruk Sürümü" + +#: admin/index.php:35 +msgid "Queue/Type Matri_x" +msgstr "Kuyruk/Türü Dize_y" + +#: templates/admin/mtmatrix.inc:6 +msgid "Queue/Type Matrix" +msgstr "Kuyruk/Türü Dizey" + +#: lib/api.php:163 lib/api.php:781 +msgid "Queues" +msgstr "Kuyruklar" + +#: templates/prevnext.inc:32 +msgid "Re_turn to Search Results" +msgstr "A_rama Sonuçlarýna Geri Dön" + +#: lib/Forms/Admin/Attribute.php:147 +msgid "Really delete this attribute? This may cause data problems!" +msgstr "" + +#: lib/Forms/Admin/Reply.php:108 +msgid "Really delete this form reply?" +msgstr "" + +#: lib/Forms/Admin/Priority.php:122 +msgid "Really delete this priority? This may cause data problems!" +msgstr "" + +#: lib/Forms/Query.php:450 +msgid "Really delete this query? This operation is not undoable." +msgstr "" + +#: lib/Forms/Admin/Queue.php:176 +msgid "Really delete this queue? This may cause data problems!" +msgstr "" + +#: lib/Forms/Admin/State.php:122 +msgid "Really delete this state? This may cause data problems!" +msgstr "" + +#: ticket/delete.php:34 +msgid "" +"Really delete this ticket? It will NOT be archived, and will be gone forever." +msgstr "" +"Bu bilet gerçekten silinsin mi? Arþive atýlmayacak ve tamamen yok olaçaktýr." + +#: lib/Forms/Admin/Type.php:178 +msgid "Really delete this type? This may cause data problems!" +msgstr "" + +#: lib/Forms/Admin/Version.php:97 +msgid "Really delete this version? This may cause data problems!" +msgstr "" + +#: lib/Mail.php:218 +msgid "Received message:" +msgstr "Alýnmýþ Ýleti" + +#: search.php:162 +msgid "Refine Search" +msgstr "Aramayý derinleþtir" + +#: admin/index.php:1170 +msgid "Reminders were sent." +msgstr "Hatýrlatýcýlar gönderildi." + +#: lib/Forms/Admin/User.php:59 +msgid "Remove User" +msgstr "Kullanýcýyý Sil" + +#: ticket/watch.php:49 +msgid "Remove Watcher" +msgstr "Takipciyi Sil" + +#: templates/prefs/sourceselect.inc:300 +msgid "Remove source" +msgstr "Kaynaðý Sil" + +#: lib/Renderer/Comment.php:95 +msgid "Reply to this comment" +msgstr "Bu yoruma yanýt ver" + +#: reports.php:40 +msgid "Reports" +msgstr "Raporlar" + +#: lib/Whups.php:684 lib/Ticket.php:965 lib/Renderer/Query.php:86 +msgid "Requester" +msgstr "Baþvurucu" + +#: lib/Forms/Admin/Attribute.php:28 lib/Forms/Admin/Attribute.php:99 +msgid "Required Attribute?" +msgstr "" + +#: lib/Whups.php:689 lib/api.php:927 lib/Driver.php:199 lib/Ticket.php:991 +#: lib/Renderer/Query.php:151 config/prefs.php.dist:54 +msgid "Resolved" +msgstr "Çözülmüþ" + +#: lib/Forms/Query.php:330 lib/Forms/Search.php:60 +msgid "Resolved from" +msgstr "Tarihinden Beri Çözülmüþ" + +#: lib/Forms/Query.php:331 +msgid "Resolved to" +msgstr "Tarihine Kadar Çözülmüþ" + +#: lib/Forms/Admin/User.php:61 +msgid "Responsible Users" +msgstr "Sorumlu Kullanýcýlar" + +#: lib/Whups.php:310 +msgid "S_et Queue" +msgstr "Kuyruðu Belirle" + +#: lib/Query.php:234 +msgid "Sa_ve Query" +msgstr "Sorgulamayý _Kaydet" + +#: templates/view/results.inc:96 lib/Forms/Query.php:385 +msgid "Save" +msgstr "Kaydet" + +#: query/index.php:233 +msgid "Save Criterion" +msgstr "Kriteri Kaydet" + +#: lib/Forms/Query.php:384 +msgid "Save Query" +msgstr "Sorgulamayý kaydet" + +#: search.php:69 lib/Forms/Search.php:19 +msgid "Save as Query" +msgstr "Sorgulama olarak Kaydet" + +#: search.php:155 lib/Block/tree_menu.php:30 +msgid "Search" +msgstr "Ara" + +#: lib/Forms/Query.php:278 +#, php-format +msgid "Search %s Attribute" +msgstr "" + +#: lib/Forms/Query.php:272 lib/Forms/Query.php:281 +msgid "Search Attribute" +msgstr "" + +#: lib/Forms/Query.php:48 lib/Forms/Query.php:131 +msgid "Search Comments" +msgstr "Yorumlarý Ara" + +#: lib/Forms/Query.php:46 +msgid "Search Owners" +msgstr "Sahipleri Ara" + +#: lib/Forms/Query.php:47 +msgid "Search Requester" +msgstr "Baþvuraný Ara" + +#: search.php:147 search/rss.php:55 search/rss.php:59 +msgid "Search Results" +msgstr "Arama Sonuçlarý" + +#: templates/prevnext.inc:38 +#, php-format +msgid "Search Results: %s of %s" +msgstr "Arama Sonuçlarý: %s / %s" + +#: lib/Forms/Query.php:130 +msgid "Search Summary" +msgstr "Özetete Göre Ara" + +#: config/prefs.php.dist:76 +msgid "Search Tickets" +msgstr "Bilet Ara" + +#: config/prefs.php.dist:25 +msgid "Select address book sources for adding and searching for addresses." +msgstr "Adres rehberi kaynaklarýný eklemek ve aramak için seçin." + +#: templates/prefs/sourceselect.inc:319 +msgid "Select all fields to search when expanding addresses." +msgstr "" + +#: config/prefs.php.dist:78 +msgid "Select the view to display after login:" +msgstr "" + +#: templates/prefs/sourceselect.inc:303 templates/prefs/sourceselect.inc:305 +msgid "Selected Address books:" +msgstr "Seçilmiþ Adresrehberleri:" + +#: admin/index.php:36 +msgid "Sen_d Reminders" +msgstr "_Hatýrlatýcý Gönder" + +#: lib/Forms/Admin.php:23 +msgid "Send Reminders" +msgstr "Hatýrlatýcý Gönder" + +#: lib/Forms/Admin.php:34 +msgid "Send only for this list of ticket ids" +msgstr "" + +#: lib/Forms/Admin/Priority.php:80 lib/Forms/Admin/Priority.php:82 +msgid "Set Default Priority" +msgstr "Standart Önceliði Belirle" + +#: lib/Forms/Admin/State.php:80 lib/Forms/Admin/State.php:82 +msgid "Set Default State" +msgstr "Varsayýlan Durumu Belirle" + +#: ticket/queue.php:201 ticket/queue.php:210 ticket/queue.php:222 +msgid "Set Queue - Step 1" +msgstr "Kuyruk Ayarla - 1 Adým" + +#: ticket/queue.php:202 ticket/queue.php:211 +msgid "Set Queue - Step 2" +msgstr "Kuyruk Ayarla - 2 Adým" + +#: ticket/queue.php:212 +msgid "Set Queue - Step 3" +msgstr "Kuyruk Ayarla - 3 Adým" + +#: ticket/queue.php:189 +#, php-format +msgid "Set Queue for %s" +msgstr "%s için Kuyruðu belirle" + +#: lib/api.php:800 +msgid "Set Requester" +msgstr "Baþvuraný Belirle" + +#: ticket/type.php:139 ticket/type.php:148 +msgid "Set Type - Step 1" +msgstr "" + +#: ticket/type.php:140 +msgid "Set Type - Step 2" +msgstr "" + +#: ticket/type.php:127 +#, php-format +msgid "Set Type for %s" +msgstr "%s için Türü belirle" + +#: lib/Whups.php:315 +msgid "Set _Type" +msgstr "Türü Ayarla" + +#: config/prefs.php.dist:144 +msgid "Show comments in chronological order, or most recent first?" +msgstr "" + +#: config/prefs.php.dist:95 +msgid "Show ticket IDs in the summary view?" +msgstr "Özet görünümde bilet ID'leri gösterilsin mi?" + +#: config/prefs.php.dist:87 +msgid "Show tickets you have requested in the summary view?" +msgstr "Baþvuduðunuz biletler özet bakýþýnda gösterilsin mi?" + +#: config/templates.php.dist:16 +msgid "Simple HTML Report" +msgstr "Basit HTML Rapor" + +#: lib/Forms/Admin/Queue.php:27 +#, php-format +msgid "" +"Slugs allows direct access to this queue's open tickets by visiting: %s. " +"
Slug names may contain only letters, numbers or the _ (underscore) " +"character." +msgstr "" + +#: templates/view/results.inc:37 templates/view/results.inc:41 +#, php-format +msgid "Sort by %s" +msgstr "%s göre sirala" + +#: lib/Forms/AddComment.php:20 lib/Forms/AddComment.php:51 +#: lib/Forms/CreateTicket.php:136 lib/Forms/CreateTicket.php:175 +msgid "Spam protection" +msgstr "Ýstenilmeyen Ýleti önlemi" + +#: ticket/type.php:65 ticket/queue.php:116 lib/Whups.php:674 lib/Whups.php:680 +#: lib/Ticket.php:609 lib/Ticket.php:806 lib/Ticket.php:949 +#: lib/Forms/EditTicket.php:62 lib/Forms/Query.php:193 +#: lib/Renderer/Query.php:117 config/prefs.php.dist:47 +msgid "State" +msgstr "Durum" + +#: lib/Renderer/Comment.php:110 +#, php-format +msgid "State ⇒ %s" +msgstr "Durum ⇒ %s" + +#: lib/Forms/Admin/State.php:25 lib/Forms/Admin/State.php:70 +msgid "State Category" +msgstr "Durum Kategorisi" + +#: lib/Forms/Admin/State.php:24 lib/Forms/Admin/State.php:67 +#: lib/Forms/Admin/State.php:118 +msgid "State Description" +msgstr "Durum Betimlemesi" + +#: lib/Forms/Admin/State.php:23 lib/Forms/Admin/State.php:47 +#: lib/Forms/Admin/State.php:64 lib/Forms/Admin/State.php:96 +#: lib/Forms/Admin/State.php:115 +msgid "State Name" +msgstr "Durum Adý" + +#: lib/Forms/Admin/Type.php:76 lib/Forms/Admin/Type.php:165 +msgid "States for this Type" +msgstr "Bu durum için türler" + +#: templates/ticket/watchers.inc:1 +msgid "Status" +msgstr "Statüsü" + +#: ticket/create.php:146 +msgid "Submit" +msgstr "Gönder" + +#: query/run.php:93 query/run.php:94 +msgid "Subscribe to this query" +msgstr "Bu sorgulamaya üye ol" + +#: admin/index.php:198 +#, php-format +msgid "Successfully Cloned %s to %s." +msgstr "%s'in %s'e klonlanmasý baþarýlý gerçekleþtirildi" + +#: ticket/type.php:118 +msgid "Successfully changed ticket type." +msgstr "Bilet türü baþarýyla deðiþtirildi" + +#: ticket/delete.php:30 lib/Whups.php:672 lib/Whups.php:679 lib/Ticket.php:616 +#: lib/Ticket.php:643 lib/Ticket.php:646 lib/Ticket.php:650 lib/Ticket.php:812 +#: lib/Ticket.php:821 lib/Ticket.php:912 lib/Forms/EditTicket.php:58 +#: lib/Forms/CreateTicket.php:152 lib/Renderer/Query.php:89 +#: config/prefs.php.dist:46 +msgid "Summary" +msgstr "Özet" + +#: lib/Renderer/Comment.php:51 +#, php-format +msgid "Summary ⇒ %s" +msgstr "Özet ⇒ %s" + +#: lib/Forms/Search.php:43 +msgid "Summary like" +msgstr "Özetine benzeyen" + +#: lib/Renderer/Comment.php:79 +#, php-format +msgid "Taken from %s" +msgstr "%s'den alýnma" + +#: lib/Forms/Query.php:128 +msgid "Text" +msgstr "" + +#: lib/Driver/sql.php:80 lib/Driver/sql.php:1306 +msgid "That queue slug is already taken. Please select another." +msgstr "" + +#: lib/Forms/CreateTicket.php:129 +msgid "The Requester's Email Address" +msgstr "Baþvurucunun Eposta Adresi" + +#: view.php:58 lib/Ticket.php:439 lib/Ticket.php:487 +msgid "The VFS backend needs to be configured to enable attachment uploads." +msgstr "" + +#: admin/index.php:906 +#, php-format +msgid "The attribute \"%s\" has been added to %s." +msgstr "" + +#: admin/index.php:1006 +msgid "The attribute has been deleted." +msgstr "" + +#: admin/index.php:974 +msgid "The attribute has been modified." +msgstr "" + +#: admin/index.php:1015 +msgid "The attribute was not deleted." +msgstr "" + +#: admin/index.php:642 +msgid "The default priority has been set." +msgstr "" + +#: admin/index.php:506 +msgid "The default state has been set." +msgstr "" + +#: admin/index.php:1043 +#, php-format +msgid "The form reply \"%s\" has been added to %s." +msgstr "" + +#: admin/index.php:1135 +msgid "The form reply has been deleted." +msgstr "" + +#: admin/index.php:1108 +msgid "The form reply has been modified." +msgstr "" + +#: admin/index.php:1144 +msgid "The form reply was not deleted." +msgstr "" + +#: admin/index.php:556 +#, php-format +msgid "The priority \"%s\" has been added to %s." +msgstr "" + +#: admin/index.php:661 +msgid "The priority has been deleted." +msgstr "" + +#: admin/index.php:609 +msgid "The priority has been modified." +msgstr "" + +#: admin/index.php:670 +msgid "The priority was not deleted." +msgstr "" + +#: lib/Forms/Query.php:463 +#, php-format +msgid "The query \"%s\" couldn't be deleted: %s" +msgstr "" + +#: lib/Forms/Query.php:465 +#, php-format +msgid "The query \"%s\" has been deleted." +msgstr "" + +#: lib/Forms/Query.php:430 +#, php-format +msgid "The query couldn't be loaded:" +msgstr "" + +#: admin/index.php:300 +#, php-format +msgid "The queue \"%s\" has been created." +msgstr "" + +#: admin/index.php:392 +msgid "The queue has been deleted." +msgstr "" + +#: admin/index.php:359 +msgid "The queue has been modified." +msgstr "" + +#: admin/index.php:400 +msgid "The queue was not deleted." +msgstr "" + +#: lib/MIME/Viewer/zip.php:58 +msgid "The requested file does not exist in the Zip attachment." +msgstr "" + +#: data.php:26 +msgid "The requested template does not exist." +msgstr "" + +#: admin/index.php:422 +#, php-format +msgid "The state \"%s\" has been added to %s." +msgstr "" + +#: admin/index.php:525 +msgid "The state has been deleted." +msgstr "" + +#: admin/index.php:475 +msgid "The state has been modified." +msgstr "" + +#: admin/index.php:533 +msgid "The state was not deleted." +msgstr "Durum silinmedi." + +#: ticket/delete.php:78 +msgid "The ticket was not deleted." +msgstr "Bilet silinmedi." + +#: admin/index.php:223 +#, php-format +msgid "The type \"%s\" has been modified." +msgstr "" + +#: admin/index.php:272 +msgid "The type has been deleted." +msgstr "" + +#: admin/index.php:280 +msgid "The type was not deleted." +msgstr "" + +#: admin/index.php:776 +#, php-format +msgid "The version \"%s\" has been added to %s." +msgstr "" + +#: admin/index.php:865 +msgid "The version has been deleted." +msgstr "" + +#: admin/index.php:835 +msgid "The version has been modified." +msgstr "" + +#: admin/index.php:873 +msgid "The version was not deleted." +msgstr "" + +#: lib/Forms/Admin/Attribute.php:70 +msgid "There are no attribute types to edit" +msgstr "" + +#: lib/Forms/Query.php:281 +msgid "There are no attributes defined." +msgstr "" + +#: lib/Forms/Admin/Reply.php:48 +msgid "There are no form replies to edit" +msgstr "" + +#: lib/Block/queuesummary.php:44 +msgid "There are no open tickets." +msgstr "" + +#: lib/Forms/Admin/Priority.php:44 lib/Forms/Admin/Priority.php:90 +msgid "There are no priorities to edit" +msgstr "" + +#: lib/Forms/Admin.php:31 +msgid "There are no queues available." +msgstr "" + +#: lib/Forms/Admin/Queue.php:57 +msgid "There are no queues to edit" +msgstr "" + +#: lib/Forms/CreateTicket.php:35 +msgid "There are no queues which you can create tickets in." +msgstr "" + +#: lib/Forms/Search.php:38 +msgid "There are no queues which you can search." +msgstr "" + +#: lib/Forms/Admin/State.php:43 lib/Forms/Admin/State.php:92 +msgid "There are no states to edit" +msgstr "" + +#: lib/Forms/CreateTicket.php:72 +msgid "" +"There are no ticket types associated with this queue; until there are, you " +"cannot create any tickets in this queue." +msgstr "" + +#: lib/Forms/Admin/Type.php:45 +msgid "There are no types to edit" +msgstr "" + +#: lib/Forms/Admin/User.php:75 +msgid "There are no users responsible for this queue." +msgstr "" + +#: lib/Forms/CreateTicket.php:242 +msgid "There are no users to which this ticket can be assigned." +msgstr "" + +#: lib/Forms/Admin/Version.php:44 +msgid "There are no versions to edit" +msgstr "" + +#: lib/Reports.php:143 +msgid "There is no data for this report." +msgstr "Bu rapor için veri bulunmamakta." + +#: admin/index.php:705 +#, php-format +msgid "There was an error adding \"%s\" to the responsible list for \"%s\":" +msgstr "" + +#: admin/index.php:911 +msgid "There was an error creating the attribute:" +msgstr "" + +#: admin/index.php:1051 +msgid "There was an error creating the form reply:" +msgstr "" + +#: admin/index.php:561 +msgid "There was an error creating the priority:" +msgstr "" + +#: admin/index.php:309 +msgid "There was an error creating the queue:" +msgstr "" + +#: admin/index.php:426 +msgid "There was an error creating the state:" +msgstr "" + +#: admin/index.php:780 +msgid "There was an error creating the version:" +msgstr "" + +#: admin/index.php:1010 +msgid "There was an error deleting the attribute:" +msgstr "" + +#: admin/index.php:1139 +msgid "There was an error deleting the form reply:" +msgstr "" + +#: admin/index.php:665 +msgid "There was an error deleting the priority:" +msgstr "" + +#: admin/index.php:395 +msgid "There was an error deleting the queue:" +msgstr "" + +#: admin/index.php:528 +msgid "There was an error deleting the state:" +msgstr "" + +#: ticket/delete.php:75 +msgid "There was an error deleting the ticket:" +msgstr "" + +#: admin/index.php:275 +msgid "There was an error deleting the type:" +msgstr "" + +#: admin/index.php:868 +msgid "There was an error deleting the version:" +msgstr "" + +#: admin/index.php:982 +msgid "There was an error editing the attribute:" +msgstr "" + +#: admin/index.php:1104 +msgid "There was an error editing the form reply:" +msgstr "" + +#: admin/index.php:615 +msgid "There was an error editing the priority:" +msgstr "" + +#: admin/index.php:375 +msgid "There was an error editing the queue:" +msgstr "" + +#: admin/index.php:480 +msgid "There was an error editing the state:" +msgstr "" + +#: admin/index.php:841 +msgid "There was an error editing the version:" +msgstr "" + +#: lib/Forms/Admin/User.php:35 +#, php-format +msgid "There was an error listing users: %s; %s" +msgstr "" + +#: queue/index.php:52 +#, php-format +msgid "There was an error locating tickets in this queue: " +msgstr "" + +#: admin/index.php:219 +msgid "There was an error modifying the type:" +msgstr "" + +#: search.php:140 +#, php-format +msgid "There was an error performing your search: %s" +msgstr "" + +#: admin/index.php:750 +#, php-format +msgid "" +"There was an error removing \"%s\" from the responsible list for \"%s\":" +msgstr "" + +#: admin/index.php:638 +msgid "There was an error setting the default priority:" +msgstr "" + +#: admin/index.php:502 +msgid "There was an error setting the default state:" +msgstr "" + +#: lib/Forms/AddComment.php:37 lib/Forms/EditTicket.php:166 +msgid "This comment is visible to everyone" +msgstr "Bu yorum herkese açýk" + +#: lib/Forms/Admin/Queue.php:31 +msgid "" +"This email address will be used when sending notifications for any queue " +"tickets." +msgstr "" +"Bu eposta adresi bir kuyruk için gönderilen bilgiler için kullanýlacaktýr." + +#: data.php:29 +msgid "This is not a search results template." +msgstr "" + +#: lib/Query.php:435 lib/Query.php:668 +msgid "This query element cannot be edited." +msgstr "" + +#: ticket/queue.php:81 lib/Forms/CreateTicket.php:88 +msgid "" +"This queue requires that you specify a version, but there are no versions " +"associated with it. Until versions are created for this queue, you will not " +"be able to create tickets." +msgstr "" + +#: lib/Ticket.php:638 lib/Ticket.php:820 +msgid "Ticket" +msgstr "Bilet" + +#: ticket/delete.php:71 +#, php-format +msgid "Ticket %d has been deleted." +msgstr "Bilet %d baþarýyla silinmiþtir." + +#: lib/api.php:850 +#, php-format +msgid "Ticket %s - %s" +msgstr "" + +#: lib/Driver/sql.php:1081 +#, php-format +msgid "Ticket %s was not found." +msgstr "Bilet %s bulunamadý." + +#: search.php:170 +msgid "Ticket Search" +msgstr "Bilet Ara" + +#: lib/Forms/CreateTicket.php:142 +msgid "Ticket State" +msgstr "Bilet Durumu" + +#: templates/reports/stats.inc:1 +msgid "Ticket Stats" +msgstr "Bilet Ýstatistikleri" + +#: lib/Forms/CreateTicket.php:80 +msgid "Ticket Type" +msgstr "Bilet Türü" + +#: lib/Forms/Admin/Queue.php:103 +msgid "Ticket Types associated with this Queue" +msgstr "" + +#: lib/Ticket.php:633 +#, php-format +msgid "Ticket URL: %s" +msgstr "Bilet URL'si: %s" + +#: ticket/update.php:94 +msgid "Ticket Updated" +msgstr "Bilet Güncelleþtirildi" + +#: lib/api.php:871 +msgid "Tickets" +msgstr "Biletler" + +#: query/rss.php:70 +#, php-format +msgid "Tickets matching the query \"%s\"." +msgstr "" + +#: templates/prefs/sourceselect.inc:322 +msgid "" +"To select multiple fields, hold down the Control (PC) or Command (Mac) while " +"clicking." +msgstr "" + +#: ticket/queue.php:89 lib/Whups.php:681 lib/Ticket.php:608 lib/Ticket.php:805 +#: lib/Ticket.php:945 lib/Forms/Query.php:174 lib/Renderer/Query.php:108 +#: config/prefs.php.dist:48 +msgid "Type" +msgstr "Tür" + +#: lib/Renderer/Comment.php:105 +#, php-format +msgid "Type ⇒ %s" +msgstr "" + +#: lib/Forms/Admin/Type.php:23 lib/Forms/Admin/Type.php:70 +#: lib/Forms/Admin/Type.php:160 +msgid "Type Description" +msgstr "Tür Tanýmlamasý" + +#: lib/Forms/Admin/Type.php:22 lib/Forms/Admin/Type.php:48 +#: lib/Forms/Admin/Type.php:67 lib/Forms/Admin/Type.php:156 +msgid "Type Name" +msgstr "Tür Adý" + +#: search/rss.php:39 +#, php-format +msgid "Type: %s; State: %s" +msgstr "" + +#: lib/Ticket.php:961 +msgid "Unassigned" +msgstr "Atanmamýþ" + +#: lib/Block/unassigned.php:3 lib/Block/unassigned.php:24 +msgid "Unassigned Tickets" +msgstr "Atanmamýþ Biletler" + +#: lib/Forms/Admin.php:42 +msgid "Unassigned tickets" +msgstr "Atanmamýþ biletler" + +#: lib/Driver.php:196 +msgid "Unconfirmed" +msgstr "Tastiklenmemiþ" + +#: lib/Renderer/Query.php:167 lib/Renderer/Query.php:207 +#, php-format +msgid "Unknown node type %s" +msgstr "" + +#: lib/api.php:790 +msgid "Update" +msgstr "Güncelle" + +#: ticket/update.php:108 +#, php-format +msgid "Update %s" +msgstr "%s Güncelle" + +#: templates/admin/mtmatrix.inc:29 +msgid "Update Associations" +msgstr "Ýliþkiyi Güncelle" + +#: lib/Whups.php:687 lib/Ticket.php:981 lib/Renderer/Query.php:146 +msgid "Updated" +msgstr "Güncelleþtirilme" + +#: lib/Ticket.php:615 lib/Ticket.php:640 +msgid "Updated By" +msgstr "Þahýs Tarafýndan Güncelleþtirildi" + +#: lib/Forms/Query.php:327 lib/Forms/Search.php:58 +msgid "Updated from" +msgstr "Tarihinden beri Güncelleþtirilme" + +#: lib/Forms/Query.php:328 +msgid "Updated to" +msgstr "Tarihine kadar Güncelleþtirilme" + +#: lib/Forms/Admin/User.php:34 lib/Forms/Admin/User.php:44 +#: lib/Forms/Admin/User.php:47 +msgid "User" +msgstr "Kullanýcý" + +#: lib/Forms/Query.php:44 +msgid "User ID" +msgstr "Kullanýcý ID'si" + +#: lib/Forms/Admin/Queue.php:131 +msgid "Users responsible for this Queue" +msgstr "Bu Kuyrukdan sorumlu kullanýcýlar" + +#: lib/Forms/Admin/User.php:79 +msgid "Users responsible for this queue" +msgstr "Bu kuyruktan sorumlu kullanýcýlar" + +#: lib/Ticket.php:607 lib/Ticket.php:804 lib/Forms/Query.php:185 +#: lib/Renderer/Query.php:102 config/prefs.php.dist:51 +msgid "Version" +msgstr "Sürüm" + +#: lib/Forms/Admin/Version.php:24 lib/Forms/Admin/Version.php:70 +#: lib/Forms/Admin/Version.php:93 +msgid "Version Description" +msgstr "Sürüm Tanýmlamasý" + +#: lib/Forms/Admin/Version.php:23 lib/Forms/Admin/Version.php:48 +#: lib/Forms/Admin/Version.php:67 lib/Forms/Admin/Version.php:90 +msgid "Version Name" +msgstr "Sürüm Adý" + +#: ticket/type.php:43 ticket/queue.php:50 +msgid "Viewable only by members of" +msgstr "Sadece þu grublarin üyeleri tarafýndan izlenebilsin" + +#: lib/Forms/AddComment.php:25 +msgid "Watch this ticket" +msgstr "Bu bileti takip et" + +#: ticket/watch.php:78 +#, php-format +msgid "Watchers for %s" +msgstr "%s takip edenler" + +#: config/prefs.php.dist:104 +msgid "Weekday Day Month" +msgstr "Ýþgünü Gün Ay" + +#: config/prefs.php.dist:105 +msgid "Weekday Day Month HH:MM:SS TZ" +msgstr "Ýþgünü Gün Ay SS:DD:SS TZ" + +#: ticket/delete.php:33 lib/Forms/Query.php:449 lib/Forms/Admin/Queue.php:174 +#: lib/Forms/Admin/State.php:121 lib/Forms/Admin/Type.php:176 +#: lib/Forms/Admin/Reply.php:110 lib/Forms/Admin/Version.php:96 +#: lib/Forms/Admin/Attribute.php:149 lib/Forms/Admin/Priority.php:121 +msgid "Yes" +msgstr "Evet" + +#: view.php:54 +#, php-format +msgid "You are not allowed to view ticket %d." +msgstr "%d biletini bakmaya izniniz yok." + +#: lib/Driver/sql.php:1090 +#, php-format +msgid "You do not have permission to access this ticket (%s)." +msgstr "Ýzniniz bu biletin (%s) eriþimine yok." + +#: lib/api.php:375 +msgid "You do not have permission to update this ticket." +msgstr "Bu bileti güncelleþtirmeye izniniz yok" + +#: lib/Block/myrequests.php:46 +msgid "You have no open requests." +msgstr "Mevcut açýk baþvurularýnýz yok." + +#: lib/Block/query.php:28 lib/Forms/Query.php:419 +msgid "You have no saved queries." +msgstr "Kaydedilmiþ sorgulamalarýnýz yok." + +#: lib/Whups.php:714 +msgid "You must select at least one queue to send reminders for." +msgstr "" + +#: lib/Forms/AddComment.php:18 lib/Forms/CreateTicket.php:132 +msgid "Your Email Address" +msgstr "Eposta adresiniz" + +#: ticket/create.php:60 +#, php-format +msgid "" +"Your ticket ID is %s. An appropriate person has been notified of this " +"request." +msgstr "Bilet ID'niz %s. Bu baþvuru için sorumlu bir þahýsa haber verildi." + +#: lib/Mail.php:245 +msgid "[ Could not render body of message. ]" +msgstr "" + +#: lib/Whups.php:778 +msgid "_Admin" +msgstr "_Yönetim" + +#: lib/Whups.php:302 +msgid "_Comment" +msgstr "_Yorum" + +#: query/index.php:157 +msgid "_Date Criteria" +msgstr "_Veri Kriterleri" + +#: lib/Whups.php:320 +msgid "_Delete" +msgstr "_Sil" + +#: lib/Query.php:237 +msgid "_Delete Query" +msgstr "Sorgulamayý _Sil" + +#: lib/Query.php:218 +msgid "_Edit Query" +msgstr "Sorgulamayý _Düzenle" + +#: admin/index.php:33 +msgid "_Edit Queues" +msgstr "Kuyruklarý _Düzenle" + +#: templates/menu.inc:5 +msgid "_Go" +msgstr "" + +#: query/index.php:156 +msgid "_Group Criteria" +msgstr "Kriterleri _Gruplaþtýr" + +#: lib/Whups.php:296 +msgid "_History" +msgstr "_Geçmiþ" + +#: lib/Query.php:231 +msgid "_Load Query" +msgstr "Sorgulamalarý _Yükle" + +#: lib/Whups.php:769 +#, php-format +msgid "_My %s" +msgstr "_Benim %s" + +#: lib/Whups.php:772 +msgid "_New Ticket" +msgstr "_Yeni Bilet" + +#: query/index.php:154 +msgid "_Property Criteria" +msgstr "Ö_zellik Kriteri" + +#: lib/Whups.php:773 +msgid "_Query Builder" +msgstr "_Sorgulama Kurucusu" + +#: lib/Whups.php:774 +msgid "_Reports" +msgstr "_Raporlar" + +#: lib/Whups.php:771 +msgid "_Search" +msgstr "_Ara" + +#: query/index.php:158 +msgid "_Text Criteria" +msgstr "_Yazý Kriteri" + +#: lib/Whups.php:298 +msgid "_Update" +msgstr "_Güncelle" + +#: query/index.php:155 +msgid "_User Criteria" +msgstr "_Kullanýcý Kriteri" + +#: lib/Whups.php:306 +msgid "_Watch" +msgstr "_Takip" + +#: lib/Renderer/Query.php:187 +msgid "contains (case insensitive) substring" +msgstr "" + +#: lib/Renderer/Query.php:191 +msgid "contains (case sensitive) substring" +msgstr "" + +#: lib/Renderer/Query.php:195 +msgid "contains the word" +msgstr "" + +#: lib/Mail.php:95 lib/Mail.php:119 lib/Mail.php:147 +msgid "current user:" +msgstr "mevcut kullanýcý:" + +#: lib/api.php:859 +msgid "estimated time" +msgstr "tahmin zaman" + +#: lib/Renderer/Query.php:183 +msgid "is" +msgstr "" + +#: lib/Renderer/Query.php:175 +msgid "is greater than" +msgstr "" + +#: lib/Renderer/Query.php:179 +msgid "is less than" +msgstr "" + +#: lib/Renderer/Query.php:199 +msgid "matches the pattern" +msgstr "" + +#: lib/Forms/Search.php:57 lib/Forms/Search.php:59 lib/Forms/Search.php:61 +#: lib/Forms/Search.php:63 lib/Forms/Search.php:65 +msgid "to" +msgstr "" diff --git a/whups/po/uk_UA.po b/whups/po/uk_UA.po new file mode 100644 index 000000000..c4652b1ec --- /dev/null +++ b/whups/po/uk_UA.po @@ -0,0 +1,2461 @@ +# Ukrainian translations for Whups package. +# Copyright 2008-2009 The Horde Project +# This file is distributed under the same license as the Whups package. +# Automatically generated, 2008. +# +msgid "" +msgstr "" +"Project-Id-Version: Whups 1.0-cvs\n" +"Report-Msgid-Bugs-To: dev@lists.horde.org\n" +"POT-Creation-Date: 2008-11-28 12:45+0200\n" +"PO-Revision-Date: 2008-12-05 12:00+0200\n" +"Last-Translator: Andriy Kopystyansky \n" +"Language-Team: Ukrainian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CP1251\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: admin/index.php:745 +#, php-format +msgid "\"%s\" is no longer among those responsible for \"%s\"" +msgstr "\"%s\" á³ëüøå íå º ñåðåä â³äïîâ³äàëüíèõ çà \"%s\"" + +#: templates/menu.inc:5 +msgid "#Id" +msgstr "" + +#: templates/ticket/watchers.inc:3 +#, php-format +msgid "%d people watching, %d people responsible" +msgstr "%d îñ³á ñïîñòåð³ãàþòü, %d îñîáà â³äïîâ³äàëüíà" + +#: queue/rss.php:96 +#, php-format +msgid "%s %s tickets in %s" +msgstr "%s %s òàðíàí³â â %s" + +#: queue/rss.php:100 +#, php-format +msgid "%s %s tickets in all queues" +msgstr "%s %s òàðãàí³â ó âñ³õ ÷åðãàõ" + +#: lib/Renderer/Comment.php:120 +#, php-format +msgid "%s ⇒ %s" +msgstr "" + +#: lib/Driver.php:497 +#, php-format +msgid "%s (%s) wrote:" +msgstr "%s (%s) íàïèñàâ:" + +#: admin/index.php:700 +#, php-format +msgid "%s added to those responsible for \"%s\"" +msgstr "%s äîäàíèé äî â³äïîâ³äàëüíèõ çà \"%s\"" + +#: templates/reports/stats.inc:15 +#, php-format +msgid "%s days" +msgstr "%s äí³â" + +#: queue/rss.php:104 +#, php-format +msgid "%s tickets in %s" +msgstr "%s òàðãàí³â â %s" + +#: queue/rss.php:108 +#, php-format +msgid "%s tickets in all queues" +msgstr "%s òàðãàí³â ó âñ³õ ÷åðãàõ" + +#: ticket/watch.php:60 +#, php-format +msgid "%s will be notified when this ticket is updated." +msgstr "%s áóäå ïîâ³äîìëåíèé ïðè îíîâëåíí³ öüîãî çàïèòó." + +#: ticket/watch.php:72 +#, php-format +msgid "%s will no longer receive updates for this ticket." +msgstr "%s á³ëüøå íå îòðèìóâàòèìå îíîâëåíü ùîäî öüîãî çàïèòó." + +#: admin/index.php:109 +msgid "- Stage 1" +msgstr "- Ñòàä³ÿ 1" + +#: admin/index.php:114 +msgid "- Stage 2" +msgstr "- Ñòàä³ÿ 2" + +#: scripts/mail-filter.php:172 +msgid "--queue-name or --queue-id must specify a valid and public queue." +msgstr "" + +#: templates/prevnext.inc:16 +msgid "<>" +msgstr "" + +#: lib/Forms/Query.php:411 +msgid "Load Query" +msgstr "" + +#: lib/Forms/VarRenderer.php:46 +msgid "Loading..." +msgstr "Çàâàíòàæóþ..." + +#: config/prefs.php.dist:106 +msgid "MM/DD/YY" +msgstr "" + +#: config/prefs.php.dist:107 +msgid "MM/DD/YY HH:MM:SS" +msgstr "" + +#: lib/Forms/Admin/Type.php:193 +#, php-format +msgid "Make a clone of %s" +msgstr "" + +#: lib/Forms/AddComment.php:38 lib/Forms/EditTicket.php:167 +msgid "Make this comment visible only to members of a group?" +msgstr "Çðîáèòè öåé êîìåíòàð âèäèìèì ò³ëüêè äëÿ ÷ëåí³â ãðóïè?" + +#: lib/Forms/Query.php:274 +msgid "Match" +msgstr "" + +#: lib/Forms/Query.php:45 lib/Forms/Query.php:129 lib/Forms/Query.php:275 +msgid "Match Operator" +msgstr "" + +#: lib/Query.php:167 +msgid "Match Pattern" +msgstr "" + +#: lib/Query.php:166 +msgid "Match Word" +msgstr "" + +#: reports.php:30 +msgid "Maximum time a ticket is unresolved" +msgstr "Ìàêñèìàëüíèé ÷àñ, çà ÿêèé òàðãàí íå áóâ âèð³øåíèé" + +#: lib/Block/tree_menu.php:3 +msgid "Menu List" +msgstr "Ñïèñîê ìåíþ" + +#: reports.php:31 +msgid "Minimum time a ticket is unresolved" +msgstr "̳í³ìàëüíèé ÷àñ, çà ÿêèé òàðãàí íå áóâ âèð³øåíèé" + +#: config/prefs.php.dist:146 +msgid "Most recent first" +msgstr "Ñïî÷àòêó ñâ³æ³ø³" + +#: templates/prefs/sourceselect.inc:312 +msgid "Move down" +msgstr "Äîíèçó" + +#: templates/prefs/sourceselect.inc:310 +msgid "Move up" +msgstr "Äîãîðè" + +#: ticket/queue.php:181 +#, php-format +msgid "Moved ticket %d to \"%s\"" +msgstr "Ïåðåíåñåíî òàðãàíà %d äî \"%s\"" + +#: mybugs.php:54 +#, php-format +msgid "My %s" +msgstr "Ìî¿ %s" + +#: mybugs_edit.php:33 +#, php-format +msgid "My %s :: Add Content" +msgstr "Ìî¿ %s :: Äîäàòè êîíòåíò" + +#: search.php:178 lib/Block/myqueries.php:3 lib/Block/myqueries.php:24 +msgid "My Queries" +msgstr "Ìî¿ çàïèòè" + +#: lib/Block/myrequests.php:3 lib/Block/myrequests.php:24 +msgid "My Requests" +msgstr "" + +#: lib/Block/mytickets.php:3 lib/Block/mytickets.php:24 +#: config/prefs.php.dist:75 +msgid "My Tickets" +msgstr "Ìî¿ òàðãàíè" + +#: lib/api.php:884 +msgid "My tickets by assignment date" +msgstr "Ìî¿ òàðãàíè ïî äàò³ ïðèçíà÷åííÿ" + +#: lib/api.php:883 +msgid "My tickets by creation date" +msgstr "Ìî¿ òàðãàíè ïî äàò³ ñòâîðåííÿ" + +#: lib/api.php:885 +msgid "My tickets by due date" +msgstr "Ìî¿ òàðãàíè çà ïåð³îäîì 䳿" + +#: lib/api.php:886 +msgid "My tickets by resolution date" +msgstr "Ìî¿ òàðãàíè ïî äàò³ âèð³øåííÿ" + +#: lib/Forms/Query.php:422 +msgid "Name" +msgstr "²ì'ÿ" + +#: lib/Forms/Admin/Type.php:198 +msgid "Name of the cloned copy" +msgstr "" + +#: lib/Query.php:216 +msgid "Ne_w Query" +msgstr "Íîâèé çàïèò" + +#: lib/Driver.php:197 +msgid "New" +msgstr "Íîâèé" + +#: lib/Ticket.php:618 lib/Ticket.php:711 +msgid "New Attachment" +msgstr "Íîâèé äîäàòîê" + +#: lib/Renderer/Comment.php:58 lib/Renderer/Comment.php:62 +#, php-format +msgid "New Attachment: %s" +msgstr "Íîâèé äîäàòîê: %s" + +#: ticket/queue.php:32 +msgid "New Queue" +msgstr "Íîâà ÷åðãà" + +#: ticket/create.php:67 lib/Block/tree_menu.php:21 +msgid "New Ticket" +msgstr "Íîâèé òàðãàí" + +#: ticket/type.php:31 +msgid "New Type" +msgstr "Íîâèé òèï" + +#: templates/prevnext.inc:26 +msgid "Next>" +msgstr "Íàñòóïíèé>" + +#: ticket/delete.php:33 lib/Forms/Query.php:449 +#: lib/Forms/Admin/Priority.php:121 lib/Forms/Admin/State.php:121 +#: lib/Forms/Admin/Reply.php:110 lib/Forms/Admin/Attribute.php:149 +#: lib/Forms/Admin/Type.php:176 lib/Forms/Admin/Version.php:96 +#: lib/Forms/Admin/Queue.php:174 +msgid "No" +msgstr "ͳ" + +#: lib/Ticket.php:100 +#, php-format +msgid "" +"No priority for this ticket and no default priority for ticket type \"%s\" " +"specified." +msgstr "" + +#: lib/Block/myqueries.php:46 +msgid "No queries have been saved." +msgstr "" + +#: lib/Driver/sql.php:553 lib/Block/query.php:62 +msgid "No query to run" +msgstr "" + +#: lib/Block/queuecontents.php:25 +msgid "No queues available." +msgstr "Íåìà äîñòóïíèõ ÷åðã." + +#: lib/Ticket.php:92 +#, php-format +msgid "" +"No state for this ticket and no default state for ticket type \"%s\" " +"specified." +msgstr "" + +#: reports.php:35 +msgid "No stats available." +msgstr "Íåìà ñòàòèñòè÷íèõ äàíèõ." + +#: lib/Driver.php:533 +#, php-format +msgid "No such backend \"%s\" found" +msgstr "" + +#: lib/View.php:33 +#, php-format +msgid "No such view \"%s\" found" +msgstr "" + +#: lib/Block/mytickets.php:45 +msgid "No tickets are assigned to you." +msgstr "Æîäíîãî òàðãàíà Âàì íå ïðèçíà÷åíî." + +#: lib/Block/unassigned.php:45 +msgid "No tickets are unassigned!" +msgstr "Æîäíîãî ïðèçíà÷åíîãî òàðãàíà!" + +#: lib/Block/queuecontents.php:62 lib/Block/queuecontents.php:73 +msgid "No tickets in queue." +msgstr "Æîäíîãî òàðãàíà â ÷åðç³." + +#: lib/Whups.php:716 +msgid "No tickets matched your search criteria." +msgstr "Æîäåí òàðãàí íå â³äïîâ³äຠêðèòåð³þ ïîøóêó." + +#: lib/Ticket.php:84 +#, php-format +msgid "No type for this ticket and no default type for queue \"%s\" specified." +msgstr "" + +#: templates/prefs/sourceselect.inc:35 lib/Reports.php:67 +msgid "None" +msgstr "Æîäåí" + +#: lib/Renderer/Query.php:79 lib/Forms/Query.php:26 +msgid "Not" +msgstr "Íå" + +#: config/prefs.php.dist:17 +msgid "Notification Options" +msgstr "Îïö³¿ îïîâ³ùåíü" + +#: config/prefs.php.dist:117 +msgid "Only notify me of ticket changes from other users?" +msgstr "Ñïîâ³ùàòè ìåíå ò³ëüêè êîëè òàðãàí çì³íåíèé ³íøèìè îñîáàìè?" + +#: config/prefs.php.dist:126 +msgid "Only notify me of ticket changes with comments?" +msgstr "Ñïîâ³ùàòè ìåíå ò³ëüêè êîëè òàðãàí çì³íåíèé ç êîìåíòàðåì?" + +#: queue/rss.php:43 +msgid "Open" +msgstr "" + +#: lib/Block/queuesummary.php:49 +msgid "Open Tickets" +msgstr "" + +#: reports.php:23 +msgid "Open Tickets by Owner" +msgstr "" + +#: reports.php:21 +msgid "Open Tickets by Priority" +msgstr "" + +#: reports.php:18 +msgid "Open Tickets by Queue" +msgstr "" + +#: reports.php:22 +msgid "Open Tickets by Requester" +msgstr "" + +#: reports.php:19 +msgid "Open Tickets by State" +msgstr "" + +#: reports.php:20 +msgid "Open Tickets by Type" +msgstr "" + +#: lib/Block/queuecontents.php:47 +#, php-format +msgid "Open Tickets in %s" +msgstr "" + +#: queue/rss.php:119 queue/index.php:43 queue/index.php:57 +#, php-format +msgid "Open tickets in %s" +msgstr "³äêðèò³ òàðãàíè â %s" + +#: queue/rss.php:121 +msgid "Open tickets in all queues." +msgstr "" + +#: lib/Renderer/Query.php:78 lib/Forms/Query.php:25 +msgid "Or" +msgstr "Àáî" + +#: lib/Whups.php:681 lib/Ticket.php:617 lib/Ticket.php:701 lib/Ticket.php:702 +#: lib/Ticket.php:705 lib/Ticket.php:812 lib/Ticket.php:833 lib/Ticket.php:958 +#: lib/Renderer/Query.php:84 lib/Forms/CreateTicket.php:225 +#: lib/Forms/CreateTicket.php:243 lib/Forms/EditTicket.php:104 +msgid "Owners" +msgstr "Âëàñíèêè" + +#: lib/Whups.php:866 +#, php-format +msgid "Permanently delete %s?" +msgstr "Íàçàâæäè âèòåðòè %s?" + +#: ticket/type.php:74 ticket/delete.php:51 ticket/deleteAttachment.php:21 +#: ticket/update.php:22 ticket/queue.php:131 +msgid "Permission Denied" +msgstr "Äîñòóï çàáîðîíåíèé" + +#: ticket/delete.php:40 lib/Forms/EditTicket.php:197 +msgid "Permission Denied." +msgstr "Äîñòóï çàáîðîíåíèé." + +#: lib/Forms/Query.php:459 query/run.php:44 query/index.php:31 +#, php-format +msgid "Permission denied." +msgstr "Äîñòóï çàáîðîíåíèé." + +#: lib/Imple/ContactAutoCompleter.php:227 +msgid "Please resolve ambiguous or invalid addresses." +msgstr "Áóäü-ëàñêà, âèïðàâòå íåêîðåêòí³ àäðåñè." + +#: lib/Forms/Admin/Type.php:93 lib/Forms/Admin/Type.php:171 +msgid "Priorities for this Type" +msgstr "Ïð³îðèòåòè äëÿ öüîãî òèïó" + +#: ticket/type.php:66 ticket/queue.php:117 lib/Whups.php:669 lib/Whups.php:678 +#: lib/Ticket.php:610 lib/Ticket.php:807 lib/Ticket.php:953 +#: lib/Renderer/Query.php:125 lib/Forms/Query.php:198 +#: lib/Forms/CreateTicket.php:147 lib/Forms/EditTicket.php:68 +#: config/prefs.php.dist:49 +msgid "Priority" +msgstr "Ïð³îðèòåò" + +#: lib/Renderer/Comment.php:115 +#, php-format +msgid "Priority ⇒ %s" +msgstr "Ïð³îðèòåò ⇒ %s" + +#: lib/Forms/Admin/Priority.php:24 lib/Forms/Admin/Priority.php:70 +#: lib/Forms/Admin/Priority.php:118 +msgid "Priority Description" +msgstr "Îïèñ ïð³îðèòåòó" + +#: lib/Forms/Admin/Priority.php:23 lib/Forms/Admin/Priority.php:48 +#: lib/Forms/Admin/Priority.php:67 lib/Forms/Admin/Priority.php:94 +#: lib/Forms/Admin/Priority.php:115 +msgid "Priority Name" +msgstr "Íàçâà ïð³îðèòåòó" + +#: search.php:178 +msgid "Public Queries" +msgstr "Ïóáë³÷í³ çàïèòè" + +#: query/index.php:172 +msgid "Query Builder" +msgstr "" + +#: lib/Forms/Query.php:387 +msgid "Query Name" +msgstr "Íàçâà çàïèòó" + +#: lib/Forms/QueryParameterForm.php:20 +msgid "Query Parameters" +msgstr "Ïàðàìåòðè çàïèòó" + +#: lib/Block/query.php:3 lib/Block/query.php:49 query/rss.php:63 +#: query/run.php:79 +msgid "Query Results" +msgstr "Ðåçóëüòàòè çàïèòó" + +#: lib/Forms/Query.php:389 +msgid "Query Slug" +msgstr "" + +#: lib/Block/query.php:33 +msgid "Query to run" +msgstr "" + +#: lib/Whups.php:679 lib/Ticket.php:606 lib/Ticket.php:803 lib/Ticket.php:918 +#: lib/Ticket.php:923 lib/Renderer/Query.php:94 lib/Block/queuesummary.php:49 +#: lib/Block/queuecontents.php:32 lib/Forms/Query.php:181 +#: lib/Forms/Search.php:40 config/prefs.php.dist:50 +msgid "Queue" +msgstr "×åðãà" + +#: lib/Renderer/Comment.php:100 +#, php-format +msgid "Queue ⇒ %s" +msgstr "×åðãà ⇒ %s" + +#: lib/Block/queuecontents.php:3 lib/Block/queuecontents.php:49 +msgid "Queue Contents" +msgstr "Êîíòåíò ÷åðãè" + +#: lib/Forms/Admin/Queue.php:24 lib/Forms/Admin/Queue.php:89 +#: lib/Forms/Admin/Queue.php:170 +msgid "Queue Description" +msgstr "Îïèñ ÷åðãè" + +#: lib/Forms/Admin/Queue.php:30 lib/Forms/Admin/Queue.php:97 +msgid "Queue Email" +msgstr "Å-ïîøòà ÷åðãè" + +#: lib/Forms/CreateTicket.php:34 lib/Forms/CreateTicket.php:45 +#: lib/Forms/Admin/Queue.php:23 lib/Forms/Admin/Queue.php:60 +#: lib/Forms/Admin/Queue.php:85 lib/Forms/Admin/Queue.php:166 +msgid "Queue Name" +msgstr "Íàçâà ÷åðãè" + +#: lib/Forms/Admin/Queue.php:26 lib/Forms/Admin/Queue.php:93 +msgid "Queue Slug" +msgstr "" + +#: lib/Block/queuesummary.php:3 lib/Block/queuesummary.php:24 +msgid "Queue Summary" +msgstr "Àíîòàö³ÿ ÷åðãè" + +#: ticket/queue.php:86 lib/Ticket.php:932 lib/Ticket.php:938 +#: lib/Forms/CreateTicket.php:93 +msgid "Queue Version" +msgstr "Âåðñ³ÿ ÷åðãè" + +#: admin/index.php:35 +msgid "Queue/Type Matri_x" +msgstr "Ìàòðèöÿ ×åðãà/Òèï" + +#: templates/admin/mtmatrix.inc:6 +msgid "Queue/Type Matrix" +msgstr "Ìàòðèöÿ ×åðãà/Òèï" + +#: lib/api.php:163 lib/api.php:781 +msgid "Queues" +msgstr "×åðãè" + +#: templates/prevnext.inc:32 +msgid "Re_turn to Search Results" +msgstr "Ïîâåðíóòèñÿ äî ðåçóëüòàò³â ïîøóêó" + +#: lib/Forms/Admin/Attribute.php:147 +msgid "Really delete this attribute? This may cause data problems!" +msgstr "Ñïðàâä³ âèòåðòè öåé àòðèáóò? Öå ìîæå ñïðè÷èíèòè ïðîáëåìó ç äàíèìè!" + +#: lib/Forms/Admin/Reply.php:108 +msgid "Really delete this form reply?" +msgstr "" + +#: lib/Forms/Admin/Priority.php:122 +msgid "Really delete this priority? This may cause data problems!" +msgstr "Ñïðàâä³ âèòåðòè öåé ïð³îðèòåò? Öå ìîæå ñïðè÷èíèòè ïðîáëåìó ç äàíèìè!" + +#: lib/Forms/Query.php:450 +msgid "Really delete this query? This operation is not undoable." +msgstr "" + +#: lib/Forms/Admin/Queue.php:176 +msgid "Really delete this queue? This may cause data problems!" +msgstr "Ñïðàâä³ âèòåðòè öþ ÷åðãó? Öå ìîæå ñïðè÷èíèòè ïðîáëåìó ç äàíèìè!" + +#: lib/Forms/Admin/State.php:122 +msgid "Really delete this state? This may cause data problems!" +msgstr "Ñïðàâä³ âèòåðòè öåé ñòàí? Öå ìîæå ñïðè÷èíèòè ïðîáëåìó ç äàíèìè!" + +#: ticket/delete.php:34 +msgid "" +"Really delete this ticket? It will NOT be archived, and will be gone forever." +msgstr "" +"Ñïðàâä³ âèòåðòè öüîãî òàðãàíà? ³í íå áóäà àðõ³âîâàíèé ³ áóäå âòðà÷åíèé " +"íàçàâæäè." + +#: lib/Forms/Admin/Type.php:178 +msgid "Really delete this type? This may cause data problems!" +msgstr "Ñïðàâä³ âèòåðòè öåé òèï? Öå ìîæå ñïðè÷èíèòè ïðîáëåìó ç äàíèìè!" + +#: lib/Forms/Admin/Version.php:97 +msgid "Really delete this version? This may cause data problems!" +msgstr "Ñïðàâä³ âèòåðòè öþ âåðñ³þ? Öå ìîæå ñïðè÷èíèòè ïðîáëåìó ç äàíèìè!" + +#: lib/Mail.php:217 +msgid "Received message:" +msgstr "Îòðèìàí³ ëèñòè:" + +#: search.php:162 +msgid "Refine Search" +msgstr "Óòî÷íèòè ïîøóê" + +#: admin/index.php:1170 +msgid "Reminders were sent." +msgstr "Íàãàäóâàííÿ ðîç³ñëàíî." + +#: lib/Forms/Admin/User.php:59 +msgid "Remove User" +msgstr "Âèäàëèòè êîðèñòóâà÷à" + +#: ticket/watch.php:49 +msgid "Remove Watcher" +msgstr "Âèäàëèòè ñïîñòåð³ãà÷à" + +#: templates/prefs/sourceselect.inc:300 +msgid "Remove source" +msgstr "Âèäàëèòè äæåðåëî" + +#: lib/Renderer/Comment.php:95 +msgid "Reply to this comment" +msgstr "³äïîâ³ñòè íà öåé êîìåíòàð" + +#: reports.php:40 +msgid "Reports" +msgstr "Çâ³òè" + +#: lib/Whups.php:680 lib/Ticket.php:965 lib/Renderer/Query.php:86 +msgid "Requester" +msgstr "Çàìîâíèê" + +#: lib/Forms/Admin/Attribute.php:28 lib/Forms/Admin/Attribute.php:99 +msgid "Required Attribute?" +msgstr "Íåîáõ³äíèé àòðèáóò?" + +#: lib/Whups.php:685 lib/api.php:927 lib/Ticket.php:991 lib/Driver.php:199 +#: lib/Renderer/Query.php:151 config/prefs.php.dist:54 +msgid "Resolved" +msgstr "Âèêîíàíèé" + +#: lib/Forms/Query.php:330 lib/Forms/Search.php:60 +msgid "Resolved from" +msgstr "" + +#: lib/Forms/Query.php:331 +msgid "Resolved to" +msgstr "" + +#: lib/Forms/Admin/User.php:61 +msgid "Responsible Users" +msgstr "³äïîâ³äàëüí³ êîðèñòóâà÷³" + +#: lib/Whups.php:306 +msgid "S_et Queue" +msgstr "Âñòàíîâèòè ÷åðãó" + +#: lib/Query.php:234 +msgid "Sa_ve Query" +msgstr "Çáåðåãòè çàïèò" + +#: templates/view/results.inc:96 lib/Forms/Query.php:385 +msgid "Save" +msgstr "Çáåðåãòè" + +#: query/index.php:233 +msgid "Save Criterion" +msgstr "Çáåðåãòè êðèòåð³é" + +#: lib/Forms/Query.php:384 +msgid "Save Query" +msgstr "Çáåðåãòè çàïèò" + +#: search.php:69 lib/Forms/Search.php:19 +msgid "Save as Query" +msgstr "Çáåðåãòè ÿê Çàïèò" + +#: search.php:155 lib/Block/tree_menu.php:30 +msgid "Search" +msgstr "Ïîøóê" + +#: lib/Forms/Query.php:278 +#, php-format +msgid "Search %s Attribute" +msgstr "Çíàéòè %s àòðèáóò" + +#: lib/Forms/Query.php:272 lib/Forms/Query.php:281 +msgid "Search Attribute" +msgstr "" + +#: lib/Forms/Query.php:48 lib/Forms/Query.php:131 +msgid "Search Comments" +msgstr "" + +#: lib/Forms/Query.php:46 +msgid "Search Owners" +msgstr "" + +#: lib/Forms/Query.php:47 +msgid "Search Requester" +msgstr "" + +#: search.php:147 search/rss.php:55 search/rss.php:59 +msgid "Search Results" +msgstr "Ðåçóëüòàòè ïîøóêó" + +#: templates/prevnext.inc:38 +#, php-format +msgid "Search Results: %s of %s" +msgstr "Ðåçóëüòàòè ïîøóêó: %s ç %s" + +#: lib/Forms/Query.php:130 +msgid "Search Summary" +msgstr "" + +#: config/prefs.php.dist:76 +msgid "Search Tickets" +msgstr "Ïîøóê òàðãàí³â" + +#: config/prefs.php.dist:25 +msgid "Select address book sources for adding and searching for addresses." +msgstr "Âêàæ³òü àäðåñíèêè äëÿ ïîøóêó ³ äîäàâàííÿ àäðåñ." + +#: templates/prefs/sourceselect.inc:319 +msgid "Select all fields to search when expanding addresses." +msgstr "Âèáåð³òü âñ³ ïîëÿ äëÿ ïîøóêó ïðè ðîçêðèòò³ àäðåñ." + +#: config/prefs.php.dist:78 +msgid "Select the view to display after login:" +msgstr "Âèáåð³òü âèä, ÿêèé ïîêàçàòè ï³ñëÿ âõîäó:" + +#: templates/prefs/sourceselect.inc:303 templates/prefs/sourceselect.inc:305 +msgid "Selected Address books:" +msgstr "Âèáðàí³ Àäðåñíèêè:" + +#: admin/index.php:36 +msgid "Sen_d Reminders" +msgstr "" + +#: lib/Forms/Admin.php:23 +msgid "Send Reminders" +msgstr "" + +#: lib/Forms/Admin.php:34 +msgid "Send only for this list of ticket ids" +msgstr "" + +#: lib/Forms/Admin/Priority.php:80 lib/Forms/Admin/Priority.php:82 +msgid "Set Default Priority" +msgstr "Âñòàíîâèòè òèïîâèé ïð³îðèòåò" + +#: lib/Forms/Admin/State.php:80 lib/Forms/Admin/State.php:82 +msgid "Set Default State" +msgstr "Âñòàíîâèòè òèïîâèé ñòàí" + +#: ticket/queue.php:201 ticket/queue.php:210 ticket/queue.php:222 +msgid "Set Queue - Step 1" +msgstr "Âñòàíîâèòè ÷åðãó - Êðîê 1" + +#: ticket/queue.php:202 ticket/queue.php:211 +msgid "Set Queue - Step 2" +msgstr "Âñòàíîâèòè ÷åðãó - Êðîê 2" + +#: ticket/queue.php:212 +msgid "Set Queue - Step 3" +msgstr "Âñòàíîâèòè ÷åðãó - Êðîê 3" + +#: ticket/queue.php:189 +#, php-format +msgid "Set Queue for %s" +msgstr "Âñòàíîâèòè ÷åðãó äëÿ %s" + +#: lib/api.php:800 +msgid "Set Requester" +msgstr "Âñòàíîâèòè àâòîðà" + +#: ticket/type.php:139 ticket/type.php:148 +msgid "Set Type - Step 1" +msgstr "Âñòàíîâèòè òèï - Êðîê 1" + +#: ticket/type.php:140 +msgid "Set Type - Step 2" +msgstr "Âñòàíîâ³òü òèï - Êðîê 2" + +#: ticket/type.php:127 +#, php-format +msgid "Set Type for %s" +msgstr "Âñòàíîâèòè òèï äëÿ %s" + +#: lib/Whups.php:311 +msgid "Set _Type" +msgstr "Âñòàíîâèòè òèï" + +#: config/prefs.php.dist:144 +msgid "Show comments in chronological order, or most recent first?" +msgstr "Ïîêàçóâàòè êîìåíòàð³ â õðîíîëîã³÷íîìó ïîðÿäêó, ÷è ñïåðøó ñâ³æ³ø³?" + +#: config/prefs.php.dist:95 +msgid "Show ticket IDs in the summary view?" +msgstr "" + +#: config/prefs.php.dist:87 +msgid "Show tickets you have requested in the summary view?" +msgstr "" + +#: config/templates.php.dist:16 +msgid "Simple HTML Report" +msgstr "Ïðîñòèé HTML çâ³ò" + +#: lib/Forms/Admin/Queue.php:27 +#, php-format +msgid "" +"Slugs allows direct access to this queue's open tickets by visiting: %s. " +"
Slug names may contain only letters, numbers or the _ (underscore) " +"character." +msgstr "" + +#: templates/view/results.inc:37 templates/view/results.inc:41 +#, php-format +msgid "Sort by %s" +msgstr "Ñîðòóâàòè ïî %s" + +#: lib/Forms/AddComment.php:20 lib/Forms/AddComment.php:51 +#: lib/Forms/CreateTicket.php:136 lib/Forms/CreateTicket.php:175 +msgid "Spam protection" +msgstr "Çàõèñò â³ä ñïàìó" + +#: ticket/type.php:65 ticket/queue.php:116 lib/Whups.php:670 lib/Whups.php:676 +#: lib/Ticket.php:609 lib/Ticket.php:806 lib/Ticket.php:949 +#: lib/Renderer/Query.php:117 lib/Forms/Query.php:193 +#: lib/Forms/EditTicket.php:62 config/prefs.php.dist:47 +msgid "State" +msgstr "Ñòàí" + +#: lib/Renderer/Comment.php:110 +#, php-format +msgid "State ⇒ %s" +msgstr "Ñòàí ⇒ %s" + +#: lib/Forms/Admin/State.php:25 lib/Forms/Admin/State.php:70 +msgid "State Category" +msgstr "Êàòåãîð³ÿ ñòàíó" + +#: lib/Forms/Admin/State.php:24 lib/Forms/Admin/State.php:67 +#: lib/Forms/Admin/State.php:118 +msgid "State Description" +msgstr "Îïèñ ñòàíó" + +#: lib/Forms/Admin/State.php:23 lib/Forms/Admin/State.php:47 +#: lib/Forms/Admin/State.php:64 lib/Forms/Admin/State.php:96 +#: lib/Forms/Admin/State.php:115 +msgid "State Name" +msgstr "Íàçâà ñòàíó" + +#: lib/Forms/Admin/Type.php:76 lib/Forms/Admin/Type.php:165 +msgid "States for this Type" +msgstr "Ñòàíè äëÿ öüîãî òèïó" + +#: templates/ticket/watchers.inc:1 +msgid "Status" +msgstr "Ñòàòóñ" + +#: ticket/create.php:146 +msgid "Submit" +msgstr "³ä³ñëàòè" + +#: query/run.php:93 query/run.php:94 +msgid "Subscribe to this query" +msgstr "" + +#: admin/index.php:198 +#, php-format +msgid "Successfully Cloned %s to %s." +msgstr "" + +#: ticket/type.php:118 +msgid "Successfully changed ticket type." +msgstr "Óñï³øíî çì³íåíî òèï òàðãàíà." + +#: ticket/delete.php:30 lib/Whups.php:668 lib/Whups.php:675 lib/Ticket.php:616 +#: lib/Ticket.php:643 lib/Ticket.php:646 lib/Ticket.php:650 lib/Ticket.php:812 +#: lib/Ticket.php:821 lib/Ticket.php:912 lib/Renderer/Query.php:89 +#: lib/Forms/CreateTicket.php:152 lib/Forms/EditTicket.php:58 +#: config/prefs.php.dist:46 +msgid "Summary" +msgstr "Ðåçþìå" + +#: lib/Renderer/Comment.php:51 +#, php-format +msgid "Summary ⇒ %s" +msgstr "Ðåçþìå ⇒ %s" + +#: lib/Forms/Search.php:43 +msgid "Summary like" +msgstr "" + +#: lib/Renderer/Comment.php:79 +#, php-format +msgid "Taken from %s" +msgstr "Çàáðàíî â³ä %s" + +#: lib/Forms/Query.php:128 +msgid "Text" +msgstr "Òåêñò" + +#: lib/Driver/sql.php:80 lib/Driver/sql.php:1306 +msgid "That queue slug is already taken. Please select another." +msgstr "" + +#: lib/Forms/CreateTicket.php:129 +msgid "The Requester's Email Address" +msgstr "Àäðåñà å-ïîøòè çàìîâíèêà" + +#: view.php:58 lib/Ticket.php:439 lib/Ticket.php:487 +msgid "The VFS backend needs to be configured to enable attachment uploads." +msgstr "" +"VFS áóôåð ìóñèòü áóòè ñêîíô³ãóðîâàíèé, ùîá äîçâîëèòè çàêà÷óâàííÿ äîäàòê³â." + +#: admin/index.php:906 +#, php-format +msgid "The attribute \"%s\" has been added to %s." +msgstr "Àòðèáóò \"%s\" äîäàíî äî %s." + +#: admin/index.php:1006 +msgid "The attribute has been deleted." +msgstr "Àòðèáóò âèòåðòî." + +#: admin/index.php:974 +msgid "The attribute has been modified." +msgstr "Àòðèáóò ìîäèô³êîâàíî." + +#: admin/index.php:1015 +msgid "The attribute was not deleted." +msgstr "Àòðèáóò íå âèòåðòî." + +#: admin/index.php:642 +msgid "The default priority has been set." +msgstr "Âñòàíîâëåíî òèïîâèé ïð³îðèòåò." + +#: admin/index.php:506 +msgid "The default state has been set." +msgstr "Âñòàíîâëåíî òèïîâèé ñòàí." + +#: admin/index.php:1043 +#, php-format +msgid "The form reply \"%s\" has been added to %s." +msgstr "" + +#: admin/index.php:1135 +msgid "The form reply has been deleted." +msgstr "" + +#: admin/index.php:1108 +msgid "The form reply has been modified." +msgstr "" + +#: admin/index.php:1144 +msgid "The form reply was not deleted." +msgstr "" + +#: admin/index.php:556 +#, php-format +msgid "The priority \"%s\" has been added to %s." +msgstr "Ïð³îðèòåò \"%s\" äîäàíî äî %s." + +#: admin/index.php:661 +msgid "The priority has been deleted." +msgstr "Ïð³îðèòåò âèòåðòî." + +#: admin/index.php:609 +msgid "The priority has been modified." +msgstr "Ïð³îðèòåò ìîäèô³êîâàíî." + +#: admin/index.php:670 +msgid "The priority was not deleted." +msgstr "Ïð³îðèòåò íå âèòåðòèé." + +#: lib/Forms/Query.php:463 +#, php-format +msgid "The query \"%s\" couldn't be deleted: %s" +msgstr "" + +#: lib/Forms/Query.php:465 +#, php-format +msgid "The query \"%s\" has been deleted." +msgstr "" + +#: lib/Forms/Query.php:430 +#, php-format +msgid "The query couldn't be loaded:" +msgstr "" + +#: admin/index.php:300 +#, php-format +msgid "The queue \"%s\" has been created." +msgstr "×åðãó \"%s\" ñòâîðåíî." + +#: admin/index.php:392 +msgid "The queue has been deleted." +msgstr "×åðãó âèòåðòî." + +#: admin/index.php:359 +msgid "The queue has been modified." +msgstr "×åðãó ìîäèô³êîâàíî." + +#: admin/index.php:400 +msgid "The queue was not deleted." +msgstr "×åðãó íå âèòåðòî." + +#: lib/MIME/Viewer/zip.php:58 +msgid "The requested file does not exist in the Zip attachment." +msgstr "Âêàçàíèé ôàéë íå ³ñíóº â Zip-äîäàòêó." + +#: data.php:26 +msgid "The requested template does not exist." +msgstr "Âêàçàíîãî øàáëîíó íå ³ñíóº." + +#: admin/index.php:422 +#, php-format +msgid "The state \"%s\" has been added to %s." +msgstr "Ñòàí \"%s\" äîäàíî äî %s." + +#: admin/index.php:525 +msgid "The state has been deleted." +msgstr "Ñòàí âèòåðòî." + +#: admin/index.php:475 +msgid "The state has been modified." +msgstr "Ñòàí ìîäèô³êîâàíî." + +#: admin/index.php:533 +msgid "The state was not deleted." +msgstr "Ñòàí íå âèòåðòî." + +#: ticket/delete.php:78 +msgid "The ticket was not deleted." +msgstr "Òàðãàíà íå âèòåðòî." + +#: admin/index.php:223 +#, php-format +msgid "The type \"%s\" has been modified." +msgstr "Òèï \"%s\" ìîäèô³êîâàíî." + +#: admin/index.php:272 +msgid "The type has been deleted." +msgstr "Òèï âèòåðòî." + +#: admin/index.php:280 +msgid "The type was not deleted." +msgstr "Òèï íå âèòåðòî." + +#: admin/index.php:776 +#, php-format +msgid "The version \"%s\" has been added to %s." +msgstr "Âåðñ³þ \"%s\" äîäàíî äî %s." + +#: admin/index.php:865 +msgid "The version has been deleted." +msgstr "Âåðñ³þ âèòåðòî." + +#: admin/index.php:835 +msgid "The version has been modified." +msgstr "Âåðñ³þ ìîäèô³êîâàíî." + +#: admin/index.php:873 +msgid "The version was not deleted." +msgstr "Âåðñ³þ íå âèòåðòî." + +#: lib/Forms/Admin/Attribute.php:70 +msgid "There are no attribute types to edit" +msgstr "Íåìà æîäíîãî òèïó àòðèáóòà äëÿ ðåäàãóâàííÿ" + +#: lib/Forms/Query.php:281 +msgid "There are no attributes defined." +msgstr "Íå âèçíà÷åíî æîäíîãî àòðèáóòà." + +#: lib/Forms/Admin/Reply.php:48 +msgid "There are no form replies to edit" +msgstr "" + +#: lib/Block/queuesummary.php:44 +msgid "There are no open tickets." +msgstr "" + +#: lib/Forms/Admin/Priority.php:44 lib/Forms/Admin/Priority.php:90 +msgid "There are no priorities to edit" +msgstr "" + +#: lib/Forms/Admin.php:31 +msgid "There are no queues available." +msgstr "Íåìà æîäíî¿ äîñòóïíî¿ ÷åðãè." + +#: lib/Forms/Admin/Queue.php:57 +msgid "There are no queues to edit" +msgstr "Íåìà æîäíî¿ ÷åðãè äëÿ ðåäàãóâàííÿ" + +#: lib/Forms/CreateTicket.php:35 +msgid "There are no queues which you can create tickets in." +msgstr "Íåìà æîäíî¿ ÷åðãè, â ÿêó Âè ìîæåòå ïîäàòè òàðãàíà." + +#: lib/Forms/Search.php:38 +msgid "There are no queues which you can search." +msgstr "Íåìà æîäíî¿ ÷åðãè, äîñòóïíî¿ Âàì äëÿ ïîøóêó." + +#: lib/Forms/Admin/State.php:43 lib/Forms/Admin/State.php:92 +msgid "There are no states to edit" +msgstr "Íåìà ñòàí³â äëÿ ðåäàãóâàííÿ" + +#: lib/Forms/CreateTicket.php:72 +msgid "" +"There are no ticket types associated with this queue; until there are, you " +"cannot create any tickets in this queue." +msgstr "" +"Íå âèçíà÷åíî æîäíîãî òèïó òàðãàíà, àñîö³éîâàíîãî ç ö³ºþ ÷åðãîþ; ïîêè íå áóäå " +"âèçíà÷åíî, âè íå çìîæåòå ïîäàâàòè òàðãàí³â ó öþ ÷åðãó." + +#: lib/Forms/Admin/Type.php:45 +msgid "There are no types to edit" +msgstr "Íåìà òèï³â äëÿ ðåäàãóâàííÿ" + +#: lib/Forms/Admin/User.php:75 +msgid "There are no users responsible for this queue." +msgstr "Íåìà æîäíîãî â³äïîâ³äàëüíîãî çà öþ ÷åðãó." + +#: lib/Forms/CreateTicket.php:242 +msgid "There are no users to which this ticket can be assigned." +msgstr "Íåìà æîäíîãî êîðèñòóâà÷à, êîìó ìîæíà ïðèçíà÷èòè öüîãî òàðãàíà." + +#: lib/Forms/Admin/Version.php:44 +msgid "There are no versions to edit" +msgstr "Íåìà âåðñ³é äëÿ ðåäàãóâàííÿ" + +#: lib/Reports.php:143 +msgid "There is no data for this report." +msgstr "" + +#: admin/index.php:705 +#, php-format +msgid "There was an error adding \"%s\" to the responsible list for \"%s\":" +msgstr "" +"Òðàïèëàñü ïîìèëêà ïðè äîäàâàíí³ \"%s\" äî ñïèñêó â³äïîâ³äàëüíèõ çà \"%s\":" + +#: admin/index.php:911 +msgid "There was an error creating the attribute:" +msgstr "Òðàïèëàñü ïîìèëêà ñòâîðåííÿ àòðèáóòà:" + +#: admin/index.php:1051 +msgid "There was an error creating the form reply:" +msgstr "" + +#: admin/index.php:561 +msgid "There was an error creating the priority:" +msgstr "Òðàïèëàñü ïîìèëêà ïðè ñòâîðåíí³ ïð³îðèòåòó:" + +#: admin/index.php:309 +msgid "There was an error creating the queue:" +msgstr "Òðàïèëàñü ïîìèëêà ïðè ñòâîðåíí³ ÷åðãè:" + +#: admin/index.php:426 +msgid "There was an error creating the state:" +msgstr "Òðàïèëàñü ïîìèëêà ïðè ñòâîðåíí³ ñòàíó:" + +#: admin/index.php:780 +msgid "There was an error creating the version:" +msgstr "Òðàïèëàñü ïîìèëêà ïðè ñòâîðåíí³ âåðñ³¿:" + +#: admin/index.php:1010 +msgid "There was an error deleting the attribute:" +msgstr "Òðàïèëàñü ïîìèëêà ïðè âèòèðàíí³ àòðèáóòà:" + +#: admin/index.php:1139 +msgid "There was an error deleting the form reply:" +msgstr "" + +#: admin/index.php:665 +msgid "There was an error deleting the priority:" +msgstr "Òðàïèëàñü ïîìèëêà ïðè âèòèðàíí³ ïð³îðèòåòó:" + +#: admin/index.php:395 +msgid "There was an error deleting the queue:" +msgstr "Òðàïèëàñü ïîìèëêà ïðè âèòèðàíí³ ÷åðãè:" + +#: admin/index.php:528 +msgid "There was an error deleting the state:" +msgstr "Òðàïèëàñü ïîìèëêà ïðè âèòèðàíí³ ñòàíó:" + +#: ticket/delete.php:75 +msgid "There was an error deleting the ticket:" +msgstr "Òðàïèëàñü ïîìèëêà ïðè âèòèðàíí³ òàðãàíà:" + +#: admin/index.php:275 +msgid "There was an error deleting the type:" +msgstr "Òðàïèëàñü ïîìèëêà ïðè âèòèðàíí³ òèïó:" + +#: admin/index.php:868 +msgid "There was an error deleting the version:" +msgstr "Òðàïèëàñü ïîìèëêà ïðè âèòèðàíí³ âåðñ³¿:" + +#: admin/index.php:982 +msgid "There was an error editing the attribute:" +msgstr "Òðàïèëàñü ïîìèëêà ðåäàãóâàííÿ àòðèáóòà:" + +#: admin/index.php:1104 +msgid "There was an error editing the form reply:" +msgstr "" + +#: admin/index.php:615 +msgid "There was an error editing the priority:" +msgstr "Òðàïèëàñü ïîìèëêà ðåäàãóâàííÿ ïð³îðèòåòó:" + +#: admin/index.php:375 +msgid "There was an error editing the queue:" +msgstr "Òðàïèëàñü ïîìèëêà ðåäàãóâàííÿ ÷åðãè:" + +#: admin/index.php:480 +msgid "There was an error editing the state:" +msgstr "Òðàïèëàñü ïîìèëêà ðåäàãóâàííÿ ñòàíó:" + +#: admin/index.php:841 +msgid "There was an error editing the version:" +msgstr "Òðàïèëàñü ïîìèëêà ðåäàãóâàííÿ âåðñ³¿:" + +#: lib/Forms/Admin/User.php:35 +#, php-format +msgid "There was an error listing users: %s; %s" +msgstr "Òðàïèëàñü ïîìèëêà ïåðåãëÿäó êîðèñòóâà÷³â: %s; %s" + +#: queue/index.php:52 +#, php-format +msgid "There was an error locating tickets in this queue: " +msgstr "Òðàïèëàñü ïîìèëêà çíàõîäæííÿ òàðãàí³â ó ö³é ÷åðç³: " + +#: admin/index.php:219 +msgid "There was an error modifying the type:" +msgstr "Òðàïèëàñü ïîìèëêà ïðè çì³í³ òèïó:" + +#: search.php:140 +#, php-format +msgid "There was an error performing your search: %s" +msgstr "Òðàïèëàñü ïîìèëêà ïðè âèêîíàíí³ âàøîãî ïîøóêó: %s" + +#: admin/index.php:750 +#, php-format +msgid "" +"There was an error removing \"%s\" from the responsible list for \"%s\":" +msgstr "" +"Òðàïèëàñü ïîìèëêà ïðè âèäàëåíí³ \"%s\" ç³ ñïèñêó â³äïîâ³äàëüíèõ çà \"%s\":" + +#: admin/index.php:638 +msgid "There was an error setting the default priority:" +msgstr "Òðàïèëàñü ïîìèëêà âñòàíîâëåííÿ òèïîâîãî ïð³îðèòåòó:" + +#: admin/index.php:502 +msgid "There was an error setting the default state:" +msgstr "Òðàïèëàñü ïîìèëêà âñòàíîâëåííÿ òèïîâîãî ñòàíó:" + +#: lib/Forms/AddComment.php:37 lib/Forms/EditTicket.php:166 +msgid "This comment is visible to everyone" +msgstr "Öåé êîìåíòàð âèäèìèé äëÿ âñ³õ" + +#: lib/Forms/Admin/Queue.php:31 +msgid "" +"This email address will be used when sending notifications for any queue " +"tickets." +msgstr "" + +#: data.php:29 +msgid "This is not a search results template." +msgstr "" + +#: lib/Query.php:435 lib/Query.php:668 +msgid "This query element cannot be edited." +msgstr "Öåé åëåìåíò çàïèòó íå ìîæíà ðåäàãóâàòè." + +#: ticket/queue.php:81 lib/Forms/CreateTicket.php:88 +msgid "" +"This queue requires that you specify a version, but there are no versions " +"associated with it. Until versions are created for this queue, you will not " +"be able to create tickets." +msgstr "" + +#: lib/Ticket.php:638 lib/Ticket.php:820 +msgid "Ticket" +msgstr "Òàðãàí" + +#: ticket/delete.php:71 +#, php-format +msgid "Ticket %d has been deleted." +msgstr "Òàðãàíà %d âèòåðòî." + +#: lib/api.php:850 +#, php-format +msgid "Ticket %s - %s" +msgstr "Òàðãàí %s - %s" + +#: lib/Driver/sql.php:1081 +#, php-format +msgid "Ticket %s was not found." +msgstr "Òàðãàíà %s íå çíàéäåíî." + +#: search.php:170 +msgid "Ticket Search" +msgstr "Ïîøóê òàðãàíà" + +#: lib/Forms/CreateTicket.php:142 +msgid "Ticket State" +msgstr "Ñòàí òàðãàíà" + +#: templates/reports/stats.inc:1 +msgid "Ticket Stats" +msgstr "" + +#: lib/Forms/CreateTicket.php:80 +msgid "Ticket Type" +msgstr "Òèï òàðãàíà" + +#: lib/Forms/Admin/Queue.php:103 +msgid "Ticket Types associated with this Queue" +msgstr "Òèïè òàðãàí³â, àñîö³éîâàí³ ç ö³ºþ ÷åðãîþ" + +#: lib/Ticket.php:633 +#, php-format +msgid "Ticket URL: %s" +msgstr "URL òàðãàíà: %s" + +#: ticket/update.php:94 +msgid "Ticket Updated" +msgstr "Òàðãàíà îíîâëåíî" + +#: lib/api.php:871 +msgid "Tickets" +msgstr "Òàðãàíè" + +#: query/rss.php:70 +#, php-format +msgid "Tickets matching the query \"%s\"." +msgstr "" + +#: templates/prefs/sourceselect.inc:322 +msgid "" +"To select multiple fields, hold down the Control (PC) or Command (Mac) while " +"clicking." +msgstr "" +"Äëÿ âèáîðó ê³ëüêîõ ïîë³â óòðèìóéòå íàòèñíåíîþ êëàâ³øó Control (PC) àáî " +"Command (Mac)." + +#: ticket/queue.php:89 lib/Whups.php:677 lib/Ticket.php:608 lib/Ticket.php:805 +#: lib/Ticket.php:945 lib/Renderer/Query.php:108 lib/Forms/Query.php:174 +#: config/prefs.php.dist:48 +msgid "Type" +msgstr "Òèï" + +#: lib/Renderer/Comment.php:105 +#, php-format +msgid "Type ⇒ %s" +msgstr "Òèï ⇒ %s" + +#: lib/Forms/Admin/Type.php:23 lib/Forms/Admin/Type.php:70 +#: lib/Forms/Admin/Type.php:160 +msgid "Type Description" +msgstr "Îïèñ òèïó" + +#: lib/Forms/Admin/Type.php:22 lib/Forms/Admin/Type.php:48 +#: lib/Forms/Admin/Type.php:67 lib/Forms/Admin/Type.php:156 +msgid "Type Name" +msgstr "Íàçâà òèïó" + +#: search/rss.php:39 +#, php-format +msgid "Type: %s; State: %s" +msgstr "Òèï: %s; Ñòàí: %s" + +#: lib/Ticket.php:961 +msgid "Unassigned" +msgstr "Íåðèçíà÷åíèé" + +#: lib/Block/unassigned.php:3 lib/Block/unassigned.php:24 +msgid "Unassigned Tickets" +msgstr "Íåïðèçíà÷åí³ òàðãàíè" + +#: lib/Forms/Admin.php:42 +msgid "Unassigned tickets" +msgstr "Íåïðèçíà÷åí³ òàðãàíè" + +#: lib/Driver.php:196 +msgid "Unconfirmed" +msgstr "Íå ï³äòâåðäæåíèé" + +#: lib/Renderer/Query.php:167 lib/Renderer/Query.php:207 +#, php-format +msgid "Unknown node type %s" +msgstr "" + +#: lib/api.php:790 +msgid "Update" +msgstr "Îíîâèòè" + +#: ticket/update.php:108 +#, php-format +msgid "Update %s" +msgstr "Îíîâèòè %s" + +#: templates/admin/mtmatrix.inc:29 +msgid "Update Associations" +msgstr "Îíîâèòè àñîö³àö³¿" + +#: lib/Whups.php:683 lib/Ticket.php:981 lib/Renderer/Query.php:146 +msgid "Updated" +msgstr "Îíîâëåíî" + +#: lib/Ticket.php:615 lib/Ticket.php:640 +msgid "Updated By" +msgstr "Îíîâëåíî" + +#: lib/Forms/Query.php:327 lib/Forms/Search.php:58 +msgid "Updated from" +msgstr "" + +#: lib/Forms/Query.php:328 +msgid "Updated to" +msgstr "" + +#: lib/Forms/Admin/User.php:34 lib/Forms/Admin/User.php:44 +#: lib/Forms/Admin/User.php:47 +msgid "User" +msgstr "Êîðèñòóâà÷" + +#: lib/Forms/Query.php:44 +msgid "User ID" +msgstr "ID êîðèñòóâà÷à" + +#: lib/Forms/Admin/Queue.php:131 +msgid "Users responsible for this Queue" +msgstr "Êîðèñòóâà÷³, â³äïîâ³äàëüí³ çà öþ ÷åðãó" + +#: lib/Forms/Admin/User.php:79 +msgid "Users responsible for this queue" +msgstr "Êîðèñòóâà÷³, â³äïîâ³äàëüí³ çà öþ ÷åðãó" + +#: lib/Ticket.php:607 lib/Ticket.php:804 lib/Renderer/Query.php:102 +#: lib/Forms/Query.php:185 config/prefs.php.dist:51 +msgid "Version" +msgstr "Âåðñ³ÿ" + +#: lib/Forms/Admin/Version.php:24 lib/Forms/Admin/Version.php:70 +#: lib/Forms/Admin/Version.php:93 +msgid "Version Description" +msgstr "Îïèñ âåðñ³¿" + +#: lib/Forms/Admin/Version.php:23 lib/Forms/Admin/Version.php:48 +#: lib/Forms/Admin/Version.php:67 lib/Forms/Admin/Version.php:90 +msgid "Version Name" +msgstr "Íàçâà âåðñ³¿" + +#: ticket/type.php:43 ticket/queue.php:50 +msgid "Viewable only by members of" +msgstr "" + +#: lib/Forms/AddComment.php:25 +msgid "Watch this ticket" +msgstr "Ñïîñòåð³ãàòè çà öèì òàðãàíîì" + +#: ticket/watch.php:78 +#, php-format +msgid "Watchers for %s" +msgstr "Ñïîñòåð³ãà÷³ çà %s" + +#: config/prefs.php.dist:104 +msgid "Weekday Day Month" +msgstr "" + +#: config/prefs.php.dist:105 +msgid "Weekday Day Month HH:MM:SS TZ" +msgstr "" + +#: ticket/delete.php:33 lib/Forms/Query.php:449 +#: lib/Forms/Admin/Priority.php:121 lib/Forms/Admin/State.php:121 +#: lib/Forms/Admin/Reply.php:110 lib/Forms/Admin/Attribute.php:149 +#: lib/Forms/Admin/Type.php:176 lib/Forms/Admin/Version.php:96 +#: lib/Forms/Admin/Queue.php:174 +msgid "Yes" +msgstr "Òàê" + +#: view.php:54 +#, php-format +msgid "You are not allowed to view ticket %d." +msgstr "Âàì íå äîçâîëåíî îãëÿäàòè òàðãàíà %d." + +#: lib/Driver/sql.php:1090 +#, php-format +msgid "You do not have permission to access this ticket (%s)." +msgstr "Ó Âàñ íåìà ïðàâà äîñòóïó äî öüîãî òàðãàíà (%s)." + +#: lib/api.php:375 +msgid "You do not have permission to update this ticket." +msgstr "Ó Âàñ íåìà ïðàâà îíîâëþâàòè öüîãî òàðãàíà." + +#: lib/Block/myrequests.php:46 +msgid "You have no open requests." +msgstr "" + +#: lib/Block/query.php:28 lib/Forms/Query.php:419 +msgid "You have no saved queries." +msgstr "" + +#: lib/Whups.php:710 +msgid "You must select at least one queue to send reminders for." +msgstr "" + +#: lib/Forms/AddComment.php:18 lib/Forms/CreateTicket.php:132 +msgid "Your Email Address" +msgstr "Âàøà àäðåñà å-ïîøòè" + +#: ticket/create.php:60 +#, php-format +msgid "" +"Your ticket ID is %s. An appropriate person has been notified of this " +"request." +msgstr "Íîìåð Âàøîãî òàðãàíà - %s. ³äïîâ³äíà îñîáà ñïîâ³ùåíà ïðî Âàø çàïèò." + +#: lib/Mail.php:244 +msgid "[ Could not render body of message. ]" +msgstr "[ Íå ìîæó â³äîáðàçèòè ò³ëî ëèñòà. ]" + +#: lib/Whups.php:774 +msgid "_Admin" +msgstr "Àäì³í" + +#: lib/Whups.php:298 +msgid "_Comment" +msgstr "Êîìåíòàð" + +#: query/index.php:157 +msgid "_Date Criteria" +msgstr "Êðèòåð³é äàòè" + +#: lib/Whups.php:316 +msgid "_Delete" +msgstr "Âèòåðòè" + +#: lib/Query.php:237 +msgid "_Delete Query" +msgstr "Âèòåðòè çàïèò" + +#: lib/Query.php:218 +msgid "_Edit Query" +msgstr "" + +#: admin/index.php:33 +msgid "_Edit Queues" +msgstr "Ðåäàãóâàòè ÷åðãè" + +#: templates/menu.inc:5 +msgid "_Go" +msgstr "" + +#: query/index.php:156 +msgid "_Group Criteria" +msgstr "" + +#: lib/Whups.php:292 +msgid "_History" +msgstr "²ñòîð³ÿ" + +#: lib/Query.php:231 +msgid "_Load Query" +msgstr "" + +#: lib/Whups.php:765 +#, php-format +msgid "_My %s" +msgstr "_Mî¿ %s" + +#: lib/Whups.php:768 +msgid "_New Ticket" +msgstr "Íîâèé òàðãàí" + +#: query/index.php:154 +msgid "_Property Criteria" +msgstr "" + +#: lib/Whups.php:769 +msgid "_Query Builder" +msgstr "" + +#: lib/Whups.php:770 +msgid "_Reports" +msgstr "Çâ³òè" + +#: lib/Whups.php:767 +msgid "_Search" +msgstr "Ïîøóê" + +#: query/index.php:158 +msgid "_Text Criteria" +msgstr "" + +#: lib/Whups.php:294 +msgid "_Update" +msgstr "Îíîâèòè" + +#: query/index.php:155 +msgid "_User Criteria" +msgstr "" + +#: lib/Whups.php:302 +msgid "_Watch" +msgstr "Íàãëÿä" + +#: lib/Renderer/Query.php:187 +msgid "contains (case insensitive) substring" +msgstr "" + +#: lib/Renderer/Query.php:191 +msgid "contains (case sensitive) substring" +msgstr "" + +#: lib/Renderer/Query.php:195 +msgid "contains the word" +msgstr "ì³ñòèòü ñëîâî" + +#: lib/Mail.php:94 lib/Mail.php:118 lib/Mail.php:146 +msgid "current user:" +msgstr "Ïîòî÷íèé êîðèñòóâà÷:" + +#: lib/api.php:859 +msgid "estimated time" +msgstr "ïðîãíîçîâàíèé ÷àñ" + +#: lib/Renderer/Query.php:183 +msgid "is" +msgstr "º" + +#: lib/Renderer/Query.php:175 +msgid "is greater than" +msgstr "á³ëüøå, í³æ" + +#: lib/Renderer/Query.php:179 +msgid "is less than" +msgstr "ìåíøå, í³æ" + +#: lib/Renderer/Query.php:199 +msgid "matches the pattern" +msgstr "" + +#: lib/Forms/Search.php:57 lib/Forms/Search.php:59 lib/Forms/Search.php:61 +#: lib/Forms/Search.php:63 lib/Forms/Search.php:65 +msgid "to" +msgstr "äî" diff --git a/whups/po/whups.pot b/whups/po/whups.pot new file mode 100644 index 000000000..713db1bd8 --- /dev/null +++ b/whups/po/whups.pot @@ -0,0 +1,2364 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright YEAR Horde Project +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: dev@lists.horde.org\n" +"POT-Creation-Date: 2008-08-01 10:45+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: admin/index.php:745 +#, php-format +msgid "\"%s\" is no longer among those responsible for \"%s\"" +msgstr "" + +#: templates/menu.inc:5 +msgid "#Id" +msgstr "" + +#: templates/ticket/watchers.inc:3 +#, php-format +msgid "%d people watching, %d people responsible" +msgstr "" + +#: queue/rss.php:96 +#, php-format +msgid "%s %s tickets in %s" +msgstr "" + +#: queue/rss.php:100 +#, php-format +msgid "%s %s tickets in all queues" +msgstr "" + +#: lib/Renderer/Comment.php:120 +#, php-format +msgid "%s ⇒ %s" +msgstr "" + +#: lib/Driver.php:481 +#, php-format +msgid "%s (%s) wrote:" +msgstr "" + +#: admin/index.php:700 +#, php-format +msgid "%s added to those responsible for \"%s\"" +msgstr "" + +#: templates/reports/stats.inc:17 +#, php-format +msgid "%s days" +msgstr "" + +#: queue/rss.php:104 +#, php-format +msgid "%s tickets in %s" +msgstr "" + +#: queue/rss.php:108 +#, php-format +msgid "%s tickets in all queues" +msgstr "" + +#: ticket/watch.php:60 +#, php-format +msgid "%s will be notified when this ticket is updated." +msgstr "" + +#: ticket/watch.php:72 +#, php-format +msgid "%s will no longer receive updates for this ticket." +msgstr "" + +#: admin/index.php:109 +msgid "- Stage 1" +msgstr "" + +#: admin/index.php:114 +msgid "- Stage 2" +msgstr "" + +#: scripts/mail-filter.php:172 +msgid "--queue-name or --queue-id must specify a valid and public queue." +msgstr "" + +#: templates/prevnext.inc:16 +msgid "<>" +msgstr "" + +#: lib/Forms/Query.php:345 +msgid "Load Query" +msgstr "" + +#: lib/Forms/VarRenderer.php:46 +msgid "Loading..." +msgstr "" + +#: config/prefs.php.dist:106 +msgid "MM/DD/YY" +msgstr "" + +#: config/prefs.php.dist:107 +msgid "MM/DD/YY HH:MM:SS" +msgstr "" + +#: lib/Forms/Admin/Type.php:193 +#, php-format +msgid "Make a clone of %s" +msgstr "" + +#: lib/Forms/Query.php:272 +msgid "Match" +msgstr "" + +#: lib/Forms/Query.php:45 lib/Forms/Query.php:129 lib/Forms/Query.php:273 +msgid "Match Operator" +msgstr "" + +#: lib/Query.php:162 +msgid "Match Pattern" +msgstr "" + +#: lib/Query.php:161 +msgid "Match Word" +msgstr "" + +#: lib/Reports.php:20 +msgid "Maximum time a ticket is unresolved" +msgstr "" + +#: lib/Block/tree_menu.php:3 +msgid "Menu List" +msgstr "" + +#: lib/Reports.php:21 +msgid "Minimum time a ticket is unresolved" +msgstr "" + +#: config/prefs.php.dist:146 +msgid "Most recent first" +msgstr "" + +#: templates/prefs/sourceselect.inc:312 +msgid "Move down" +msgstr "" + +#: templates/prefs/sourceselect.inc:310 +msgid "Move up" +msgstr "" + +#: ticket/queue.php:181 +#, php-format +msgid "Moved ticket %d to \"%s\"" +msgstr "" + +#: mybugs.php:54 +#, php-format +msgid "My %s" +msgstr "" + +#: mybugs_edit.php:33 +#, php-format +msgid "My %s :: Add Content" +msgstr "" + +#: search.php:130 lib/Block/myqueries.php:3 lib/Block/myqueries.php:24 +msgid "My Queries" +msgstr "" + +#: lib/Block/myrequests.php:3 lib/Block/myrequests.php:24 +msgid "My Requests" +msgstr "" + +#: lib/Block/mytickets.php:3 lib/Block/mytickets.php:24 +#: config/prefs.php.dist:75 +msgid "My Tickets" +msgstr "" + +#: lib/api.php:978 +msgid "My tickets by assignment date" +msgstr "" + +#: lib/api.php:977 +msgid "My tickets by creation date" +msgstr "" + +#: lib/api.php:979 +msgid "My tickets by due date" +msgstr "" + +#: lib/api.php:980 +msgid "My tickets by resolution date" +msgstr "" + +#: lib/Forms/Query.php:356 +msgid "Name" +msgstr "" + +#: lib/Forms/Admin/Type.php:198 +msgid "Name of the cloned copy" +msgstr "" + +#: lib/Query.php:211 +msgid "Ne_w Query" +msgstr "" + +#: lib/Driver.php:197 +msgid "New" +msgstr "" + +#: lib/Ticket.php:618 lib/Ticket.php:711 +msgid "New Attachment" +msgstr "" + +#: lib/Renderer/Comment.php:58 lib/Renderer/Comment.php:62 +#, php-format +msgid "New Attachment: %s" +msgstr "" + +#: ticket/queue.php:32 +msgid "New Queue" +msgstr "" + +#: ticket/create.php:67 lib/Block/tree_menu.php:21 +msgid "New Ticket" +msgstr "" + +#: ticket/type.php:31 +msgid "New Type" +msgstr "" + +#: templates/prevnext.inc:26 +msgid "Next>" +msgstr "" + +#: ticket/delete.php:33 lib/Forms/Query.php:383 lib/Forms/Admin/Version.php:96 +#: lib/Forms/Admin/State.php:121 lib/Forms/Admin/Priority.php:121 +#: lib/Forms/Admin/Queue.php:174 lib/Forms/Admin/Attribute.php:149 +#: lib/Forms/Admin/Reply.php:110 lib/Forms/Admin/Type.php:176 +msgid "No" +msgstr "" + +#: lib/Ticket.php:100 +#, php-format +msgid "" +"No priority for this ticket and no default priority for ticket type \"%s\" " +"specified." +msgstr "" + +#: lib/Block/myqueries.php:46 +msgid "No queries have been saved." +msgstr "" + +#: lib/Block/query.php:64 lib/Driver/sql.php:553 +msgid "No query to run" +msgstr "" + +#: lib/Block/queuecontents.php:25 +msgid "No queues available." +msgstr "" + +#: lib/Ticket.php:92 +#, php-format +msgid "" +"No state for this ticket and no default state for ticket type \"%s\" " +"specified." +msgstr "" + +#: reports.php:19 +msgid "No stats available." +msgstr "" + +#: lib/Driver.php:517 +#, php-format +msgid "No such backend \"%s\" found" +msgstr "" + +#: lib/View.php:33 +#, php-format +msgid "No such view \"%s\" found" +msgstr "" + +#: lib/Block/mytickets.php:45 +msgid "No tickets are assigned to you." +msgstr "" + +#: lib/Block/unassigned.php:45 +msgid "No tickets are unassigned!" +msgstr "" + +#: lib/Block/queuecontents.php:62 lib/Block/queuecontents.php:73 +msgid "No tickets in queue." +msgstr "" + +#: lib/Whups.php:716 +msgid "No tickets matched your search criteria." +msgstr "" + +#: lib/Ticket.php:84 +#, php-format +msgid "No type for this ticket and no default type for queue \"%s\" specified." +msgstr "" + +#: templates/prefs/sourceselect.inc:35 lib/Reports.php:88 +msgid "None" +msgstr "" + +#: lib/Renderer/Query.php:79 lib/Forms/Query.php:26 +msgid "Not" +msgstr "" + +#: config/prefs.php.dist:17 +msgid "Notification Options" +msgstr "" + +#: config/prefs.php.dist:117 +msgid "Only notify me of ticket changes from other users?" +msgstr "" + +#: config/prefs.php.dist:126 +msgid "Only notify me of ticket changes with comments?" +msgstr "" + +#: queue/rss.php:43 +msgid "Open" +msgstr "" + +#: lib/Block/queuesummary.php:49 +msgid "Open Tickets" +msgstr "" + +#: lib/Reports.php:11 +msgid "Open Tickets by Owner" +msgstr "" + +#: lib/Reports.php:9 +msgid "Open Tickets by Priority" +msgstr "" + +#: lib/Reports.php:6 +msgid "Open Tickets by Queue" +msgstr "" + +#: lib/Reports.php:10 +msgid "Open Tickets by Requester" +msgstr "" + +#: lib/Reports.php:7 +msgid "Open Tickets by State" +msgstr "" + +#: lib/Reports.php:8 +msgid "Open Tickets by Type" +msgstr "" + +#: lib/Block/queuecontents.php:47 +#, php-format +msgid "Open Tickets in %s" +msgstr "" + +#: queue/rss.php:119 queue/index.php:43 queue/index.php:57 +#, php-format +msgid "Open tickets in %s" +msgstr "" + +#: queue/rss.php:121 +msgid "Open tickets in all queues." +msgstr "" + +#: lib/Renderer/Query.php:78 lib/Forms/Query.php:25 +msgid "Or" +msgstr "" + +#: lib/Whups.php:681 lib/Ticket.php:617 lib/Ticket.php:701 lib/Ticket.php:702 +#: lib/Ticket.php:705 lib/Ticket.php:812 lib/Ticket.php:833 lib/Ticket.php:958 +#: lib/Renderer/Query.php:84 lib/Forms/CreateTicket.php:225 +#: lib/Forms/CreateTicket.php:243 lib/Forms/EditTicket.php:104 +msgid "Owners" +msgstr "" + +#: lib/Whups.php:866 +#, php-format +msgid "Permanently delete %s?" +msgstr "" + +#: ticket/update.php:22 ticket/type.php:74 ticket/delete.php:51 +#: ticket/queue.php:131 ticket/deleteAttachment.php:21 +msgid "Permission Denied" +msgstr "" + +#: ticket/delete.php:40 lib/Forms/EditTicket.php:196 +msgid "Permission Denied." +msgstr "" + +#: query/run.php:44 query/index.php:31 lib/Forms/Query.php:393 +#, php-format +msgid "Permission denied." +msgstr "" + +#: lib/Imple/ContactAutoCompleter.php:227 +msgid "Please resolve ambiguous or invalid addresses." +msgstr "" + +#: lib/Forms/Admin/Type.php:93 lib/Forms/Admin/Type.php:171 +msgid "Priorities for this Type" +msgstr "" + +#: ticket/type.php:66 ticket/queue.php:117 lib/Whups.php:669 lib/Whups.php:678 +#: lib/Ticket.php:610 lib/Ticket.php:807 lib/Ticket.php:953 +#: lib/Renderer/Query.php:125 lib/Forms/CreateTicket.php:147 +#: lib/Forms/EditTicket.php:68 lib/Forms/Query.php:198 +#: config/prefs.php.dist:49 +msgid "Priority" +msgstr "" + +#: lib/Renderer/Comment.php:115 +#, php-format +msgid "Priority ⇒ %s" +msgstr "" + +#: lib/Forms/Admin/Priority.php:24 lib/Forms/Admin/Priority.php:70 +#: lib/Forms/Admin/Priority.php:118 +msgid "Priority Description" +msgstr "" + +#: lib/Forms/Admin/Priority.php:23 lib/Forms/Admin/Priority.php:48 +#: lib/Forms/Admin/Priority.php:67 lib/Forms/Admin/Priority.php:94 +#: lib/Forms/Admin/Priority.php:115 +msgid "Priority Name" +msgstr "" + +#: search.php:130 +msgid "Public Queries" +msgstr "" + +#: query/index.php:172 +msgid "Query Builder" +msgstr "" + +#: lib/Forms/Query.php:321 +msgid "Query Name" +msgstr "" + +#: lib/Forms/QueryParameterForm.php:20 +msgid "Query Parameters" +msgstr "" + +#: query/rss.php:63 query/run.php:79 lib/Block/query.php:3 +#: lib/Block/query.php:51 +msgid "Query Results" +msgstr "" + +#: lib/Forms/Query.php:323 +msgid "Query Slug" +msgstr "" + +#: lib/Block/query.php:33 +msgid "Query to run" +msgstr "" + +#: lib/Whups.php:679 lib/Ticket.php:606 lib/Ticket.php:803 lib/Ticket.php:918 +#: lib/Ticket.php:923 lib/Renderer/Query.php:94 lib/Forms/Query.php:181 +#: lib/Forms/Search.php:39 lib/Block/queuecontents.php:32 +#: lib/Block/queuesummary.php:49 config/prefs.php.dist:50 +msgid "Queue" +msgstr "" + +#: lib/Renderer/Comment.php:100 +#, php-format +msgid "Queue ⇒ %s" +msgstr "" + +#: lib/Block/queuecontents.php:3 lib/Block/queuecontents.php:49 +msgid "Queue Contents" +msgstr "" + +#: lib/Forms/Admin/Queue.php:24 lib/Forms/Admin/Queue.php:89 +#: lib/Forms/Admin/Queue.php:170 +msgid "Queue Description" +msgstr "" + +#: lib/Forms/Admin/Queue.php:30 lib/Forms/Admin/Queue.php:97 +msgid "Queue Email" +msgstr "" + +#: lib/Forms/CreateTicket.php:34 lib/Forms/CreateTicket.php:45 +#: lib/Forms/Admin/Queue.php:23 lib/Forms/Admin/Queue.php:60 +#: lib/Forms/Admin/Queue.php:85 lib/Forms/Admin/Queue.php:166 +msgid "Queue Name" +msgstr "" + +#: lib/Forms/Admin/Queue.php:26 lib/Forms/Admin/Queue.php:93 +msgid "Queue Slug" +msgstr "" + +#: lib/Block/queuesummary.php:3 lib/Block/queuesummary.php:24 +msgid "Queue Summary" +msgstr "" + +#: ticket/queue.php:86 lib/Ticket.php:932 lib/Ticket.php:938 +#: lib/Forms/CreateTicket.php:93 +msgid "Queue Version" +msgstr "" + +#: admin/index.php:35 +msgid "Queue/Type Matri_x" +msgstr "" + +#: templates/admin/mtmatrix.inc:6 +msgid "Queue/Type Matrix" +msgstr "" + +#: lib/api.php:175 lib/api.php:887 +msgid "Queues" +msgstr "" + +#: templates/prevnext.inc:32 +msgid "Re_turn to Search Results" +msgstr "" + +#: lib/Forms/Admin/Attribute.php:147 +msgid "Really delete this attribute? This may cause data problems!" +msgstr "" + +#: lib/Forms/Admin/Reply.php:108 +msgid "Really delete this form reply?" +msgstr "" + +#: lib/Forms/Admin/Priority.php:122 +msgid "Really delete this priority? This may cause data problems!" +msgstr "" + +#: lib/Forms/Query.php:384 +msgid "Really delete this query? This operation is not undoable." +msgstr "" + +#: lib/Forms/Admin/Queue.php:176 +msgid "Really delete this queue? This may cause data problems!" +msgstr "" + +#: lib/Forms/Admin/State.php:122 +msgid "Really delete this state? This may cause data problems!" +msgstr "" + +#: ticket/delete.php:34 +msgid "" +"Really delete this ticket? It will NOT be archived, and will be gone forever." +msgstr "" + +#: lib/Forms/Admin/Type.php:178 +msgid "Really delete this type? This may cause data problems!" +msgstr "" + +#: lib/Forms/Admin/Version.php:97 +msgid "Really delete this version? This may cause data problems!" +msgstr "" + +#: lib/Mail.php:217 +msgid "Received message:" +msgstr "" + +#: search.php:114 +msgid "Refine Search" +msgstr "" + +#: admin/index.php:1170 +msgid "Reminders were sent." +msgstr "" + +#: lib/Forms/Admin/User.php:59 +msgid "Remove User" +msgstr "" + +#: ticket/watch.php:49 +msgid "Remove Watcher" +msgstr "" + +#: templates/prefs/sourceselect.inc:300 +msgid "Remove source" +msgstr "" + +#: lib/Renderer/Comment.php:95 +msgid "Reply to this comment" +msgstr "" + +#: reports.php:24 +msgid "Reports" +msgstr "" + +#: lib/Whups.php:680 lib/Ticket.php:965 lib/Renderer/Query.php:86 +msgid "Requester" +msgstr "" + +#: lib/Forms/Admin/Attribute.php:28 lib/Forms/Admin/Attribute.php:99 +msgid "Required Attribute?" +msgstr "" + +#: lib/Whups.php:685 lib/Ticket.php:991 lib/Driver.php:199 lib/api.php:1021 +#: config/prefs.php.dist:54 +msgid "Resolved" +msgstr "" + +#: lib/Forms/Admin/User.php:61 +msgid "Responsible Users" +msgstr "" + +#: lib/Forms/EditTicket.php:166 +msgid "Restrict Comment to:" +msgstr "" + +#: lib/Whups.php:306 +msgid "S_et Queue" +msgstr "" + +#: lib/Query.php:229 +msgid "Sa_ve Query" +msgstr "" + +#: templates/view/results.inc:96 lib/Forms/Query.php:319 +msgid "Save" +msgstr "" + +#: query/index.php:229 +msgid "Save Criterion" +msgstr "" + +#: lib/Forms/Query.php:318 +msgid "Save Query" +msgstr "" + +#: search.php:69 lib/Forms/Search.php:19 +msgid "Save as Query" +msgstr "" + +#: search.php:107 lib/Block/tree_menu.php:30 +msgid "Search" +msgstr "" + +#: lib/Forms/Query.php:276 +#, php-format +msgid "Search %s Attribute" +msgstr "" + +#: lib/Forms/Query.php:279 +msgid "Search Attribute" +msgstr "" + +#: lib/Forms/Query.php:48 lib/Forms/Query.php:131 +msgid "Search Comments" +msgstr "" + +#: lib/Forms/Query.php:46 +msgid "Search Owners" +msgstr "" + +#: lib/Forms/Query.php:47 +msgid "Search Requester" +msgstr "" + +#: search.php:99 +msgid "Search Results" +msgstr "" + +#: templates/prevnext.inc:38 +#, php-format +msgid "Search Results: %s of %s" +msgstr "" + +#: lib/Forms/Query.php:130 +msgid "Search Summary" +msgstr "" + +#: config/prefs.php.dist:76 +msgid "Search Tickets" +msgstr "" + +#: config/prefs.php.dist:25 +msgid "Select address book sources for adding and searching for addresses." +msgstr "" + +#: templates/prefs/sourceselect.inc:319 +msgid "Select all fields to search when expanding addresses." +msgstr "" + +#: config/prefs.php.dist:78 +msgid "Select the view to display after login:" +msgstr "" + +#: templates/prefs/sourceselect.inc:303 templates/prefs/sourceselect.inc:305 +msgid "Selected Address books:" +msgstr "" + +#: admin/index.php:36 +msgid "Sen_d Reminders" +msgstr "" + +#: lib/Forms/Admin.php:23 +msgid "Send Reminders" +msgstr "" + +#: lib/Forms/Admin.php:34 +msgid "Send only for this list of ticket ids" +msgstr "" + +#: lib/Forms/Admin/Priority.php:80 lib/Forms/Admin/Priority.php:82 +msgid "Set Default Priority" +msgstr "" + +#: lib/Forms/Admin/State.php:80 lib/Forms/Admin/State.php:82 +msgid "Set Default State" +msgstr "" + +#: ticket/queue.php:201 ticket/queue.php:210 ticket/queue.php:222 +msgid "Set Queue - Step 1" +msgstr "" + +#: ticket/queue.php:202 ticket/queue.php:211 +msgid "Set Queue - Step 2" +msgstr "" + +#: ticket/queue.php:212 +msgid "Set Queue - Step 3" +msgstr "" + +#: ticket/queue.php:189 +#, php-format +msgid "Set Queue for %s" +msgstr "" + +#: lib/api.php:906 +msgid "Set Requester" +msgstr "" + +#: ticket/type.php:139 ticket/type.php:148 +msgid "Set Type - Step 1" +msgstr "" + +#: ticket/type.php:140 +msgid "Set Type - Step 2" +msgstr "" + +#: ticket/type.php:127 +#, php-format +msgid "Set Type for %s" +msgstr "" + +#: lib/Whups.php:311 +msgid "Set _Type" +msgstr "" + +#: config/prefs.php.dist:144 +msgid "Show comments in chronological order, or most recent first?" +msgstr "" + +#: config/prefs.php.dist:95 +msgid "Show ticket IDs in the summary view?" +msgstr "" + +#: config/prefs.php.dist:87 +msgid "Show tickets you have requested in the summary view?" +msgstr "" + +#: config/templates.php.dist:16 +msgid "Simple HTML Report" +msgstr "" + +#: lib/Forms/Admin/Queue.php:27 +#, php-format +msgid "" +"Slugs allows direct access to this queue's open tickets by visiting: %s. " +"
Slug names may contain only letters, numbers or the _ (underscore) " +"character." +msgstr "" + +#: templates/view/results.inc:37 templates/view/results.inc:41 +#, php-format +msgid "Sort by %s" +msgstr "" + +#: lib/Forms/CreateTicket.php:136 lib/Forms/CreateTicket.php:175 +#: lib/Forms/AddComment.php:20 lib/Forms/AddComment.php:51 +msgid "Spam protection" +msgstr "" + +#: ticket/type.php:65 ticket/queue.php:116 lib/Whups.php:670 lib/Whups.php:676 +#: lib/Ticket.php:609 lib/Ticket.php:806 lib/Ticket.php:949 +#: lib/Renderer/Query.php:117 lib/Forms/EditTicket.php:62 +#: lib/Forms/Query.php:193 config/prefs.php.dist:47 +msgid "State" +msgstr "" + +#: lib/Renderer/Comment.php:110 +#, php-format +msgid "State ⇒ %s" +msgstr "" + +#: lib/Forms/Admin/State.php:25 lib/Forms/Admin/State.php:70 +msgid "State Category" +msgstr "" + +#: lib/Forms/Admin/State.php:24 lib/Forms/Admin/State.php:67 +#: lib/Forms/Admin/State.php:118 +msgid "State Description" +msgstr "" + +#: lib/Forms/Admin/State.php:23 lib/Forms/Admin/State.php:47 +#: lib/Forms/Admin/State.php:64 lib/Forms/Admin/State.php:96 +#: lib/Forms/Admin/State.php:115 +msgid "State Name" +msgstr "" + +#: lib/Forms/Admin/Type.php:76 lib/Forms/Admin/Type.php:165 +msgid "States for this Type" +msgstr "" + +#: templates/ticket/watchers.inc:1 +msgid "Status" +msgstr "" + +#: ticket/create.php:146 +msgid "Submit" +msgstr "" + +#: query/run.php:93 query/run.php:94 +msgid "Subscribe to this query" +msgstr "" + +#: admin/index.php:198 +#, php-format +msgid "Successfully Cloned %s to %s." +msgstr "" + +#: ticket/type.php:118 +msgid "Successfully changed ticket type." +msgstr "" + +#: ticket/delete.php:30 lib/Whups.php:668 lib/Whups.php:675 lib/Ticket.php:616 +#: lib/Ticket.php:643 lib/Ticket.php:646 lib/Ticket.php:650 lib/Ticket.php:812 +#: lib/Ticket.php:821 lib/Ticket.php:912 lib/Renderer/Query.php:89 +#: lib/Forms/CreateTicket.php:152 lib/Forms/EditTicket.php:58 +#: config/prefs.php.dist:46 +msgid "Summary" +msgstr "" + +#: lib/Renderer/Comment.php:51 +#, php-format +msgid "Summary ⇒ %s" +msgstr "" + +#: lib/Forms/Search.php:42 +msgid "Summary like" +msgstr "" + +#: lib/Renderer/Comment.php:79 +#, php-format +msgid "Taken from %s" +msgstr "" + +#: lib/Forms/Query.php:128 +msgid "Text" +msgstr "" + +#: lib/Driver/sql.php:80 lib/Driver/sql.php:1269 +msgid "That queue slug is already taken. Please select another." +msgstr "" + +#: lib/Forms/CreateTicket.php:129 +msgid "The Requester's Email Address" +msgstr "" + +#: view.php:58 lib/Ticket.php:439 lib/Ticket.php:487 +msgid "The VFS backend needs to be configured to enable attachment uploads." +msgstr "" + +#: admin/index.php:906 +#, php-format +msgid "The attribute \"%s\" has been added to %s." +msgstr "" + +#: admin/index.php:1006 +msgid "The attribute has been deleted." +msgstr "" + +#: admin/index.php:974 +msgid "The attribute has been modified." +msgstr "" + +#: admin/index.php:1015 +msgid "The attribute was not deleted." +msgstr "" + +#: admin/index.php:642 +msgid "The default priority has been set." +msgstr "" + +#: admin/index.php:506 +msgid "The default state has been set." +msgstr "" + +#: admin/index.php:1043 +#, php-format +msgid "The form reply \"%s\" has been added to %s." +msgstr "" + +#: admin/index.php:1135 +msgid "The form reply has been deleted." +msgstr "" + +#: admin/index.php:1108 +msgid "The form reply has been modified." +msgstr "" + +#: admin/index.php:1144 +msgid "The form reply was not deleted." +msgstr "" + +#: admin/index.php:556 +#, php-format +msgid "The priority \"%s\" has been added to %s." +msgstr "" + +#: admin/index.php:661 +msgid "The priority has been deleted." +msgstr "" + +#: admin/index.php:609 +msgid "The priority has been modified." +msgstr "" + +#: admin/index.php:670 +msgid "The priority was not deleted." +msgstr "" + +#: lib/Forms/Query.php:397 +#, php-format +msgid "The query \"%s\" couldn't be deleted: %s" +msgstr "" + +#: lib/Forms/Query.php:399 +#, php-format +msgid "The query \"%s\" has been deleted." +msgstr "" + +#: lib/Forms/Query.php:364 +#, php-format +msgid "The query couldn't be loaded:" +msgstr "" + +#: admin/index.php:300 +#, php-format +msgid "The queue \"%s\" has been created." +msgstr "" + +#: admin/index.php:392 +msgid "The queue has been deleted." +msgstr "" + +#: admin/index.php:359 +msgid "The queue has been modified." +msgstr "" + +#: admin/index.php:400 +msgid "The queue was not deleted." +msgstr "" + +#: lib/MIME/Viewer/zip.php:58 +msgid "The requested file does not exist in the Zip attachment." +msgstr "" + +#: data.php:26 +msgid "The requested template does not exist." +msgstr "" + +#: admin/index.php:422 +#, php-format +msgid "The state \"%s\" has been added to %s." +msgstr "" + +#: admin/index.php:525 +msgid "The state has been deleted." +msgstr "" + +#: admin/index.php:475 +msgid "The state has been modified." +msgstr "" + +#: admin/index.php:533 +msgid "The state was not deleted." +msgstr "" + +#: ticket/delete.php:78 +msgid "The ticket was not deleted." +msgstr "" + +#: admin/index.php:223 +#, php-format +msgid "The type \"%s\" has been modified." +msgstr "" + +#: admin/index.php:272 +msgid "The type has been deleted." +msgstr "" + +#: admin/index.php:280 +msgid "The type was not deleted." +msgstr "" + +#: admin/index.php:776 +#, php-format +msgid "The version \"%s\" has been added to %s." +msgstr "" + +#: admin/index.php:865 +msgid "The version has been deleted." +msgstr "" + +#: admin/index.php:835 +msgid "The version has been modified." +msgstr "" + +#: admin/index.php:873 +msgid "The version was not deleted." +msgstr "" + +#: lib/Forms/Admin/Attribute.php:70 +msgid "There are no attribute types to edit" +msgstr "" + +#: lib/Forms/Query.php:279 +msgid "There are no attributes defined." +msgstr "" + +#: lib/Forms/Admin/Reply.php:48 +msgid "There are no form replies to edit" +msgstr "" + +#: lib/Block/queuesummary.php:44 +msgid "There are no open tickets." +msgstr "" + +#: lib/Forms/Admin/Priority.php:44 lib/Forms/Admin/Priority.php:90 +msgid "There are no priorities to edit" +msgstr "" + +#: lib/Forms/Admin.php:31 +msgid "There are no queues available." +msgstr "" + +#: lib/Forms/Admin/Queue.php:57 +msgid "There are no queues to edit" +msgstr "" + +#: lib/Forms/CreateTicket.php:35 +msgid "There are no queues which you can create tickets in." +msgstr "" + +#: lib/Forms/Search.php:37 +msgid "There are no queues which you can search." +msgstr "" + +#: lib/Forms/Admin/State.php:43 lib/Forms/Admin/State.php:92 +msgid "There are no states to edit" +msgstr "" + +#: lib/Forms/CreateTicket.php:72 +msgid "" +"There are no ticket types associated with this queue; until there are, you " +"cannot create any tickets in this queue." +msgstr "" + +#: lib/Forms/Admin/Type.php:45 +msgid "There are no types to edit" +msgstr "" + +#: lib/Forms/Admin/User.php:75 +msgid "There are no users responsible for this queue." +msgstr "" + +#: lib/Forms/CreateTicket.php:242 +msgid "There are no users to which this ticket can be assigned." +msgstr "" + +#: lib/Forms/Admin/Version.php:44 +msgid "There are no versions to edit" +msgstr "" + +#: lib/Reports.php:161 +msgid "There is no data for this report." +msgstr "" + +#: admin/index.php:705 +#, php-format +msgid "There was an error adding \"%s\" to the responsible list for \"%s\":" +msgstr "" + +#: admin/index.php:911 +msgid "There was an error creating the attribute:" +msgstr "" + +#: admin/index.php:1051 +msgid "There was an error creating the form reply:" +msgstr "" + +#: admin/index.php:561 +msgid "There was an error creating the priority:" +msgstr "" + +#: admin/index.php:309 +msgid "There was an error creating the queue:" +msgstr "" + +#: admin/index.php:426 +msgid "There was an error creating the state:" +msgstr "" + +#: admin/index.php:780 +msgid "There was an error creating the version:" +msgstr "" + +#: admin/index.php:1010 +msgid "There was an error deleting the attribute:" +msgstr "" + +#: admin/index.php:1139 +msgid "There was an error deleting the form reply:" +msgstr "" + +#: admin/index.php:665 +msgid "There was an error deleting the priority:" +msgstr "" + +#: admin/index.php:395 +msgid "There was an error deleting the queue:" +msgstr "" + +#: admin/index.php:528 +msgid "There was an error deleting the state:" +msgstr "" + +#: ticket/delete.php:75 +msgid "There was an error deleting the ticket:" +msgstr "" + +#: admin/index.php:275 +msgid "There was an error deleting the type:" +msgstr "" + +#: admin/index.php:868 +msgid "There was an error deleting the version:" +msgstr "" + +#: admin/index.php:982 +msgid "There was an error editing the attribute:" +msgstr "" + +#: admin/index.php:1104 +msgid "There was an error editing the form reply:" +msgstr "" + +#: admin/index.php:615 +msgid "There was an error editing the priority:" +msgstr "" + +#: admin/index.php:375 +msgid "There was an error editing the queue:" +msgstr "" + +#: admin/index.php:480 +msgid "There was an error editing the state:" +msgstr "" + +#: admin/index.php:841 +msgid "There was an error editing the version:" +msgstr "" + +#: lib/Forms/Admin/User.php:35 +#, php-format +msgid "There was an error listing users: %s; %s" +msgstr "" + +#: queue/index.php:52 +#, php-format +msgid "There was an error locating tickets in this queue: " +msgstr "" + +#: admin/index.php:219 +msgid "There was an error modifying the type:" +msgstr "" + +#: search.php:92 +#, php-format +msgid "There was an error performing your search: %s" +msgstr "" + +#: admin/index.php:750 +#, php-format +msgid "" +"There was an error removing \"%s\" from the responsible list for \"%s\":" +msgstr "" + +#: admin/index.php:638 +msgid "There was an error setting the default priority:" +msgstr "" + +#: admin/index.php:502 +msgid "There was an error setting the default state:" +msgstr "" + +#: lib/Forms/Admin/Queue.php:31 +msgid "" +"This email address will be used when sending notifications for any queue " +"tickets." +msgstr "" + +#: data.php:29 +msgid "This is not a search results template." +msgstr "" + +#: lib/Query.php:377 lib/Query.php:550 +msgid "This query element cannot be edited." +msgstr "" + +#: ticket/queue.php:81 lib/Forms/CreateTicket.php:88 +msgid "" +"This queue requires that you specify a version, but there are no versions " +"associated with it. Until versions are created for this queue, you will not " +"be able to create tickets." +msgstr "" + +#: lib/Ticket.php:638 lib/Ticket.php:820 +msgid "Ticket" +msgstr "" + +#: ticket/delete.php:71 +#, php-format +msgid "Ticket %d has been deleted." +msgstr "" + +#: lib/api.php:949 +#, php-format +msgid "Ticket %s - %s" +msgstr "" + +#: lib/Driver/sql.php:1044 +#, php-format +msgid "Ticket %s was not found." +msgstr "" + +#: search.php:122 +msgid "Ticket Search" +msgstr "" + +#: lib/Forms/CreateTicket.php:142 +msgid "Ticket State" +msgstr "" + +#: templates/reports/stats.inc:3 +msgid "Ticket Stats" +msgstr "" + +#: lib/Forms/CreateTicket.php:80 +msgid "Ticket Type" +msgstr "" + +#: lib/Forms/Admin/Queue.php:103 +msgid "Ticket Types associated with this Queue" +msgstr "" + +#: lib/Ticket.php:633 +#, php-format +msgid "Ticket URL: %s" +msgstr "" + +#: ticket/update.php:94 +msgid "Ticket Updated" +msgstr "" + +#: lib/api.php:970 +msgid "Tickets" +msgstr "" + +#: query/rss.php:70 +#, php-format +msgid "Tickets matching the query \"%s\"." +msgstr "" + +#: templates/prefs/sourceselect.inc:322 +msgid "" +"To select multiple fields, hold down the Control (PC) or Command (Mac) while " +"clicking." +msgstr "" + +#: ticket/queue.php:89 lib/Whups.php:677 lib/Ticket.php:608 lib/Ticket.php:805 +#: lib/Ticket.php:945 lib/Renderer/Query.php:108 lib/Forms/Query.php:174 +#: config/prefs.php.dist:48 +msgid "Type" +msgstr "" + +#: lib/Renderer/Comment.php:105 +#, php-format +msgid "Type ⇒ %s" +msgstr "" + +#: lib/Forms/Admin/Type.php:23 lib/Forms/Admin/Type.php:70 +#: lib/Forms/Admin/Type.php:160 +msgid "Type Description" +msgstr "" + +#: lib/Forms/Admin/Type.php:22 lib/Forms/Admin/Type.php:48 +#: lib/Forms/Admin/Type.php:67 lib/Forms/Admin/Type.php:156 +msgid "Type Name" +msgstr "" + +#: lib/Ticket.php:961 +msgid "Unassigned" +msgstr "" + +#: lib/Block/unassigned.php:3 lib/Block/unassigned.php:24 +msgid "Unassigned Tickets" +msgstr "" + +#: lib/Forms/Admin.php:42 +msgid "Unassigned tickets" +msgstr "" + +#: lib/Driver.php:196 +msgid "Unconfirmed" +msgstr "" + +#: lib/Renderer/Query.php:141 lib/Renderer/Query.php:181 +#, php-format +msgid "Unknown node type %s" +msgstr "" + +#: lib/api.php:896 +msgid "Update" +msgstr "" + +#: ticket/update.php:108 +#, php-format +msgid "Update %s" +msgstr "" + +#: templates/admin/mtmatrix.inc:29 +msgid "Update Associations" +msgstr "" + +#: lib/Whups.php:683 lib/Ticket.php:981 +msgid "Updated" +msgstr "" + +#: lib/Ticket.php:615 lib/Ticket.php:640 +msgid "Updated By" +msgstr "" + +#: lib/Forms/Admin/User.php:34 lib/Forms/Admin/User.php:44 +#: lib/Forms/Admin/User.php:47 +msgid "User" +msgstr "" + +#: lib/Forms/Query.php:44 +msgid "User ID" +msgstr "" + +#: lib/Forms/Admin/Queue.php:131 +msgid "Users responsible for this Queue" +msgstr "" + +#: lib/Forms/Admin/User.php:79 +msgid "Users responsible for this queue" +msgstr "" + +#: lib/Ticket.php:607 lib/Ticket.php:804 lib/Renderer/Query.php:102 +#: lib/Forms/Query.php:185 config/prefs.php.dist:51 +msgid "Version" +msgstr "" + +#: lib/Forms/Admin/Version.php:24 lib/Forms/Admin/Version.php:70 +#: lib/Forms/Admin/Version.php:93 +msgid "Version Description" +msgstr "" + +#: lib/Forms/Admin/Version.php:23 lib/Forms/Admin/Version.php:48 +#: lib/Forms/Admin/Version.php:67 lib/Forms/Admin/Version.php:90 +msgid "Version Name" +msgstr "" + +#: ticket/type.php:43 ticket/queue.php:50 lib/Forms/AddComment.php:38 +msgid "Viewable only by members of" +msgstr "" + +#: lib/Forms/AddComment.php:25 +msgid "Watch this ticket" +msgstr "" + +#: ticket/watch.php:78 +#, php-format +msgid "Watchers for %s" +msgstr "" + +#: config/prefs.php.dist:104 +msgid "Weekday Day Month" +msgstr "" + +#: config/prefs.php.dist:105 +msgid "Weekday Day Month HH:MM:SS TZ" +msgstr "" + +#: ticket/delete.php:33 lib/Forms/Query.php:383 lib/Forms/Admin/Version.php:96 +#: lib/Forms/Admin/State.php:121 lib/Forms/Admin/Priority.php:121 +#: lib/Forms/Admin/Queue.php:174 lib/Forms/Admin/Attribute.php:149 +#: lib/Forms/Admin/Reply.php:110 lib/Forms/Admin/Type.php:176 +msgid "Yes" +msgstr "" + +#: view.php:54 +#, php-format +msgid "You are not allowed to view ticket %d." +msgstr "" + +#: lib/Driver/sql.php:1053 +#, php-format +msgid "You do not have permission to access this ticket (%s)." +msgstr "" + +#: lib/api.php:548 +msgid "You do not have permission to update this ticket." +msgstr "" + +#: lib/Block/myrequests.php:46 +msgid "You have no open requests." +msgstr "" + +#: lib/Forms/Query.php:353 lib/Block/query.php:28 +msgid "You have no saved queries." +msgstr "" + +#: lib/Whups.php:710 +msgid "You must select at least one queue to send reminders for." +msgstr "" + +#: lib/Forms/CreateTicket.php:132 lib/Forms/AddComment.php:18 +msgid "Your Email Address" +msgstr "" + +#: ticket/create.php:60 +#, php-format +msgid "" +"Your ticket ID is %s. An appropriate person has been notified of this " +"request." +msgstr "" + +#: lib/Mail.php:244 +msgid "[ Could not render body of message. ]" +msgstr "" + +#: lib/Whups.php:774 +msgid "_Admin" +msgstr "" + +#: lib/Whups.php:298 +msgid "_Comment" +msgstr "" + +#: lib/Whups.php:316 +msgid "_Delete" +msgstr "" + +#: lib/Query.php:232 +msgid "_Delete Query" +msgstr "" + +#: lib/Query.php:213 +msgid "_Edit Query" +msgstr "" + +#: admin/index.php:33 +msgid "_Edit Queues" +msgstr "" + +#: templates/menu.inc:5 +msgid "_Go" +msgstr "" + +#: query/index.php:156 +msgid "_Group Criteria" +msgstr "" + +#: lib/Whups.php:292 +msgid "_History" +msgstr "" + +#: lib/Query.php:226 +msgid "_Load Query" +msgstr "" + +#: lib/Whups.php:765 +#, php-format +msgid "_My %s" +msgstr "" + +#: lib/Whups.php:768 +msgid "_New Ticket" +msgstr "" + +#: query/index.php:154 +msgid "_Property Criteria" +msgstr "" + +#: lib/Whups.php:769 +msgid "_Query Builder" +msgstr "" + +#: lib/Whups.php:770 +msgid "_Reports" +msgstr "" + +#: lib/Whups.php:767 +msgid "_Search" +msgstr "" + +#: query/index.php:158 +msgid "_Text Criteria" +msgstr "" + +#: lib/Whups.php:294 +msgid "_Update" +msgstr "" + +#: query/index.php:155 +msgid "_User Criteria" +msgstr "" + +#: lib/Whups.php:302 +msgid "_Watch" +msgstr "" + +#: lib/Renderer/Query.php:161 +msgid "contains (case insensitive) substring" +msgstr "" + +#: lib/Renderer/Query.php:165 +msgid "contains (case sensitive) substring" +msgstr "" + +#: lib/Renderer/Query.php:169 +msgid "contains the word" +msgstr "" + +#: lib/Mail.php:94 lib/Mail.php:118 lib/Mail.php:146 +msgid "current user:" +msgstr "" + +#: lib/api.php:958 +msgid "estimated time" +msgstr "" + +#: lib/Renderer/Query.php:157 +msgid "is" +msgstr "" + +#: lib/Renderer/Query.php:149 +msgid "is greater than" +msgstr "" + +#: lib/Renderer/Query.php:153 +msgid "is less than" +msgstr "" + +#: lib/Renderer/Query.php:173 +msgid "matches the pattern" +msgstr "" diff --git a/whups/po/zh_CN.po b/whups/po/zh_CN.po new file mode 100644 index 000000000..47c5037bf --- /dev/null +++ b/whups/po/zh_CN.po @@ -0,0 +1,2049 @@ +# Whups Traditional Chinese Translation +# Copyright 2002 David Chang. +# David Chang , 2002. +# liaobin ,2004 +# +msgid "" +msgstr "" +"Project-Id-Version: whups\n" +"Report-Msgid-Bugs-To: dev@lists.horde.org\n" +"POT-Creation-Date: 2004-03-22 16:07+0100\n" +"PO-Revision-Date: 2003-01-08 10:53+0100\n" +"Last-Translator: liaobin \n" +"Language-Team: Chinese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=GB2312\n" +"Content-Transfer-Encoding: 8bit\n" + +#: admin.php:597 +#, fuzzy, php-format +msgid "%s added to those responsible for '%s'" +msgstr "'%s' ÏÖÔÚ½«¶Ô '%s' µ£¸ºÔðÈÎ" + +#: templates/reports/stats.inc:20 +#, php-format +msgid "%s days" +msgstr "%s Ìì" + +#: templates/comment.inc:55 +#, php-format +msgid "%s removed from this ticket by %s on %s" +msgstr "%s ÒÑɾ³ý´Ó´Ë¹¤×÷µ¥±»%sÔÚ%s" + +#: admin.php:636 +#, php-format +msgid "'%s' is no longer among those responsible for '%s'" +msgstr "'%s' ½«²»ÔÙ¶Ô '%s' µ£¸ºÔðÈÎ" + +#: admin.php:79 +msgid "- Stage 1" +msgstr "- ²½Öè 1" + +#: admin.php:84 +msgid "- Stage 2" +msgstr "- ²½Öè 2" + +#: scripts/mail-filter.php:98 +msgid "--priority option must be supplied." +msgstr "--ÓÅÏȼ¶Ñ¡Ïî±ØÐë±»Ö§³Ö¡£" + +#: scripts/mail-filter.php:70 +msgid "--queue option must be supplied." +msgstr "" + +#: scripts/mail-filter.php:112 +msgid "--state option must be supplied." +msgstr "--״̬ѡÏî±ØÐë±»Ö§³Ö¡£" + +#: scripts/mail-filter.php:84 +msgid "--type option must be supplied." +msgstr "--ÀàÐÍÑ¡Ïî±ØÐë±»Ö§³Ö¡£" + +#: lib/Driver.php:277 +#, php-format +msgid "-Added By: %s\n" +msgstr "-±»: %s ÐÂÔö\n" + +#: lib/Driver.php:322 lib/Driver.php:343 lib/Driver.php:364 lib/Driver.php:384 +#, php-format +msgid "-Client: %s" +msgstr "-¿Í»§£º %s" + +#: lib/Driver.php:257 lib/Driver.php:275 +#, php-format +msgid "-Client: %s\n" +msgstr "-¿Í»§£º %s\n" + +#: lib/Driver.php:259 +#, php-format +msgid "-Created By: %s\n" +msgstr "-±»: %s ½¨Á¢\n" + +#: lib/Driver.php:345 +#, php-format +msgid "-New Priority: %s" +msgstr "-н¨ÓÅÏÈȨ: %s" + +#: lib/Driver.php:386 +#, php-format +msgid "-New Queue: %s" +msgstr "-н¨¶ÓÁÐ: %s" + +#: lib/Driver.php:324 +#, php-format +msgid "-New State: %s" +msgstr "-н¨×´Ì¬: %s" + +#: lib/Driver.php:366 +#, fuzzy, php-format +msgid "-New Type: %s" +msgstr "-н¨×´Ì¬: %s" + +#: lib/Driver.php:320 lib/Driver.php:341 lib/Driver.php:362 +#, php-format +msgid "-Queue: %s" +msgstr "-¶ÓÁÐ: %s" + +#: lib/Driver.php:255 lib/Driver.php:273 +#, php-format +msgid "-Queue: %s\n" +msgstr "-¶ÓÁÐ: %s\n" + +#: lib/Driver.php:260 lib/Driver.php:278 lib/Driver.php:325 lib/Driver.php:346 +#: lib/Driver.php:367 lib/Driver.php:387 +msgid "-Summary:" +msgstr "-ÕªÒª:" + +#: lib/Driver.php:319 lib/Driver.php:340 lib/Driver.php:361 lib/Driver.php:382 +#, php-format +msgid "-Ticket %s" +msgstr "-¹¤×÷µ¥ %s" + +#: lib/Driver.php:254 lib/Driver.php:272 +#, php-format +msgid "-Ticket %s\n" +msgstr "-¹¤×÷µ¥ %s\n" + +#: lib/api.php:171 +msgid "No summary" +msgstr "ûÓÐÕªÒª" + +#: view.php:55 +#, php-format +msgid "Access denied to %s" +msgstr "ûÓÐȨÏÞ %s" + +#: lib/Admin.php:719 +msgid "Add Attribute" +msgstr "ÐÂÔöÊôÐÔ" + +#: lib/Query.php:536 +msgid "Add Attribute Criterion" +msgstr "ÐÂÔöÊôÐÔ¹æÔò" + +#: details.php:39 +msgid "Add Comment" +msgstr "ÐÂÔöÆÀÂÛ" + +#: details.php:105 +msgid "Add Comment Succeeded" +msgstr "ÐÂÔöÆÀÂ۳ɹ¦" + +#: query.php:178 +msgid "Add Criterion" +msgstr "ÐÂÔö¹æÔò" + +#: lib/Admin.php:543 +msgid "Add Priority" +msgstr "ÐÂÔöÓÅÏÈȨ" + +#: lib/Query.php:481 +msgid "Add Property Criterion" +msgstr "ÐÂÔöÌØÐÔ¹æÔò" + +#: lib/Admin.php:102 lib/Admin.php:103 +msgid "Add Queue" +msgstr "ÐÂÔö¶ÓÁÐ" + +#: lib/Admin.php:451 +msgid "Add State" +msgstr "ÐÂÔö״̬" + +#: lib/Admin.php:14 lib/Admin.php:15 +msgid "Add Subject" +msgstr "ÐÂÔöÖ÷Ìâ" + +#: lib/Query.php:440 +msgid "Add Text Criterion" +msgstr "ÐÂÔöÄÚÈݹæÔò" + +#: lib/Admin.php:308 lib/Admin.php:309 +msgid "Add Type" +msgstr "ÐÂÔöÀàÐÍ" + +#: admin.php:79 admin.php:84 +#, php-format +msgid "Add Type %s" +msgstr "ÐÂÔöÀàÐÍ %s" + +#: lib/Query.php:389 +msgid "Add User Criterion" +msgstr "ÐÂÔöÓû§¹æÔò" + +#: lib/Admin.php:245 +msgid "Add Users" +msgstr "ÐÂÔöÓû§" + +#: lib/Admin.php:631 +msgid "Add Version" +msgstr "ÐÂÔö°æ±¾" + +#: lib/Driver.php:189 +#, php-format +msgid "Added a %s link to %s." +msgstr "ÒÑÌí¼Ó%sÁ¬½Óµ½'%s" + +#: create.php:147 +#, php-format +msgid "Adding your ticket failed: %s." +msgstr "ÐÂÔö¹¤×÷µ¥Ê§°Ü: %s." + +#: lib/Search.php:175 lib/Search.php:236 +msgid "Additional Comment" +msgstr "¸½¼ÓÆÀÂÛ" + +#: templates/menu/menu.inc:23 lib/api.php:146 +msgid "Admin" +msgstr "¹ÜÀí" + +#: admin.php:50 +msgid "Administration" +msgstr "¹ÜÀí" + +#: create.php:153 +msgid "An appropriate person has been notified of this request." +msgstr "ÔÚÕâ´ÎµÄͶƱÖÐÒÑ֪ͨһλÊʵ±µÄÈËÔ±" + +#: templates/queryrenderer.inc:97 lib/Query.php:345 +msgid "And" +msgstr "ÇÒ" + +#: search.php:49 search.php:59 search.php:62 search.php:78 search.php:95 +#: lib/Query.php:487 lib/Query.php:491 lib/Search.php:29 lib/Search.php:71 +#: lib/Search.php:75 +msgid "Any" +msgstr "ÈκÏ" + +#: lib/Search.php:152 lib/Search.php:181 lib/Search.php:240 lib/Search.php:316 +#: lib/Search.php:356 lib/Search.php:414 lib/Search.php:483 lib/Search.php:585 +msgid "Any Group" +msgstr "ÈκÎÓû§×é" + +#: config/prefs.php.dist:47 +msgid "Ascending" +msgstr "ÓÉÏÈÖÁºó" + +#: details.php:42 +msgid "Assign Ticket" +msgstr "·ÖÅ乤×÷µ¥" + +#: details.php:173 +msgid "Assign Ticket Succeeded" +msgstr "·ÖÅ乤×÷µ¥³É¹¦" + +#: lib/Whups.php:321 lib/Search.php:116 lib/Driver.php:74 +#: config/prefs.php.dist:36 +msgid "Assigned" +msgstr "ÒÑ·ÖÅä" + +#: lib/Driver.php:301 +#, php-format +msgid "Assigned By : %s" +msgstr "±»: %s ·ÖÅä" + +#: lib/Driver.php:300 +#, php-format +msgid "Assigned To : %s" +msgstr "ÒÑ·ÖÅ䏸: %s" + +#: admin.php:1012 +msgid "Associations updated successfully." +msgstr "ÁªÏµ¸üгɹ¦¡£" + +#: lib/Search.php:174 +msgid "Attachment" +msgstr "¸½¼þ" + +#: templates/comment.inc:105 +#, php-format +msgid "Attachment '%s' uploaded by %s on %s" +msgstr "¸½¼þ%sÒѱ»%sÔÚ%sÉÏ´«" + +#: details.php:129 +msgid "Attachment successfully uploaded" +msgstr "¸½¼þÒѳɹ¦ÉÏ´«" + +#: lib/Search.php:118 +msgid "Attachments" +msgstr "¸½¼þ" + +#: query.php:40 +msgid "Attribute Criteria" +msgstr "ÊôÐÔ¹æÔò" + +#: lib/Admin.php:723 lib/Admin.php:769 lib/Admin.php:792 +msgid "Attribute Description" +msgstr "ÊôÐÔÃèÊö" + +#: lib/Admin.php:722 lib/Admin.php:747 lib/Admin.php:766 lib/Admin.php:789 +msgid "Attribute Name" +msgstr "ÊôÐÔÃû³Æ" + +#: lib/Admin.php:380 +msgid "Attributes for this Type" +msgstr "´ËÊôÐÔµÄ״̬" + +#: config/prefs.php.dist:118 +msgid "Autolink to other tickets in comments?" +msgstr "ÔÚÆÀÂÛÖÐ×Ô¶¯Á¬½Óµ½ÆäËü¹¤×÷µ¥?" + +#: lib/Reports.php:9 +msgid "Average days to close by Owner" +msgstr "ÒÔÓµÓÐÕ߯½¾ùÈÕÊý¹Ø±Õ" + +#: lib/Reports.php:11 +msgid "Average days to close by Queue" +msgstr "ÒÔ¶ÓÁÐÆ½¾ùÈÕÊý¹Ø±Õ" + +#: lib/Reports.php:10 +msgid "Average days to close by Requester" +msgstr "ÒÔͶƱÕ߯½¾ùÈÕÊý¹Ø±Õ" + +#: lib/Reports.php:13 +msgid "Average time a ticket is unresolved" +msgstr "ÒÔδ½â¾öƽ¾ùÈÕÊý¹Ø±Õ" + +#: scripts/mail-filter.php:94 +#, php-format +msgid "Bad type `%s' for queue." +msgstr "¶ÓÁдíÎóµÄÀàÐÍ%s" + +#: lib/Query.php:350 +msgid "Branch Type" +msgstr "·ÖÖ§ÀàÐÍ" + +#: lib/Admin.php:156 +msgid "Can tickets in this Queue be assigned to any client?" +msgstr "ÔÚÕâ¸ö¶ÓÁÐÖеŤ×÷µ¥ÄÜ·ÖÅ䏸Èκοͻ§Âð£¿" + +#: lib/Query.php:44 +msgid "Case Insensitive Substring" +msgstr "×Ó×Ö·û´®²»·Ö´óСд" + +#: lib/Query.php:45 +msgid "Case Sensitive Substring" +msgstr "×Ó×Ö·û´®Çø·Ö´óСд" + +#: templates/queryrenderer.inc:28 +msgid "Change" +msgstr "±ä¸ü" + +#: lib/Query.php:361 +msgid "Change Ticket Type" +msgstr "±ä¸ü¹¤×÷µ¥ÀàÐÍ" + +#: config/prefs.php.dist:11 +#, fuzzy +msgid "Change display options such as how search results are sorted." +msgstr "¸ü¸ÄÏÔʾѡÏî, Èç³ÊÏÖ·ç¸ñ,²éÕÒ½á¹ûÈçºÎÅÅÐòµÈ." + +#: config/prefs.php.dist:18 +msgid "Change options for email notifications of ticket activity." +msgstr "¹¤×÷µ¥»î¶¯µÄÓʼþ֪ͨѡÏî±ä¸ü." + +#: query.php:45 +msgid "Choose Action:" +msgstr "Ñ¡Ôñ»î¶¯:" + +#: config/prefs.php.dist:128 +msgid "Chronological (oldest first)" +msgstr "°´Äê´ú˳Ðò(ÀϵÄÓÅÏÈ)" + +#: templates/savedsearches.inc:23 +msgid "Clear All Searches" +msgstr "Çå¿ÕËùÓвéѯ" + +#: lib/Create.php:70 lib/Search.php:51 lib/Search.php:104 +msgid "Client" +msgstr "¿Í»§" + +#: lib/Driver.php:298 +#, php-format +msgid "Client : %s" +msgstr "¿Í»§ £º%s" + +#: lib/Search.php:516 +msgid "Clients" +msgstr "¿Í»§" + +#: lib/Admin.php:431 +msgid "Clone" +msgstr "¿Ë¡" + +#: lib/Admin.php:437 +msgid "Clone Description" +msgstr "¿Ë¡ÃèÊö" + +#: admin.php:120 lib/Admin.php:323 +msgid "Clone Type" +msgstr "¿Ë¡ÀàÐÍ" + +#: config/templates.php.dist:43 +msgid "Comma Separated Values (CSV file)" +msgstr "¶ººÅ·Ö¸ôÖµ (CSV ÀàÐÍÎļþ)" + +#: templates/queryrenderer.inc:111 lib/Search.php:145 lib/Search.php:310 +#: lib/Search.php:350 lib/Search.php:390 lib/Search.php:408 lib/Search.php:477 +#: lib/Search.php:579 +msgid "Comment" +msgstr "ÆÀÂÛ" + +#: lib/Driver.php:451 +#, fuzzy, php-format +msgid "Comment by %s on %s:" +msgstr "-%s ÓÚ %s ÆÀÂÛ:" + +#: templates/comment.inc:153 +#, fuzzy, php-format +msgid "Comment from %s on %s" +msgstr "-%s ÓÚ %s ÆÀÂÛ:" + +#: templates/queryrenderer.inc:110 +msgid "Commentor" +msgstr "ÆÀÂÛÕß" + +#: lib/Admin.php:435 +#, php-format +msgid "Copy of %s" +msgstr "%sµÄ¿½±´" + +#: lib/Admin.php:374 +msgid "Create Default Priorities" +msgstr "½¨Á¢Ä¬ÈÏÓÅÏȼ¶" + +#: lib/Admin.php:364 +msgid "Create Default States" +msgstr "½¨Á¢Ä¬Èϲ½Öè" + +#: config/prefs.php.dist:60 +msgid "Create Ticket" +msgstr "½¨Á¢¹¤×÷µ¥" + +#: lib/Create.php:24 +msgid "Create Ticket - Step 1" +msgstr "½¨Á¢¹¤×÷µ¥ - ²½Öè 1" + +#: lib/Create.php:50 +msgid "Create Ticket - Step 2" +msgstr "½¨Á¢¹¤×÷µ¥ - ²½Öè 2" + +#: lib/Create.php:95 +msgid "Create Ticket - Step 3" +msgstr "½¨Á¢¹¤×÷µ¥ - ²½Öè 3" + +#: lib/Create.php:131 +msgid "Create Ticket - Step 4" +msgstr "½¨Á¢¹¤×÷µ¥ - ²½Öè 4" + +#: lib/Whups.php:320 lib/Search.php:115 config/prefs.php.dist:35 +msgid "Created" +msgstr "Òѽ¨Á¢" + +#: query.php:168 query.php:185 +msgid "Current Query" +msgstr "Ŀǰ²éѯ" + +#: templates/queryrenderer.inc:26 +msgid "Current Ticket Type" +msgstr "Ŀǰ¹¤×÷µ¥ÀàÐÍ" + +#: lib/Query.php:363 +msgid "Current Type" +msgstr "ĿǰÀàÐÍ" + +#: config/prefs.php.dist:91 +msgid "Date/Time format for search results" +msgstr "ÒÔ ÈÕÆÚ/ʱ¼ä Ϊ²éÕÒ½á¹ûµÄ¸ñʽ" + +#: config/prefs.php.dist:38 +msgid "Default sorting criteria:" +msgstr "Ô¤ÉèÅÅÁйæÔò:" + +#: config/prefs.php.dist:49 +msgid "Default sorting direction:" +msgstr "Ô¤ÉèÅÅÁз½Ïò:" + +#: query.php:46 +msgid "Delete" +msgstr "ɾ³ý" + +#: admin.php:900 lib/Admin.php:735 +msgid "Delete Attribute" +msgstr "ɾ³ýÊôÐÔ" + +#: lib/Admin.php:781 +msgid "Delete Attribute Confirmation" +msgstr "ɾ³ýÊôÐÔÈ·ÈÏ" + +#: admin.php:509 lib/Admin.php:559 +msgid "Delete Priority" +msgstr "ɾ³ýÓÅÏÈȨ" + +#: lib/Admin.php:605 +msgid "Delete Priority Confirmation" +msgstr "ɾ³ýÓÅÏÈȨȷÈÏ" + +#: admin.php:277 lib/Admin.php:118 +msgid "Delete Queue" +msgstr "ɾ³ý¶ÓÁÐ" + +#: lib/Admin.php:220 +msgid "Delete Queue Confirmation" +msgstr "ɾ³ý¶ÓÁÐÈ·ÈÏ" + +#: templates/savedsearches.inc:29 templates/savedsearches.inc:30 +msgid "Delete Search" +msgstr "ɾ³ý²éѯ" + +#: admin.php:391 lib/Admin.php:468 +msgid "Delete State" +msgstr "ɾ³ý״̬" + +#: lib/Admin.php:517 +msgid "Delete State Confirmation" +msgstr "ɾ³ý״̬ȷÈÏ" + +#: admin.php:683 lib/Admin.php:29 +msgid "Delete Subject" +msgstr "ɾ³ýÖ÷Ìâ" + +#: lib/Admin.php:80 +msgid "Delete Subject Confirmation" +msgstr "ɾ³ýÖ÷ÌâÈ·ÈÏ" + +#: details.php:52 +msgid "Delete Ticket" +msgstr "ɾ³ý¹¤×÷µ¥" + +#: details.php:350 +msgid "Delete Ticket Succeeded" +msgstr "ɾ³ý¹¤×÷µ¥³É¹¦" + +#: admin.php:114 lib/Admin.php:323 +msgid "Delete Type" +msgstr "ɾ³ýÀàÐÍ" + +#: lib/Admin.php:394 +msgid "Delete Type Confirmation" +msgstr "ɾ³ýÀàÐÍÈ·ÈÏ" + +#: admin.php:783 lib/Admin.php:647 +msgid "Delete Version" +msgstr "ɾ³ý°æ±¾" + +#: lib/Admin.php:693 +msgid "Delete Version Confirmation" +msgstr "ɾ³ý°æ±¾È·ÈÏ" + +#: config/prefs.php.dist:48 +msgid "Descending" +msgstr "½µÐò" + +#: lib/Create.php:120 +msgid "Description" +msgstr "ÃèÊö" + +#: config/prefs.php.dist:10 +msgid "Display Options" +msgstr "ÏÔʾѡÏî" + +#: lib/Whups.php:451 +msgid "Download" +msgstr "ÏÂÔØ" + +#: query.php:47 +msgid "Edit" +msgstr "±à¼­" + +#: lib/Admin.php:143 lib/Admin.php:348 +#, php-format +msgid "Edit %s" +msgstr "±à¼­ %s" + +#: admin.php:895 lib/Admin.php:735 lib/Admin.php:758 +msgid "Edit Attribute" +msgstr "±à¼­ÊôÐÔ" + +#: details.php:49 lib/Admin.php:382 +msgid "Edit Attributes" +msgstr "±à¼­ÊôÐÔ" + +#: lib/Admin.php:372 +msgid "Edit Priorities" +msgstr "±à¼­ÓÅÏÈȨ" + +#: admin.php:504 lib/Admin.php:559 lib/Admin.php:582 +msgid "Edit Priority" +msgstr "±à¼­ÓÅÏÈȨ" + +#: runquery.php:24 +msgid "Edit Query" +msgstr "±à¼­²éѯ" + +#: admin.php:271 lib/Admin.php:118 +msgid "Edit Queue" +msgstr "±à¼­¶ÓÁÐ" + +#: admin.php:28 +msgid "Edit Queues" +msgstr "±à¼­¶ÓÁÐ" + +#: admin.php:386 lib/Admin.php:468 lib/Admin.php:491 +msgid "Edit State" +msgstr "±à¼­×´Ì¬" + +#: lib/Admin.php:362 +msgid "Edit States" +msgstr "±à¼­×´Ì¬" + +#: admin.php:678 lib/Admin.php:29 lib/Admin.php:51 +msgid "Edit Subject" +msgstr "±à¼­Ö÷Ìâ" + +#: admin.php:30 +msgid "Edit Subjects" +msgstr "±à¼­Ö÷Ìâ" + +#: admin.php:108 lib/Admin.php:323 +msgid "Edit Type" +msgstr "±à¼­ÀàÐÍ" + +#: admin.php:29 +msgid "Edit Types" +msgstr "±à¼­ÀàÐÍ" + +#: admin.php:778 lib/Admin.php:647 lib/Admin.php:670 +msgid "Edit Version" +msgstr "±à¼­°æ±¾" + +#: lib/Admin.php:734 +msgid "Edit or Delete Attributes" +msgstr "±à¼­»òɾ³ýÊôÐÔ" + +#: lib/Admin.php:558 +msgid "Edit or Delete Priorities" +msgstr "±à¼­»òɾ³ýÓÅÏÈȨ" + +#: lib/Admin.php:117 +msgid "Edit or Delete Queues" +msgstr "±à¼­»òɾ³ý¶ÓÁÐ" + +#: lib/Admin.php:467 +msgid "Edit or Delete States" +msgstr "±à¼­»òɾ³ý״̬" + +#: lib/Admin.php:28 +msgid "Edit or Delete Subjects" +msgstr "±à¼­»òɾ³ýÖ÷Ìâ" + +#: lib/Admin.php:322 +msgid "Edit or Delete Types" +msgstr "±à¼­»òɾ³ýÀàÐÍ" + +#: lib/Admin.php:646 +msgid "Edit or Delete Versions" +msgstr "±à¼­»òɾ³ý°æ±¾" + +#: lib/Admin.php:196 +msgid "Edit the permissions on this queue" +msgstr "±à¼­´Ë¶ÓÁеÄȨÏÞ" + +#: lib/Admin.php:191 +msgid "Edit the users responsible for this queue" +msgstr "±à¼­´Ë¶ÓÁеĸºÔðÈË" + +#: lib/Admin.php:171 +msgid "Edit the versions for this queue" +msgstr "±à¼­´Ë¶ÓÁеİ汾" + +#: lib/Search.php:45 +#, php-format +msgid "Error fetching clients: %s" +msgstr "»ñÈ¡¿Í»§´íÎó£º%s" + +#: query.php:156 +#, php-format +msgid "Error: Unknown query form %s, defaulting to properties" +msgstr "´íÎó: À´×Ô %s µÄδ֪²éѯ,Ô¤ÉèΪÐÔÖÊ" + +#: lib/Query.php:43 +msgid "Exact Match" +msgstr "¾«È·Æ¥Åä" + +#: runquery.php:70 runquery.php:86 query.php:30 +msgid "Execute Query" +msgstr "Ö´Ðвéѯ" + +#: lib/Admin.php:819 +msgid "For tickets from these queues" +msgstr "" + +#: lib/Admin.php:823 +msgid "For tickets which are" +msgstr "" + +#: templates/menu/menu.inc:48 +msgid "Go" +msgstr "תµ½" + +#: lib/Create.php:158 lib/Search.php:226 +msgid "Group Owners" +msgstr "Óû§×éÓµÓÐÕß" + +#: templates/menu/menu.inc:37 +msgid "Help" +msgstr "°ïÖú" + +#: lib/api.php:707 +msgid "Hidden Comments" +msgstr "Òþ²ØÆÀÂÛ" + +#: lib/Search.php:81 +msgid "Hide Assigned" +msgstr "Òþ²ØÒÑ·ÖÅä" + +#: lib/Search.php:80 +msgid "Hide New" +msgstr "Òþ²ØÐ½¨" + +#: lib/Search.php:82 +msgid "Hide Resolved" +msgstr "Òþ²ØÒѽâ¾ö" + +#: lib/Search.php:79 +msgid "Hide Unconfirmed" +msgstr "Òþ²ØÎ´È·ÈÏ" + +#: query.php:49 +msgid "Hoist" +msgstr "ÉýÆð" + +#: templates/queryrenderer.inc:105 lib/Whups.php:313 lib/Query.php:483 +#: config/prefs.php.dist:28 +msgid "Id" +msgstr "Id" + +#: lib/Admin.php:159 +#, fuzzy +msgid "If not, select clients associated with this Queue" +msgstr "ÓëÕâ¸ö¶ÓÁÐÏà¹ØÁªµÄÖ÷Ìâ" + +#: lib/Driver.php:405 +#, php-format +msgid "If you believe you have recieved this mail in error, please contact %s." +msgstr "Èç¹ûÄú¾õµÃÊÕµÄÕâ·âÐżþÓдíÎó,ÇëÓë %s ÁªÂç." + +#: lib/Search.php:54 +msgid "" +"If you don't select any categories, no filtering will be done on ticket " +"category." +msgstr "" + +#: lib/Search.php:57 +msgid "" +"If you don't select any types, no filtering will be done on ticket type." +msgstr "" + +#: lib/Admin.php:826 +msgid "" +"If you select any tickets that do not have an owner, who should we send " +"email to?" +msgstr "" + +#: templates/comment.inc:74 +#, fuzzy, php-format +msgid "Initial priority of '%s' set by %s on %s" +msgstr ", ³õʼÓÅÏÈȨ '%s'." + +#: templates/comment.inc:94 +#, php-format +msgid "Initial queue of '%s' set by %s on %s" +msgstr "" + +#: templates/comment.inc:64 +#, fuzzy, php-format +msgid "Initial state of '%s' set by %s on %s" +msgstr "'%s' µÄ³õʼ״̬" + +#: templates/comment.inc:84 +#, fuzzy, php-format +msgid "Initial type of '%s' set by %s on %s" +msgstr "'%s' µÄ³õʼ״̬" + +#: query.php:50 +msgid "Insert And" +msgstr "²åÈëÇÒ" + +#: lib/Query.php:342 +msgid "Insert Branch" +msgstr "²åÈë·ÖÖ§" + +#: query.php:52 +msgid "Insert Not" +msgstr "²åÈë²»ÊÇ" + +#: query.php:51 +msgid "Insert Or" +msgstr "²åÈë»ò" + +#: query.php:53 +msgid "Insert Query" +msgstr "²åÈë²éѯ" + +#: lib/Admin.php:169 +msgid "Keep a set of versions for this queue?" +msgstr "Ϊ´Ë¶ÓÁй̶¨Ò»×é°æ±¾?" + +#: lib/Driver.php:191 +msgid "Link added." +msgstr "Á¬½ÓÒÑÌí¼õ¡£" + +#: runquery.php:26 query.php:31 lib/Query.php:612 +msgid "Load Query" +msgstr "¼ÓÔØ²éѯ" + +#: templates/menu/menu.inc:28 +msgid "Login" +msgstr "µÇ¼" + +#: config/prefs.php.dist:89 +msgid "MM/DD/YY" +msgstr "ÔÂ/ÈÕ/Äê" + +#: config/prefs.php.dist:90 +msgid "MM/DD/YY HH:MM:SS" +msgstr "ÔÂ/ÈÕ/Äê ʱ:·Ö:Ãë" + +#: lib/Admin.php:429 +#, php-format +msgid "Make a clone of %s" +msgstr "´´½¨%sµÄ¿Ë¡" + +#: lib/Query.php:542 +msgid "Match" +msgstr "Æ¥Åä" + +#: lib/Query.php:392 lib/Query.php:443 lib/Query.php:543 +msgid "Match Operator" +msgstr "Æ¥Åä·û" + +#: lib/Query.php:47 +msgid "Match Pattern" +msgstr "ÓëÑù±¾Æ¥Åä" + +#: lib/Query.php:46 +msgid "Match Word" +msgstr "Óë×Ö·û´®Æ¥Åä" + +#: lib/Reports.php:14 +msgid "Maximum time a ticket is unresolved" +msgstr "Ò»¸ö¹¤×÷µ¥Î´½â¾öµÄ×î´óʱ¼ä" + +#: lib/Reports.php:15 +msgid "Minimum time a ticket is unresolved" +msgstr "Ò»¸ö¹¤×÷µ¥Î´½â¾öµÄ×îСʱ¼ä" + +#: config/prefs.php.dist:129 +msgid "Most recent first" +msgstr "×î½üµÄÓÅÏÈ" + +#: query.php:48 +msgid "Move" +msgstr "ÒÆ¶¯" + +#: details.php:332 +#, php-format +msgid "Moved ticket %d to '%s'" +msgstr "ÒÆ¶¯¹¤×÷µ¥%dµ½%s" + +#: mybugs.php:61 templates/menu/menu.inc:8 +#, php-format +msgid "My %s" +msgstr "ÎÒµÄ %s" + +#: mybugs.php:42 +msgid "My Assigned Tickets" +msgstr "ÎÒµÄÒÑ·ÖÅ乤×÷µ¥" + +#: mybugs.php:58 +msgid "My Open Requests" +msgstr "ÎÒËù¿ª·ÅµÄͶƱ" + +#: mybugs.php:75 search.php:176 +msgid "My Searches" +msgstr "ÎҵIJéÕÒ" + +#: config/prefs.php.dist:58 +msgid "My Tickets" +msgstr "ÎҵŤ×÷µ¥" + +#: lib/Query.php:591 lib/Query.php:628 +msgid "Name" +msgstr "Ãû³Æ" + +#: lib/Admin.php:434 +msgid "Name of the cloned copy" +msgstr "¿Ë¡¿½±´µÄÃû³Æ" + +#: lib/Driver.php:73 +msgid "New" +msgstr "ÐÂÔö" + +#: lib/Search.php:348 lib/Search.php:388 +msgid "New Priority" +msgstr "ÐÂÔöÓÅÏÈȨ" + +#: query.php:29 +msgid "New Query" +msgstr "ÐÂÔö²éѯ" + +#: lib/Search.php:476 +#, fuzzy +msgid "New Queue" +msgstr "ÐÂÔö²éѯ" + +#: lib/Search.php:235 lib/Search.php:308 +msgid "New State" +msgstr "ÐÂÔö״̬" + +#: create.php:26 templates/menu/menu.inc:11 lib/Block/summary.php:24 +msgid "New Ticket" +msgstr "ÐÂÔö¹¤×÷µ¥" + +#: lib/Search.php:407 +msgid "New Type" +msgstr "ÐÂÔöÀàÐÍ" + +#: lib/Driver.php:270 +#, php-format +msgid "New comment for ticket %s" +msgstr "ÐÂÔö¹¤×÷µ¥ %s µÄÆÀÂÛ" + +#: lib/Driver.php:252 +#, php-format +msgid "New ticket (%s): %s" +msgstr "ÐÂÔö¹¤×÷µ¥ (%s): %s" + +#: lib/Admin.php:90 lib/Admin.php:233 lib/Admin.php:415 lib/Admin.php:531 +#: lib/Admin.php:619 lib/Admin.php:707 lib/Admin.php:795 lib/Search.php:280 +msgid "No" +msgstr "·ñ" + +#: clearsearch.php:34 +msgid "No searches cleared." +msgstr "ûÓвéѯ±»Çå¿Õ¡£" + +#: reports.php:17 +msgid "No stats available." +msgstr "ûÓÐÓÐЧµÄ״̬¡£" + +#: lib/Driver.php:66 +#, php-format +msgid "No such backend '%s' found" +msgstr "ÕÒ²»µ½·þÎñ¶Ë '%s'" + +#: details.php:23 +msgid "No such ticket." +msgstr "Î޴˹¤×÷µ¥." + +#: lib/Whups.php:352 +msgid "No tickets matched your search criteria." +msgstr "ûÓй¤×÷µ¥·ûºÏÄúµÄ²éѯÌõ¼þ¡£" + +#: lib/Block/summary.php:75 +msgid "No tickets to display" +msgstr "ûÓй¤×÷µ¥¿ÉÒÔÏÔʾ" + +#: lib/Reports.php:79 +msgid "None" +msgstr "ÎÞ" + +#: templates/queryrenderer.inc:99 lib/Query.php:347 +msgid "Not" +msgstr "²»ÊÇ" + +#: query.php:86 +msgid "Not yet implemented..." +msgstr "ÉÐδÍê³É..." + +#: config/prefs.php.dist:17 +msgid "Notification Options" +msgstr "֪ͨѡÏî" + +#: config/prefs.php.dist:109 +msgid "Only notify me of ticket changes from other users" +msgstr "¹¤×÷µ¥±»ÆäËüÈ˱ä¸üʱֻ֪ͨÎÒ" + +#: lib/Reports.php:8 +msgid "Open Tickets by Owner" +msgstr "ÒÔÓµÓÐÕß¿ªÆô¹¤×÷µ¥" + +#: lib/Reports.php:6 +msgid "Open Tickets by Priority" +msgstr "ÒÔÓÅÏÈȨ¿ªÆô¹¤×÷µ¥" + +#: lib/Reports.php:3 +msgid "Open Tickets by Queue" +msgstr "ÒÔ¶ÓÁпªÆô¹¤×÷µ¥" + +#: lib/Reports.php:7 +msgid "Open Tickets by Requester" +msgstr "ÒÔͶƱÕß¿ªÆô¹¤×÷µ¥" + +#: lib/Reports.php:4 +msgid "Open Tickets by State" +msgstr "ÒÔ״̬¿ªÆô¹¤×÷µ¥" + +#: lib/Reports.php:5 +msgid "Open Tickets by Type" +msgstr "ÒÔÀàÐÍ¿ªÆô¹¤×÷µ¥" + +#: templates/menu/menu.inc:18 +msgid "Options" +msgstr "Ñ¡Ïî" + +#: templates/queryrenderer.inc:98 lib/Query.php:346 +msgid "Or" +msgstr "»ò" + +#: config/prefs.php.dist:9 config/prefs.php.dist:16 +msgid "Other Options" +msgstr "ÆäËüÑ¡Ïî" + +#: templates/queryrenderer.inc:108 +msgid "Owner" +msgstr "ÓµÓÐÕß" + +#: lib/Search.php:111 +msgid "Owner(s)" +msgstr "ÓµÓÐÕß" + +#: lib/Create.php:152 lib/Create.php:164 lib/Whups.php:319 lib/Search.php:220 +#: lib/Search.php:232 +msgid "Owners" +msgstr "ÓµÓÐÕß" + +#: lib/Query.php:349 +msgid "Path" +msgstr "·¾¶" + +#: lib/Search.php:251 lib/Search.php:287 lib/Search.php:327 lib/Search.php:367 +#: lib/Search.php:425 lib/Search.php:456 lib/Search.php:494 lib/Search.php:525 +#: lib/Search.php:551 +msgid "Permission Denied." +msgstr "ûÓÐȨÏÞ¡£" + +#: lib/Admin.php:370 lib/Admin.php:412 +msgid "Priorities for this Type" +msgstr "´ËÀàÐ͵ÄÓÅÏÈȨ" + +#: templates/queryrenderer.inc:121 lib/Create.php:118 lib/Whups.php:317 +#: lib/Query.php:492 lib/Search.php:76 lib/Search.php:109 lib/Search.php:450 +#: lib/Search.php:545 config/prefs.php.dist:32 +msgid "Priority" +msgstr "ÓÅÏÈȨ" + +#: lib/Admin.php:547 lib/Admin.php:593 lib/Admin.php:616 +msgid "Priority Description" +msgstr "ÓÅÏÈȨµÄÃèÊö" + +#: lib/Admin.php:546 lib/Admin.php:571 lib/Admin.php:590 lib/Admin.php:613 +msgid "Priority Name" +msgstr "ÓÅÏÈȨµÄÃû³Æ" + +#: templates/comment.inc:77 +#, fuzzy, php-format +msgid "Priority changed to '%s' by %s on %s" +msgstr ", ÓÅÏÈȨ±ä¸üΪ '%s'." + +#: templates/comment.inc:152 +msgid "Private" +msgstr "˽ÓеÄ" + +#: query.php:36 +msgid "Property Criteria" +msgstr "ÐÔÖʹæÔò" + +#: query.php:133 templates/menu/menu.inc:13 +msgid "Query Builder" +msgstr "²éѯ½¨Á¢Õß" + +#: lib/Query.php:101 +msgid "Query Parameters" +msgstr "²éÕÒ²ÎÊý" + +#: runquery.php:75 +msgid "Query Results" +msgstr "²éÕÒ½á¹û" + +#: templates/queryrenderer.inc:106 lib/Whups.php:318 config/prefs.php.dist:33 +msgid "Queue" +msgstr "¶ÓÁÐ" + +#: lib/Driver.php:296 +#, fuzzy, php-format +msgid "Queue : %s" +msgstr "-¶ÓÁÐ: %s" + +#: lib/Admin.php:106 lib/Admin.php:150 lib/Admin.php:230 +msgid "Queue Description" +msgstr "¶ÓÁÐÃèÊö" + +#: lib/Admin.php:105 lib/Admin.php:129 lib/Admin.php:147 lib/Admin.php:227 +#: lib/Create.php:28 lib/Create.php:36 lib/Search.php:39 lib/Search.php:96 +msgid "Queue Name" +msgstr "¶ÓÁÐÃû³Æ" + +#: lib/Create.php:83 lib/Search.php:99 +msgid "Queue Version" +msgstr "¶ÓÁа汾" + +#: scripts/mail-filter.php:80 +#, fuzzy, php-format +msgid "Queue `%s' does not exist." +msgstr "µãÑ¡µÄÑù°å²¢²»´æÔÚ." + +#: templates/comment.inc:97 +#, fuzzy, php-format +msgid "Queue changed to '%s' by %s on %s" +msgstr "״̬Òѱä¸üΪ '%s'" + +#: admin.php:31 templates/admin/mtmatrix.inc:6 +msgid "Queue/Type Matrix" +msgstr "" + +#: search.php:102 +#, php-format +msgid "Queue: %s, Client: %s, Ticket: %s, Category: %s, Type: %s" +msgstr "" + +#: search.php:104 +#, fuzzy, php-format +msgid "Queue: %s, Ticket: %s, Category: %s, Type: %s" +msgstr "¶ÓÁÐ: %s ¹¤×÷µ¥: %s" + +#: lib/api.php:710 +msgid "Queues" +msgstr "¶ÓÁÐ" + +#: runquery.php:25 +msgid "Re-execute Query" +msgstr "ÖØÐÂÖ´Ðвéѯ" + +#: lib/Admin.php:796 +msgid "Really delete this attribute? This may cause data problems!!" +msgstr "È·¶¨ÒªÉ¾³ýÕâ¸öÊôÐÔ£¿ ÕâÓпÉÄܵ¼ÖÂÊý¾ÝÉϵÄÎÊÌâ !!" + +#: lib/Admin.php:620 +msgid "Really delete this priority? This may cause data problems!!" +msgstr "È·¶¨ÒªÉ¾³ýÕâ¸öÓÅÏÈ£¿ ÕâÓпÉÄܵ¼ÖÂÊý¾ÝÉϵÄÎÊÌâ !!" + +#: lib/Admin.php:234 +msgid "Really delete this queue? This may cause data problems!!" +msgstr "È·¶¨ÒªÉ¾³ýÕâ¸ö¶ÓÁУ¿ ÕâÓпÉÄܵ¼ÖÂÊý¾ÝÉϵÄÎÊÌâ !!" + +#: lib/Admin.php:532 +msgid "Really delete this state? This may cause data problems!!" +msgstr "È·¶¨ÒªÉ¾³ýÕâ¸ö״̬£¿ ÕâÓпÉÄܵ¼ÖÂÊý¾ÝÉϵÄÎÊÌâ !!" + +#: lib/Admin.php:91 +msgid "Really delete this subject? This may cause data problems!!" +msgstr "È·¶¨ÒªÉ¾³ýÕâÖ÷Ì⣿ ÕâÓпÉÄܵ¼ÖÂÊý¾ÝÉϵÄÎÊÌâ !!" + +#: lib/Search.php:281 +msgid "" +"Really delete this ticket? It will NOT be archived, and will be gone forever." +msgstr "È·¶¨ÒªÉ¾³ýÕâ¸ö¹¤×÷µ¥? ¹¤×÷µ¥ÉÐδ±¸·ÝÒò´Ë½«ÓÀ¾Ãɾ³ý." + +#: lib/Admin.php:416 +msgid "Really delete this type? This may cause data problems!!" +msgstr "È·¶¨ÒªÉ¾³ýÕâ¸öÀàÐÍ£¿ ÕâÓпÉÄܵ¼ÖÂÊý¾ÝÉϵÄÎÊÌâ !!" + +#: lib/Admin.php:708 +msgid "Really delete this version? This may cause data problems!!" +msgstr "È·¶¨ÒªÉ¾³ýÕâ¸ö°æ±¾£¿ ÕâÓпÉÄܵ¼ÖÂÊý¾ÝÉϵÄÎÊÌâ !!" + +#: search.php:153 +msgid "Refine Search" +msgstr "¸ß¼¶²éÕÒ" + +#: search.php:151 +msgid "Refine search" +msgstr "¸ß¼¶²éÕÒ" + +#: admin.php:981 +msgid "Reminders were sent." +msgstr "" + +#: lib/Admin.php:277 +msgid "Remove User" +msgstr "ɾ³ýÓû§" + +#: reports.php:22 templates/menu/menu.inc:14 +msgid "Reports" +msgstr "±¨±í" + +#: templates/queryrenderer.inc:109 lib/Search.php:114 +msgid "Requester" +msgstr "ͶƱÕß" + +#: lib/Whups.php:322 lib/Search.php:117 lib/Driver.php:75 +#: config/prefs.php.dist:37 +msgid "Resolved" +msgstr "Òѽâ¾ö" + +#: lib/Admin.php:279 +#, fuzzy +msgid "Responsible Users" +msgstr "ɾ³ýÓû§" + +#: lib/Admin.php:175 +msgid "Restrict ticket subjects to a specified list?" +msgstr "ÏÞÖÆ¹¤×÷µ¥Ö÷Ìâ¸øÌØ¶¨µÄÃûµ¥?" + +#: templates/searchresults.inc:47 +msgid "Save" +msgstr "±£´æ" + +#: runquery.php:27 query.php:32 lib/Query.php:589 +msgid "Save Query" +msgstr "±£´æ²éѯ" + +#: templates/searchresults.inc:41 +msgid "Save these results as: " +msgstr "Áí´æÕâЩ½á¹ûΪ: " + +#: search.php:170 templates/menu/menu.inc:10 +msgid "Search" +msgstr "²éÕÒ" + +#: lib/Query.php:546 +#, php-format +msgid "Search %s Attribute" +msgstr "²éÕÒ %s ÊôÐÔ" + +#: lib/Query.php:549 +msgid "Search Attribute" +msgstr "²éÕÒÊôÐÔ" + +#: lib/Query.php:395 lib/Query.php:445 +msgid "Search Comments" +msgstr "²éÕÒÆÀÂÛ" + +#: lib/Query.php:393 +msgid "Search Owners" +msgstr "²éÕÒÓµÓÐÕß" + +#: lib/Query.php:394 +msgid "Search Requester" +msgstr "²éÕÒͶƱÕß" + +#: search.php:144 +msgid "Search Results" +msgstr "²éÕÒ½á¹û" + +#: lib/Query.php:444 +msgid "Search Summary" +msgstr "²éÕÒÕªÒª" + +#: search.php:26 search.php:168 config/prefs.php.dist:59 +msgid "Search Tickets" +msgstr "²éÕÒ¹¤×÷µ¥" + +#: clearsearch.php:27 +msgid "Search cleared." +msgstr "²éÕÒÒÑÇå³ý" + +#: clearsearch.php:30 +msgid "Searches cleared." +msgstr "²éÕÒÒÑÇå³ý" + +#: config/prefs.php.dist:61 +msgid "Select the view to display after login:" +msgstr "Ñ¡ÔñµÇ¼ºóµÄÏÔʾ·½Ê½:" + +#: admin.php:32 lib/Admin.php:807 +msgid "Send Reminders" +msgstr "" + +#: lib/Admin.php:818 +msgid "Send only for this list of ticket ids" +msgstr "" + +#: details.php:44 details.php:47 +msgid "Set Priority" +msgstr "ÉèÖÃÓÅÏÈȨ" + +#: details.php:45 +msgid "Set Queue" +msgstr "ÉèÖöÓÁÐ" + +#: details.php:43 +msgid "Set State" +msgstr "ÉèÖÃ״̬" + +#: details.php:234 +msgid "Set Ticket Attributes" +msgstr "ÉèÖù¤×÷µ¥ÊôÐÔ" + +#: details.php:153 details.php:213 +msgid "Set Ticket Priority" +msgstr "ÉèÖù¤×÷µ¥ÓÅÏÈȨ" + +#: details.php:193 +msgid "Set Ticket State Succeeded" +msgstr "ÉèÖù¤×÷µ¥×´Ì¬³É¹¦" + +#: details.php:269 +msgid "Set Ticket Type" +msgstr "ÉèÖù¤×÷µ¥ÀàÐÍ" + +#: details.php:51 +msgid "Set Type" +msgstr "ÉèÖÃÀàÐÍ" + +#: config/prefs.php.dist:100 +msgid "Show \"(X Days Ago)\" in Date field of search results?" +msgstr "ÔÚ²éÕÒ½á¹ûÖÐÏÔʾ\"(¼¸Ììºó)\"µÄÈÕÆÚ×Ö¶Î?" + +#: config/prefs.php.dist:127 +msgid "Show comments in chronological order, or most recent first?" +msgstr "" + +#: config/prefs.php.dist:78 +msgid "Show ticket IDs in the summary view?" +msgstr "ÓÚÕªÒªÏÔʾÖÐÏÔʾ¹¤×÷µ¥Ê¶±ðÂë?" + +#: config/prefs.php.dist:70 +msgid "Show tickets you have requested in the summary view?" +msgstr "ÓÚÕªÒªÏÔʾÖÐÏÔʾÄúËùµãÑ¡µÄ¹¤×÷µ¥?" + +#: config/templates.php.dist:16 +msgid "Simple HTML Report" +msgstr "¼òµ¥µÄ HTML ±¨±í" + +#: templates/searchresults.inc:72 +msgid "Sort Direction" +msgstr "ÅÅÁз½Ïò" + +#: templates/searchresults.inc:73 templates/searchresults.inc:77 +#, php-format +msgid "Sort by %s" +msgstr "ÒÑ %s ÅÅÁÐ" + +#: templates/queryrenderer.inc:116 lib/Whups.php:315 lib/Query.php:488 +#: lib/Search.php:449 lib/Search.php:544 config/prefs.php.dist:30 +msgid "State" +msgstr "״̬" + +#: lib/Driver.php:302 +#, fuzzy, php-format +msgid "State : %s" +msgstr "-״̬: %s" + +#: lib/Admin.php:456 lib/Admin.php:505 +msgid "State Category" +msgstr "״̬·ÖÀà" + +#: lib/Admin.php:455 lib/Admin.php:502 lib/Admin.php:528 +msgid "State Description" +msgstr "״̬ÃèÊö" + +#: lib/Admin.php:454 lib/Admin.php:480 lib/Admin.php:499 lib/Admin.php:525 +msgid "State Name" +msgstr "״̬Ãû³Æ" + +#: templates/comment.inc:67 +#, fuzzy, php-format +msgid "State changed to '%s' by %s on %s" +msgstr "״̬Òѱä¸üΪ '%s'" + +#: lib/Admin.php:360 lib/Admin.php:408 +msgid "States for this Type" +msgstr "´ËÀàÐ͵Ä״̬" + +#: lib/Create.php:119 config/prefs.php.dist:29 +msgid "Subject" +msgstr "Ö÷Ìâ" + +#: lib/Admin.php:17 lib/Admin.php:40 lib/Admin.php:65 lib/Admin.php:87 +msgid "Subject Name" +msgstr "Ö÷ÌâÃû³Æ" + +#: lib/Admin.php:179 +msgid "Subjects associated with this Queue" +msgstr "ÓëÕâ¸ö¶ÓÁÐÏà¹ØÁªµÄÖ÷Ìâ" + +#: create.php:96 +msgid "Submit" +msgstr "Ìá½»" + +#: admin.php:163 +#, php-format +msgid "Successfully Cloned %s to %s." +msgstr "Òѳɹ¦¿Ë¡%sΪ%s" + +#: templates/queryrenderer.inc:112 lib/Whups.php:314 +msgid "Summary" +msgstr "ÕªÒª" + +#: lib/Driver.php:304 +msgid "Summary:" +msgstr "ÕªÒª:" + +#: lib/Query.php:442 +msgid "Text" +msgstr "ÄÚÈÝ" + +#: query.php:39 +msgid "Text Criteria" +msgstr "ÄÚÈݹæÔò" + +#: view.php:44 lib/Driver.php:218 +msgid "The VFS backend needs to be configured to enable attachment uploads." +msgstr "VFS·þÎñÆ÷ÐèÒªÅäÖÃÔÊÐí¸½¼þÉÏ´«¡£" + +#: admin.php:862 +#, php-format +msgid "The attribute '%s' has been added to %s." +msgstr "´ËÊôÐÔ '%s' Òѱ»ÐÂÔöµ½ %s." + +#: admin.php:950 +msgid "The attribute has been deleted." +msgstr "´ËÊôÐÔÒѱ»É¾³ý." + +#: admin.php:919 +msgid "The attribute has been modified." +msgstr "´ËÊôÐÔÒѱ»ÐÞ¸Ä." + +#: admin.php:955 +msgid "The attribute was not deleted." +msgstr "´ËÊôÐÔ²¢Î´±»É¾³ý." + +#: admin.php:471 +#, php-format +msgid "The priority '%s' has been added to %s." +msgstr "´ËÓÅÏÈȨ '%s' Òѱ»ÐÂÔöµ½ %s." + +#: admin.php:558 +msgid "The priority has been deleted." +msgstr "´ËÓÅÏÈȨÒѱ»É¾³ý." + +#: admin.php:528 +msgid "The priority has been modified." +msgstr "´ËÓÅÏÈȨÒѱ»ÐÞ¸Ä." + +#: admin.php:563 +msgid "The priority was not deleted." +msgstr "´ËÓÅÏÈȨ²¢Î´±»É¾³ý." + +#: admin.php:247 +#, php-format +msgid "The queue '%s' has been created." +msgstr "´Ë¶ÓÁÐ '%s' Òѱ»½¨Á¢." + +#: admin.php:330 +msgid "The queue has been deleted." +msgstr "´Ë¶ÓÁÐÒѱ»É¾³ý." + +#: admin.php:310 +msgid "The queue has been modified." +msgstr "´Ë¶ÓÁÐÒѱ»ÐÞ¸Ä." + +#: admin.php:335 +msgid "The queue was not deleted." +msgstr "´Ë¶ÓÁв¢Î´±»É¾³ý." + +#: data.php:24 +msgid "The requested template does not exist." +msgstr "µãÑ¡µÄÑù°å²¢²»´æÔÚ." + +#: admin.php:352 +#, php-format +msgid "The state '%s' has been added to %s." +msgstr "´Ë״̬ '%s' Òѱ»ÐÂÔöµ½ %s." + +#: admin.php:441 +msgid "The state has been deleted." +msgstr "´Ë״̬Òѱ»É¾³ý." + +#: admin.php:410 +msgid "The state has been modified." +msgstr "´Ë״̬Òѱ»ÐÞ¸Ä." + +#: admin.php:446 +msgid "The state was not deleted." +msgstr "´Ë״̬²¢Î´±»É¾³ý." + +#: admin.php:660 +#, php-format +msgid "The subject '%s' has been added." +msgstr "´ËÖ÷Ìâ '%s' Òѱ»ÐÂÔö." + +#: admin.php:722 +msgid "The subject has been deleted." +msgstr "´ËÖ÷ÌâÒѱ»É¾³ý." + +#: admin.php:701 +msgid "The subject has been modified." +msgstr "´ËÖ÷ÌâÒѱ»ÐÞ¸Ä." + +#: admin.php:727 +msgid "The subject was not deleted." +msgstr "´ËÖ÷ÌⲢδ±»É¾³ý." + +#: details.php:359 +msgid "The ticket was not deleted." +msgstr "´Ë¹¤×÷µ¥Î´±»É¾³ý." + +#: admin.php:182 +#, php-format +msgid "The type '%s' has been modified." +msgstr "´ËÀàÐÍ '%s' Òѱ»ÐÞ¸Ä." + +#: admin.php:226 +msgid "The type has been deleted." +msgstr "´ËÀàÐÍÒѱ»É¾³ý." + +#: admin.php:231 +msgid "The type was not deleted." +msgstr "´ËÀàÐͲ¢Î´±»É¾³ý." + +#: admin.php:744 +#, php-format +msgid "The version '%s' has been added to %s." +msgstr "´Ë°æ±¾ '%s' Òѱ»Ôö¼Óµ½ %s." + +#: admin.php:832 +msgid "The version has been deleted." +msgstr "´Ë°æ±¾Òѱ»É¾³ý." + +#: admin.php:802 +msgid "The version has been modified." +msgstr "´Ë°æ±¾Òѱ»ÐÞ¸Ä." + +#: admin.php:837 +msgid "The version was not deleted." +msgstr "´Ë°æ±¾²¢Î´±»É¾³ý." + +#: lib/Admin.php:743 +msgid "There are no attribute types to edit" +msgstr "ûÓÐÊôÐÔÀàÐͿɹ©±à¼­" + +#: lib/Query.php:549 +msgid "There are no attributes defined for the current type" +msgstr "ĿǰÕâ¸öÀàÐÍûÓж¨ÒåÊôÐÔ." + +#: lib/Create.php:65 +#, fuzzy +msgid "" +"There are no clients associated with this module; until there are, you " +"cannot create any tickets in this module." +msgstr "" +"ûÓй¤×÷µ¥ÀàÐÍͬÕâ¸ö¶ÓÁйØÁª£»³ý·ÇÓÐÒ»¸ö¹ØÁª£¬·ñÔòÄú²»ÄÜÔڴ˶ÓÁÐÖд´½¨Èκι¤" +"×÷µ¥¡£" + +#: lib/Admin.php:567 +msgid "There are no priorities to edit" +msgstr "ûÓÐÓÅÏÈȨ¿É¹©±à¼­" + +#: lib/Admin.php:815 +msgid "There are no queues available." +msgstr "ûÓÐÓÐЧ¶ÓÁÐ" + +#: lib/Admin.php:126 +msgid "There are no queues to edit" +msgstr "ûÓжÓÁпɹ©±à¼­" + +#: lib/Create.php:36 +msgid "There are no queues which you can create tickets in." +msgstr "ûÓжÓÁпɹ©Äú½¨Á¢¹¤×÷µ¥." + +#: lib/Search.php:32 +msgid "There are no queues which you can search." +msgstr "ûÓжÓÁпɹ©Äú²éÕÒ." + +#: lib/Admin.php:476 +msgid "There are no states to edit" +msgstr "ûÓÐ״̬¿É¹©±à¼­" + +#: lib/Admin.php:37 +msgid "There are no subjects to edit" +msgstr "ûÓÐÖ÷Ìâ¿É¹©±à¼­" + +#: lib/Create.php:57 +msgid "" +"There are no ticket types associated with this module; until there are, you " +"cannot create any tickets in this module." +msgstr "" +"ûÓй¤×÷µ¥ÀàÐÍͬÕâ¸ö¶ÓÁйØÁª£»³ý·ÇÓÐÒ»¸ö¹ØÁª£¬·ñÔòÄú²»ÄÜÔڴ˶ÓÁÐÖд´½¨Èκι¤" +"×÷µ¥¡£" + +#: lib/Admin.php:331 +msgid "There are no types to edit" +msgstr "ûÓÐÀàÐͿɹ©±à¼­" + +#: lib/Admin.php:293 +msgid "There are no users responsible for this queue." +msgstr "Õâ¸ö¶ÓÁÐûÓиºÔðÈË." + +#: lib/Create.php:163 lib/Search.php:231 +msgid "There are no users to which this ticket can be assigned." +msgstr "Ôڴ˹¤×÷µ¥ÖÐûÓÐÓû§¿É¹©·ÖÅä." + +#: lib/Admin.php:655 +msgid "There are no versions to edit" +msgstr "ûÓа汾¿É¹©±à¼­" + +#: graph.php:30 +msgid "There is no data for this graph." +msgstr "´ËͼÐÎÖÐûÓÐÊý¾Ý." + +#: lib/Reports.php:154 +msgid "There is no data for this report." +msgstr "´Ë±¨±íÖÐûÓÐÊý¾Ý." + +#: admin.php:599 +#, php-format +msgid "There was an error adding '%s' to the responsible list for '%s': %s" +msgstr "ÐÂÔö '%s' µ½¸ºÔðÃûµ¥ '%s': %s ʱ·¢ÉúÒ»¸ö´íÎó" + +#: admin.php:662 +#, php-format +msgid "There was an error adding the subject: %s." +msgstr "ÐÂÔöÖ÷Ìâ: %s ʱ·¢ÉúÒ»¸ö´íÎó." + +#: admin.php:865 +#, php-format +msgid "There was an error creating the attribute: %s." +msgstr "½¨Á¢ÊôÐÔ: %s ʱ·¢ÉúÒ»¸ö´íÎó." + +#: admin.php:473 +#, php-format +msgid "There was an error creating the priority: %s." +msgstr "½¨Á¢ÓÅÏÈȨ: %s ʱ·¢ÉúÒ»¸ö´íÎó." + +#: admin.php:255 +#, php-format +msgid "There was an error creating the queue: %s." +msgstr "½¨Á¢¶ÓÁÐ: %s ʱ·¢ÉúÒ»¸ö´íÎó." + +#: admin.php:354 +#, php-format +msgid "There was an error creating the state: %s." +msgstr "½¨Á¢×´Ì¬: %s ʱ·¢ÉúÒ»¸ö´íÎó." + +#: admin.php:746 +#, php-format +msgid "There was an error creating the version: %s." +msgstr "½¨Á¢°æ±¾: %s ʱ·¢ÉúÒ»¸ö´íÎó." + +#: admin.php:952 +#, php-format +msgid "There was an error deleting the attribute: %s." +msgstr "ɾ³ýÊôÐÔ: %s ʱ·¢ÉúÒ»¸ö´íÎó." + +#: admin.php:560 +#, php-format +msgid "There was an error deleting the priority: %s." +msgstr "ɾ³ýÓÅÏÈȨ: %s ʱ·¢ÉúÒ»¸ö´íÎó." + +#: admin.php:332 +#, php-format +msgid "There was an error deleting the queue: %s." +msgstr "ɾ³ý¶ÓÁÐ: %s ʱ·¢ÉúÒ»¸ö´íÎó." + +#: admin.php:443 +#, php-format +msgid "There was an error deleting the state: %s." +msgstr "ɾ³ý״̬: %s ʱ·¢ÉúÒ»¸ö´íÎó." + +#: admin.php:724 +#, php-format +msgid "There was an error deleting the subject: %s." +msgstr "ɾ³ýÖ÷Ìâ: %s ʱ·¢ÉúÒ»¸ö´íÎó." + +#: details.php:355 +#, php-format +msgid "There was an error deleting the ticket: %s" +msgstr "ɾ³ý¹¤×÷µ¥: %s ʱ·¢ÉúÒ»¸ö´íÎó." + +#: admin.php:228 +#, php-format +msgid "There was an error deleting the type: %s." +msgstr "ɾ³ýÀàÐÍ: %s ʱ·¢ÉúÒ»¸ö´íÎó." + +#: admin.php:834 +#, php-format +msgid "There was an error deleting the version: %s." +msgstr "ɾ³ý°æ±¾: %s ʱ·¢ÉúÒ»¸ö´íÎó." + +#: admin.php:926 +#, php-format +msgid "There was an error editing the attribute: %s." +msgstr "±à¼­ÊôÐÔ: %s ʱ·¢ÉúÒ»¸ö´íÎó." + +#: admin.php:533 +#, php-format +msgid "There was an error editing the priority: %s." +msgstr "±à¼­ÓÅÏÈȨ: %s ʱ·¢ÉúÒ»¸ö´íÎó." + +#: admin.php:314 +#, php-format +msgid "There was an error editing the queue: %s." +msgstr "±à¼­¶ÓÁÐ: %s ʱ·¢ÉúÒ»¸ö´íÎó." + +#: admin.php:415 +#, php-format +msgid "There was an error editing the state: %s." +msgstr "±à¼­×´Ì¬: %s ʱ·¢ÉúÒ»¸ö´íÎó." + +#: admin.php:706 +#, php-format +msgid "There was an error editing the subject: %s." +msgstr "±à¼­Ö÷Ìâ: %s ʱ·¢ÉúÒ»¸ö´íÎó." + +#: admin.php:807 +#, php-format +msgid "There was an error editing the version: %s." +msgstr "±à¼­°æ±¾: %s ʱ·¢ÉúÒ»¸ö´íÎó." + +#: mybugs.php:37 +#, php-format +msgid "There was an error listing your assigned tickets: %s" +msgstr "ÁгöÄúÒÑ·ÖÅäµÄ¹¤×÷µ¥: %s ʱ·¢ÉúÒ»¸ö´íÎó." + +#: mybugs.php:53 +#, php-format +msgid "There was an error listing your open requests: %s" +msgstr "ÁгöÄúËù¿ª·ÅµÄͶƱ: %s ʱ·¢ÉúÒ»¸ö´íÎó." + +#: admin.php:180 +#, php-format +msgid "There was an error modifying the type: %s." +msgstr "ÐÞ¸ÄÀàÐÍ: %s ʱ·¢ÉúÒ»¸ö´íÎó." + +#: search.php:137 +#, php-format +msgid "There was an error performing your search: %s" +msgstr "Ö´ÐвéÕÒ: %s ʱ·¢ÉúÒ»¸ö´íÎó." + +#: admin.php:638 +#, php-format +msgid "There was an error removing '%s' from the responsible list for '%s': %s" +msgstr "ɾ³ý '%s' ×Ô¸ºÔðÃûµ¥ '%s': %s ʱ·¢ÉúÒ»¸ö´íÎó" + +#: data.php:27 +msgid "This is not a search results template." +msgstr "Õâ²»ÊÇÒ»¸ö²éÕÒ½á¹ûµÄÄ£°æ." + +#: lib/Admin.php:57 +msgid "This is not a valid subject." +msgstr "Õâ²»ÊÇÒ»¸öºÏ·¨µÄÖ÷Ìâ." + +#: lib/Driver.php:402 +#, php-format +msgid "This mail was automatically generated by %s" +msgstr "ÕâÊÇÒ»·âÓÉ %s ×Ô¶¯²úÉúµÄÐżþ" + +#: lib/Create.php:78 +msgid "" +"This queue requires that you specify a version, but there are no versions " +"associated with it. Until versions are created for this module, you will not " +"be able to create tickets." +msgstr "" +"Õâ¸ö¶ÓÁбØÐëÒªÄúΪËüÖ¸¶¨Ò»¸ö°æ±¾,µ«ÊDz¢Ã»Óа汾ÓëÆäÏà¹ØÁª.Äú½«ÎÞ·¨½¨Á¢¹¤×÷µ¥," +"Ö±µ½ÄúΪ´ËÒ»¶ÓÁн¨Á¢°æ±¾." + +#: lib/Driver.php:295 +#, php-format +msgid "Ticket : %s" +msgstr "¹¤×÷µ¥ £º %s" + +#: templates/menu/menu.inc:48 +msgid "Ticket #" +msgstr "¹¤×÷µ¥ #" + +#: details.php:534 +#, php-format +msgid "Ticket %s Comments" +msgstr "¹¤×÷µ¥ %s µÄÆÀÂÛ" + +#: details.php:527 +#, php-format +msgid "Ticket %s Details" +msgstr "¹¤×÷µ¥ %s µÄϸ½Ú" + +#: lib/Driver.php:291 +#, php-format +msgid "Ticket %s has been assigned" +msgstr "¹¤×÷µ¥ %s µÄ·ÖÅäÒѱä¸ü" + +#: lib/Driver.php:380 +#, php-format +msgid "Ticket %s has changed module" +msgstr "¹¤×÷µ¥ %s µÄÄ£¿éÒѱä¸ü" + +#: lib/Driver.php:338 +#, php-format +msgid "Ticket %s has changed priority" +msgstr "¹¤×÷µ¥ %s µÄÓÅÏÈȨÒѱä¸ü" + +#: lib/Driver.php:317 +#, php-format +msgid "Ticket %s has changed state" +msgstr "¹¤×÷µ¥ %s µÄ״̬Òѱä¸ü" + +#: lib/Driver.php:359 +#, php-format +msgid "Ticket %s has changed type" +msgstr "¹¤×÷µ¥ %s µÄÀàÐÍÒѱä¸ü" + +#: lib/Driver/sql.php:898 +#, php-format +msgid "Ticket %s was not found." +msgstr "ÕÒ²»µ½¹¤×÷µ¥ %s ." + +#: details.php:367 +msgid "Ticket Details" +msgstr "¹¤×÷µ¥Ï¸½Ú" + +#: lib/Search.php:38 +msgid "Ticket ID" +msgstr "¹¤×÷µ¥Ê¶±ðºÅÂë" + +#: lib/Create.php:117 lib/Search.php:72 lib/Search.php:108 +msgid "Ticket State" +msgstr "¹¤×÷µ¥×´Ì¬" + +#: templates/reports/stats.inc:4 +msgid "Ticket Stats" +msgstr "¹¤×÷µ¥Í³¼Æ" + +#: lib/Search.php:95 lib/Search.php:277 lib/api.php:139 +msgid "Ticket Summary" +msgstr "¹¤×÷µ¥ÕªÒª" + +#: lib/Create.php:72 lib/Search.php:107 +msgid "Ticket Type" +msgstr "¹¤×÷µ¥ÀàÐÍ" + +#: lib/Admin.php:165 +msgid "Ticket Types associated with this Queue" +msgstr "Óë´Ë¶ÓÁÐÓйØÁªµÄ¹¤×÷µ¥ÀàÐÍ" + +#: lib/Driver.php:293 +#, fuzzy, php-format +msgid "Ticket URL: %s" +msgstr "-¹¤×÷µ¥ %s" + +#: templates/comment.inc:50 +#, php-format +msgid "Ticket assigned to %s by %s on %s" +msgstr "¹¤×÷µ¥ÒÑ·ÖÅ䏸%s±»%sÔÚ%s" + +#: lib/Block/summary.php:52 +msgid "Tickets assigned to you" +msgstr "ÒÑ·ÖÅ䏸ÄúµÄ¹¤×÷µ¥" + +#: lib/Search.php:54 +msgid "Tickets which are" +msgstr "" + +#: lib/Block/summary.php:69 +msgid "Tickets you requested" +msgstr "ÄúÒѵãÑ¡µÄ¹¤×÷µ¥" + +#: templates/queryrenderer.inc:107 lib/Whups.php:316 lib/Search.php:519 +#: config/prefs.php.dist:31 +msgid "Type" +msgstr "ÀàÐÍ" + +#: lib/Admin.php:311 lib/Admin.php:355 lib/Admin.php:404 +msgid "Type Description" +msgstr "ÀàÐÍÃèÊö" + +#: lib/Admin.php:310 lib/Admin.php:334 lib/Admin.php:352 lib/Admin.php:401 +msgid "Type Name" +msgstr "ÀàÐÍÃû³Æ" + +#: templates/comment.inc:87 +#, fuzzy, php-format +msgid "Type changed to '%s' by %s on %s" +msgstr "״̬Òѱä¸üΪ '%s'" + +#: lib/Search.php:57 +msgid "Types" +msgstr "ÀàÐÍ" + +#: lib/Search.php:112 +msgid "Unassigned" +msgstr "δ±»·ÖÅä" + +#: lib/Admin.php:826 +msgid "Unassigned tickets" +msgstr "δ·ÖÅäµÄ¹¤×÷µ¥" + +#: lib/Driver.php:72 +msgid "Unconfirmed" +msgstr "δȷÈÏ" + +#: templates/queryrenderer.inc:146 +#, php-format +msgid "Unknown node type %s" +msgstr "δ֪µÄ½Úµã(node)ÀàÐÍ %s" + +#: templates/admin/mtmatrix.inc:28 +msgid "Update Associations" +msgstr "¸üйØÁª" + +#: details.php:40 +msgid "Upload Attachment" +msgstr "ÉÏ´«¸½¼þ" + +#: lib/Admin.php:263 lib/Admin.php:265 +msgid "User" +msgstr "Óû§" + +#: query.php:37 +msgid "User Criteria" +msgstr "Óû§¹æÔò" + +#: lib/Query.php:391 +msgid "User ID" +msgstr "Óû§ID" + +#: lib/Admin.php:189 +msgid "Users responsible for this Queue" +msgstr "¶ÓÁиºÔðÈË" + +#: lib/Admin.php:297 +msgid "Users responsible for this queue" +msgstr "¶ÓÁиºÔðÈË" + +#: config/prefs.php.dist:34 +msgid "Version" +msgstr "°æ±¾" + +#: lib/Admin.php:635 lib/Admin.php:681 lib/Admin.php:704 +msgid "Version Description" +msgstr "°æ±¾ÃèÊö" + +#: lib/Admin.php:634 lib/Admin.php:659 lib/Admin.php:678 lib/Admin.php:701 +msgid "Version Name" +msgstr "°æ±¾Ãû³Æ" + +#: templates/reports/graphs.inc:14 +msgid "View Graphs" +msgstr "ÏÔʾͼÐÎ" + +#: lib/Search.php:156 lib/Search.php:185 lib/Search.php:244 lib/Search.php:320 +#: lib/Search.php:360 lib/Search.php:418 lib/Search.php:487 lib/Search.php:589 +msgid "Viewable only by members of" +msgstr "Ö»ÓгÉÔ±¿ÉÒÔÏÔʾ" + +#: config/prefs.php.dist:87 +msgid "Weekday Day Month" +msgstr "ÐÇÆÚ ÈÕ ÔÂ" + +#: config/prefs.php.dist:88 +msgid "Weekday Day Month HH:MM:SS TZ" +msgstr "ÐÇÆÚ ÈÕ Ô ʱ:·Ö:Ãë Ê±Çø" + +#: lib/Admin.php:90 lib/Admin.php:233 lib/Admin.php:415 lib/Admin.php:531 +#: lib/Admin.php:619 lib/Admin.php:707 lib/Admin.php:795 lib/Search.php:280 +msgid "Yes" +msgstr "ÊÇ" + +#: details.php:75 view.php:40 +msgid "You are not allowed to view this ticket." +msgstr "ÄúûÓв鿴´Ë¹¤×÷µ¥µÄȨÏÞ." + +#: lib/Driver/sql.php:901 +#, php-format +msgid "You do not have permission to access this ticket (%s)." +msgstr "ÄúûÓдæÈ¡´Ë¹¤×÷µ¥ (%s) µÄȨÏÞ." + +#: lib/Query.php:625 +msgid "You have no saved queries." +msgstr "ûÓÐÄúµÄÒѱ£´æ²éѯÊý¾Ý." + +#: lib/Whups.php:346 +msgid "You must select at least one queue to send reminders for." +msgstr "" + +#: lib/Admin.php:206 +msgid "You must select clients." +msgstr "Äú±ØÐëÑ¡ÔñÒ»¸ö¿Í»§" + +#: lib/Create.php:30 lib/Search.php:143 lib/Search.php:172 lib/Search.php:385 +msgid "Your Email Address" +msgstr "ÄúµÄµç×ÓÓʼþµØÖ·" + +#: create.php:152 +#, php-format +msgid "Your ticket id is %s. " +msgstr "ÄúµÄ¹¤×÷µ¥Ê¶±ðºÅÂëΪ %s. " + +#: scripts/mail-filter.php:108 +#, fuzzy, php-format +msgid "bad priority `%s' for type." +msgstr "´ËÀàÐ͵ÄÓÅÏÈȨ" + +#: scripts/mail-filter.php:122 +#, fuzzy, php-format +msgid "bad state `%s' for type." +msgstr "´ËÀàÐ͵Ä״̬" + +#: templates/queryrenderer.inc:136 +msgid "contains (case insensitive) substring" +msgstr "°üº¬(²»·Ö´óСд)×Ó×Ö·û´®" + +#: templates/queryrenderer.inc:137 +msgid "contains (case sensitive) substring" +msgstr "°üº¬(Çø·Ö´óСд)×Ó×Ö·û´®" + +#: templates/queryrenderer.inc:138 +msgid "contains the word" +msgstr "°üº¬Õâ¸ö×Ö" + +#: scripts/mail-filter.php:133 +#, php-format +msgid "error processing message: %s" +msgstr "" + +#: templates/queryrenderer.inc:135 +msgid "is" +msgstr "ÊÇ" + +#: templates/queryrenderer.inc:133 +msgid "is greater than" +msgstr "´óÓÚ" + +#: templates/queryrenderer.inc:134 +msgid "is less than" +msgstr "СÓÚ" + +#: templates/queryrenderer.inc:139 +msgid "matches the pattern" +msgstr "ÓëÑù±¾Æ¥Åä" diff --git a/whups/po/zh_TW.po b/whups/po/zh_TW.po new file mode 100644 index 000000000..9d1dffde1 --- /dev/null +++ b/whups/po/zh_TW.po @@ -0,0 +1,2321 @@ +# Whups Traditional Chinese Translation +# Copyright 2002 David Chang.±i¨}¤å,¥xÆW +# David Chang , 2002. +# +msgid "" +msgstr "" +"Project-Id-Version: whups 1.0\n" +"Report-Msgid-Bugs-To: dev@lists.horde.org\n" +"POT-Creation-Date: 2008-06-25 09:07+0800\n" +"PO-Revision-Date: 2008-03-20 10:53+0100\n" +"Last-Translator: David Chang \n" +"Language-Team: Traditional Chinese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=BIG5\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: admin/index.php:745 +#, php-format +msgid "\"%s\" is no longer among those responsible for \"%s\"" +msgstr "\"%s\"±N¤£¦A¹ï\"%s\"¾á­t³d¥ô" + +#: templates/menu.inc:5 +msgid "#Id" +msgstr "#³æ¸¹" + +#: templates/ticket/watchers.inc:3 +#, php-format +msgid "%d people watching, %d people responsible" +msgstr "%d ­Ó¤HÆ[¹î, %d ­Ó¤H©Ó¿ì" + +#: queue/rss.php:96 +msgid "%s %s tickets in %s" +msgstr "%s %s Ápô³æ©ó %s" + +#: queue/rss.php:100 +#, php-format +msgid "%s %s tickets in all queues" +msgstr "%s %s Ápô³æ¦b©Ò¦³¤ÀÃþ" + +#: lib/Renderer/Comment.php:120 +#, php-format +msgid "%s ⇒ %s" +msgstr "%s ⇒ %s" + +#: lib/Driver.php:481 +#, php-format +msgid "%s (%s) wrote:" +msgstr "%s (%s) µû½×:" + +#: admin/index.php:700 +#, php-format +msgid "%s added to those responsible for \"%s\"" +msgstr "%s¤w¥[¤J\"%s\"ªº©Ó¿ì¦W³æ¤¤" + +#: templates/reports/stats.inc:17 +#, php-format +msgid "%s days" +msgstr "%s ¤Ñ" + +#: queue/rss.php:104 +#, php-format +msgid "%s tickets in %s" +msgstr "%s Ápô³æ¦b %s" + +#: queue/rss.php:108 +#, php-format +msgid "%s tickets in all queues" +msgstr "%s Ápô³æ¦b©Ò¦³¤ÀÃþ¤¤" + +#: ticket/watch.php:60 +#, php-format +msgid "%s will be notified when this ticket is updated." +msgstr "Ápô³æÅܧó®É±N¦Û°Ê³qª¾%s." + +#: ticket/watch.php:72 +#, php-format +msgid "%s will no longer receive updates for this ticket." +msgstr "Ápô³æÅܧó®É%s±N¤£¦A¦¬¨ì³qª¾." + +#: admin/index.php:109 +msgid "- Stage 1" +msgstr "- ¨BÆJ 1" + +#: admin/index.php:114 +msgid "- Stage 2" +msgstr "- ¨BÆJ 2" + +#: scripts/mail-filter.php:172 +msgid "--queue-name or --queue-id must specify a valid and public queue." +msgstr "--queue-name ©Î --queue-id ¥²¶·«ü©w¤@­Ó¦³®Ä»P¶}©ñªº¤ÀÃþ." + +#: templates/prevnext.inc:16 +msgid "<>" +msgstr "³Ì«áµ§>>" + +#: lib/Forms/Query.php:341 +msgid "Load Query" +msgstr "¸ü¤J" + +#: lib/Forms/VarRenderer.php:46 +msgid "Loading..." +msgstr "¸ü¤J¤¤..." + +#: config/prefs.php.dist:106 +msgid "MM/DD/YY" +msgstr "¤ë/¤é/¦~" + +#: config/prefs.php.dist:107 +msgid "MM/DD/YY HH:MM:SS" +msgstr "¤ë/¤é/¦~ ®É:¤À:¬í" + +#: lib/Forms/Admin/Type.php:193 +#, php-format +msgid "Make a clone of %s" +msgstr "½Æ»s %s" + +#: lib/Forms/Query.php:271 +msgid "Match" +msgstr "§k¦X" + +#: lib/Forms/Query.php:44 lib/Forms/Query.php:130 lib/Forms/Query.php:272 +msgid "Match Operator" +msgstr "§k¦Xµ{«×" + +#: lib/Query.php:55 +msgid "Match Pattern" +msgstr "»P¼Ë¥»§k¦X" + +#: lib/Query.php:54 +msgid "Match Word" +msgstr "»P¦r¦ê§k¦X" + +#: lib/Reports.php:20 +msgid "Maximum time a ticket is unresolved" +msgstr "¥¼¸Ñ¨M³Ìªø¤Ñ¼Æ" + +#: lib/Block/tree_menu.php:3 +msgid "Menu List" +msgstr "¥\¯àªí" + +#: lib/Reports.php:21 +msgid "Minimum time a ticket is unresolved" +msgstr "¥¼¸Ñ¨M³Ìµu¤Ñ¼Æ" + +#: config/prefs.php.dist:146 +msgid "Most recent first" +msgstr "³Ìªñªº¤@µ§" + +#: templates/prefs/sourceselect.inc:312 +msgid "Move down" +msgstr "¤U²¾" + +#: templates/prefs/sourceselect.inc:310 +msgid "Move up" +msgstr "¤W²¾" + +#: ticket/queue.php:181 +#, php-format +msgid "Moved ticket %d to \"%s\"" +msgstr "·h²¾Ápô³æ %d ¨ì \"%s\"" + +#: mybugs.php:54 +#, php-format +msgid "My %s" +msgstr "§Úªº%s" + +#: mybugs_edit.php:33 +#, php-format +msgid "My %s :: Add Content" +msgstr "§Úªº %s :: ·s¼W¤º®e" + +#: search.php:106 lib/Block/myqueries.php:3 lib/Block/myqueries.php:24 +msgid "My Queries" +msgstr "§Úªº¬d¸ß" + +#: lib/Block/myrequests.php:3 lib/Block/myrequests.php:24 +msgid "My Requests" +msgstr "§Ú©Ò«Ø¥ßªºÁpô³æ" + +#: lib/Block/mytickets.php:3 lib/Block/mytickets.php:24 +#: config/prefs.php.dist:75 +msgid "My Tickets" +msgstr "«ü¬£µ¹§ÚªºÁpô³æ" + +#: lib/api.php:978 +msgid "My tickets by assignment date" +msgstr "§ÚªºÁpô³æ¨Ì«ü¬£¤é" + +#: lib/api.php:977 +msgid "My tickets by creation date" +msgstr "§ÚªºÁpô³æ¨Ì«Ø¥ß¤é" + +#: lib/api.php:979 +msgid "My tickets by due date" +msgstr "§ÚªºÁpô³æ¨Ì¦³®Ä´Á" + +#: lib/api.php:980 +msgid "My tickets by resolution date" +msgstr "§ÚªºÁpô³æ¨Ì¸Ñ¨M¤é" + +#: lib/Forms/Query.php:320 lib/Forms/Query.php:352 +msgid "Name" +msgstr "¦WºÙ" + +#: lib/Forms/Admin/Type.php:198 +msgid "Name of the cloned copy" +msgstr "½Æ»s«áªº¦WºÙ" + +#: lib/Query.php:185 +msgid "Ne_w Query" +msgstr "·s¼W_w" + +#: lib/Driver.php:197 +msgid "New" +msgstr "·s¼W" + +#: lib/Ticket.php:618 lib/Ticket.php:711 +msgid "New Attachment" +msgstr "·s¼Wªþ¥ó" + +#: lib/Renderer/Comment.php:58 lib/Renderer/Comment.php:62 +#, php-format +msgid "New Attachment: %s" +msgstr "·s¼Wªþ¥ó: %s" + +#: ticket/queue.php:32 +msgid "New Queue" +msgstr "¤ÀÃþ" + +#: ticket/create.php:67 lib/Block/tree_menu.php:21 +msgid "New Ticket" +msgstr "·s¼WÁpô³æ" + +#: ticket/type.php:31 +msgid "New Type" +msgstr "Ãþ«¬" + +#: templates/prevnext.inc:26 +msgid "Next>" +msgstr "¤U¤@µ§>" + +#: ticket/delete.php:33 lib/Forms/Query.php:379 lib/Forms/Admin/Version.php:96 +#: lib/Forms/Admin/State.php:121 lib/Forms/Admin/Priority.php:121 +#: lib/Forms/Admin/Queue.php:174 lib/Forms/Admin/Attribute.php:149 +#: lib/Forms/Admin/Reply.php:110 lib/Forms/Admin/Type.php:176 +msgid "No" +msgstr "§_" + +#: lib/Ticket.php:100 +#, php-format +msgid "" +"No priority for this ticket and no default priority for ticket type \"%s\" " +"specified." +msgstr "³o­ÓÃþ«¬ \"%s\" ©|¥¼³]©wÀu¥ýÅv¥H¤Î¹w³]Àu¥ýÅv." + +#: lib/Block/myqueries.php:46 +msgid "No queries have been saved." +msgstr "¨S¦³¥ô¦ó¬d¸ß³QÀx¦s." + +#: lib/Block/query.php:64 lib/Driver/sql.php:553 +msgid "No query to run" +msgstr "µL¬d¸ß¥i¨Ñ°õ¦æ" + +#: lib/Block/queuecontents.php:25 +msgid "No queues available." +msgstr "µL¥i¥Îªº¤ÀÃþ." + +#: lib/Ticket.php:92 +#, php-format +msgid "" +"No state for this ticket and no default state for ticket type \"%s\" " +"specified." +msgstr "³o­ÓÁpô³æ \"%s\" ©|¥¼³]©wª¬ºA¥H¤Î¹w³]ª¬ºA." + +#: reports.php:19 +msgid "No stats available." +msgstr "µL¥i¥Î¤§²Î­pªí." + +#: lib/Driver.php:517 +#, php-format +msgid "No such backend \"%s\" found" +msgstr "µL¦¹¦øªAºÝ \"%s\"" + +#: lib/View.php:33 +msgid "No such view \"%s\" found" +msgstr "§ä¤£¨ìÀ˵ø \"%s\"" + +#: lib/Block/mytickets.php:45 +msgid "No tickets are assigned to you." +msgstr "µL¥ô¦óÁpô³æ«ü¬£µ¹§A." + +#: lib/Block/unassigned.php:45 +msgid "No tickets are unassigned!" +msgstr "µL¥ô¦ó¥¼«ü¬£ªºÁpô³æ!" + +#: lib/Block/queuecontents.php:62 lib/Block/queuecontents.php:73 +msgid "No tickets in queue." +msgstr "¤ÀÃþ¤¤¨S¦³Ápô³æ." + +#: lib/Whups.php:686 +msgid "No tickets matched your search criteria." +msgstr "¨S¦³Ápô³æ²Å¦X·j´M±ø¥ó." + +#: lib/Ticket.php:84 +#, php-format +msgid "No type for this ticket and no default type for queue \"%s\" specified." +msgstr "³o­ÓÃþ§O \"%s\" ©|¥¼³]©wÃþ«¬¥H¤Î¹w³]Ãþ«¬." + +#: templates/prefs/sourceselect.inc:35 lib/Reports.php:88 +msgid "None" +msgstr "µL" + +#: lib/Renderer/Query.php:79 lib/Forms/Query.php:24 +msgid "Not" +msgstr "¤£¬O" + +#: query.php:80 +msgid "Not yet implemented." +msgstr "©|¥¼§¹¦¨." + +#: config/prefs.php.dist:17 +msgid "Notification Options" +msgstr "³qª¾¿ï¶µ" + +#: config/prefs.php.dist:117 +msgid "Only notify me of ticket changes from other users?" +msgstr "Ápô³æ³Q¨ä¥L¤HÅܧó®É¥u³qª¾§Ú?" + +#: config/prefs.php.dist:126 +msgid "Only notify me of ticket changes with comments?" +msgstr "Ápô³æ³Q¥[µùµû½×®É¥u³qª¾§Ú?" + +#: queue/rss.php:43 +msgid "Open" +msgstr "¶}±Ò" + +#: lib/Block/queuesummary.php:49 +msgid "Open Tickets" +msgstr "©|¥¼µ²®×ªºÁpô³æ" + +#: lib/Reports.php:11 +msgid "Open Tickets by Owner" +msgstr "©|¥¼µ²®×ªºÁpô³æ--¥H¾Ö¦³ªÌ¬°°ò·Ç" + +#: lib/Reports.php:9 +msgid "Open Tickets by Priority" +msgstr "©|¥¼µ²®×ªºÁpô³æ--¥HÀu¥ýÅv¬°°ò·Ç" + +#: lib/Reports.php:6 +msgid "Open Tickets by Queue" +msgstr "©|¥¼µ²®×ªºÁpô³æ--¥H¤ÀÃþ¬°°ò·Ç" + +#: lib/Reports.php:10 +msgid "Open Tickets by Requester" +msgstr "©|¥¼µ²®×ªºÁpô³æ--¥H«Ø¥ß¤H­û¬°°ò·Ç" + +#: lib/Reports.php:7 +msgid "Open Tickets by State" +msgstr "©|¥¼µ²®×ªºÁpô³æ--¥Hª¬ºA¬°°ò·Ç" + +#: lib/Reports.php:8 +msgid "Open Tickets by Type" +msgstr "©|¥¼µ²®×ªºÁpô³æ--¥HÃþ«¬¬°°ò·Ç" + +#: lib/Block/queuecontents.php:47 +#, php-format +msgid "Open Tickets in %s" +msgstr "%s ¤¤©|¥¼µ²®×ªºÁpô³æ" + +#: queue/rss.php:119 queue/index.php:43 queue/index.php:57 +#, php-format +msgid "Open tickets in %s" +msgstr "%s ¤¤©|¥¼µ²®×ªºÁpô³æ" + +#: queue/rss.php:121 +msgid "Open tickets in all queues." +msgstr "¥þ³¡¥¼µ²®×ªºÁpô³æ." + +#: lib/Renderer/Query.php:78 lib/Forms/Query.php:23 +msgid "Or" +msgstr "©Î" + +#: lib/Whups.php:651 lib/Ticket.php:617 lib/Ticket.php:701 lib/Ticket.php:702 +#: lib/Ticket.php:705 lib/Ticket.php:812 lib/Ticket.php:833 lib/Ticket.php:958 +#: lib/Renderer/Query.php:84 lib/Forms/CreateTicket.php:225 +#: lib/Forms/CreateTicket.php:243 lib/Forms/EditTicket.php:104 +msgid "Owners" +msgstr "©Ó¿ì¤H­û" + +#: lib/Whups.php:836 +#, php-format +msgid "Permanently delete %s?" +msgstr "¥Ã¤[§R°£%s?" + +#: ticket/update.php:22 ticket/type.php:74 ticket/delete.php:51 +#: ticket/queue.php:131 ticket/deleteAttachment.php:21 +msgid "Permission Denied" +msgstr "¦s¨ú¾D©Ú" + +#: ticket/delete.php:40 lib/Forms/EditTicket.php:196 +msgid "Permission Denied." +msgstr "¦s¨ú¾D©Ú." + +#: runquery.php:37 query.php:32 lib/Forms/Query.php:389 +#, php-format +msgid "Permission denied." +msgstr "¦s¨ú¾D©Ú" + +#: lib/Imple/ContactAutoCompleter.php:227 +msgid "Please resolve ambiguous or invalid addresses." +msgstr "½Ð­«·s¿é¤J¥¿½Tªº¹q¶l¦a§}." + +#: lib/Forms/Admin/Type.php:93 lib/Forms/Admin/Type.php:171 +msgid "Priorities for this Type" +msgstr "¦¹Ãþ«¬ªºÀu¥ýÅv" + +#: ticket/type.php:66 ticket/queue.php:117 lib/Whups.php:639 lib/Whups.php:648 +#: lib/Ticket.php:610 lib/Ticket.php:807 lib/Ticket.php:953 +#: lib/Renderer/Query.php:125 lib/Forms/CreateTicket.php:147 +#: lib/Forms/EditTicket.php:68 lib/Forms/Query.php:198 +#: config/prefs.php.dist:49 +msgid "Priority" +msgstr "Àu¥ýÅv" + +#: lib/Renderer/Comment.php:115 +#, php-format +msgid "Priority ⇒ %s" +msgstr "Àu¥ýÅv ⇒ %s" + +#: lib/Forms/Admin/Priority.php:24 lib/Forms/Admin/Priority.php:70 +#: lib/Forms/Admin/Priority.php:118 +msgid "Priority Description" +msgstr "Àu¥ýÅvªº´y­z" + +#: lib/Forms/Admin/Priority.php:23 lib/Forms/Admin/Priority.php:48 +#: lib/Forms/Admin/Priority.php:67 lib/Forms/Admin/Priority.php:94 +#: lib/Forms/Admin/Priority.php:115 +msgid "Priority Name" +msgstr "Àu¥ýÅvªº¦WºÙ" + +#: search.php:106 +msgid "Public Queries" +msgstr "¤½¶}¬d¸ß" + +#: query.php:156 +msgid "Query Builder" +msgstr "¬d¸ß²£¥Í¾¹" + +#: lib/Forms/QueryParameterForm.php:20 +msgid "Query Parameters" +msgstr "¬d¸ß°Ñ¼Æ" + +#: runquery.php:72 lib/Block/query.php:3 lib/Block/query.php:51 +msgid "Query Results" +msgstr "¬d¸ßµ²ªG" + +#: lib/Block/query.php:33 +msgid "Query to run" +msgstr "°õ¦æ" + +#: lib/Whups.php:649 lib/Ticket.php:606 lib/Ticket.php:803 lib/Ticket.php:918 +#: lib/Ticket.php:923 lib/Renderer/Query.php:94 lib/Forms/Query.php:181 +#: lib/Forms/Search.php:36 lib/Block/queuecontents.php:32 +#: lib/Block/queuesummary.php:49 config/prefs.php.dist:50 +msgid "Queue" +msgstr "¤ÀÃþ" + +#: lib/Renderer/Comment.php:100 +#, php-format +msgid "Queue ⇒ %s" +msgstr "¤ÀÃþ ⇒ %s" + +#: lib/Block/queuecontents.php:3 lib/Block/queuecontents.php:49 +msgid "Queue Contents" +msgstr "¤ÀÃþ¤º®e" + +#: lib/Forms/Admin/Queue.php:24 lib/Forms/Admin/Queue.php:89 +#: lib/Forms/Admin/Queue.php:170 +msgid "Queue Description" +msgstr "¤ÀÃþ´y­z" + +#: lib/Forms/Admin/Queue.php:30 lib/Forms/Admin/Queue.php:97 +msgid "Queue Email" +msgstr "¤ÀÃþªº Email ¦a§}" + +#: lib/Forms/CreateTicket.php:34 lib/Forms/CreateTicket.php:45 +#: lib/Forms/Admin/Queue.php:23 lib/Forms/Admin/Queue.php:60 +#: lib/Forms/Admin/Queue.php:85 lib/Forms/Admin/Queue.php:166 +msgid "Queue Name" +msgstr "¤ÀÃþ¦WºÙ" + +#: lib/Forms/Admin/Queue.php:26 lib/Forms/Admin/Queue.php:93 +msgid "Queue Slug" +msgstr "¤ÀÃþ¼ÐÃD" + +#: lib/Block/queuesummary.php:3 lib/Block/queuesummary.php:24 +msgid "Queue Summary" +msgstr "¤ÀÃþºK­n" + +#: ticket/queue.php:86 lib/Ticket.php:932 lib/Ticket.php:938 +#: lib/Forms/CreateTicket.php:93 +msgid "Queue Version" +msgstr "¤ÀÃþª©¥»" + +#: admin/index.php:35 +msgid "Queue/Type Matri_x" +msgstr "¤ÀÃþ/Ãþ«¬ ÃöÁp_x" + +#: templates/admin/mtmatrix.inc:6 +msgid "Queue/Type Matrix" +msgstr "¤ÀÃþ/Ãþ«¬ ÃöÁp" + +#: lib/api.php:175 lib/api.php:887 +msgid "Queues" +msgstr "¤ÀÃþ" + +#: templates/prevnext.inc:32 +msgid "Re_turn to Search Results" +msgstr "¦^·j´Mµ²ªG_t" + +#: lib/Forms/Admin/Attribute.php:147 +msgid "Really delete this attribute? This may cause data problems!" +msgstr "½T©w­n§R°£³o­ÓÄݩʡH ³o¦³¥i¯à¾É­P¸ê®Æ¤Wªº°ÝÃD !!" + +#: lib/Forms/Admin/Reply.php:108 +msgid "Really delete this form reply?" +msgstr "½T©w§R°£¦¹¦^Âм˥»?" + +#: lib/Forms/Admin/Priority.php:122 +msgid "Really delete this priority? This may cause data problems!" +msgstr "½T©w­n§R°£³o­ÓÀu¥ý¡H ³o¦³¥i¯à¾É­P¸ê®Æ¤Wªº°ÝÃD !!" + +#: lib/Forms/Query.php:380 +msgid "Really delete this query? This operation is not undoable." +msgstr "¯uªº­n§R°£³o­Ó¬d¸ß¶Ü? ³o¶µ¾Þ§@±NµLªk«ì´_." + +#: lib/Forms/Admin/Queue.php:176 +msgid "Really delete this queue? This may cause data problems!" +msgstr "½T©w­n§R°£³o­Ó¤ÀÃþ¡H ³o¦³¥i¯à¾É­P¸ê®Æ¤Wªº°ÝÃD !!" + +#: lib/Forms/Admin/State.php:122 +msgid "Really delete this state? This may cause data problems!" +msgstr "½T©w­n§R°£³o­Óª¬ºA¡H ³o¦³¥i¯à¾É­P¸ê®Æ¤Wªº°ÝÃD !!" + +#: ticket/delete.php:34 +msgid "" +"Really delete this ticket? It will NOT be archived, and will be gone forever." +msgstr "½T©w­n§R°£³o­ÓÁpô³æ? Ápô³æ©|¥¼³Æ¥÷¦]¦¹±N¥Ã¤[§R°£." + +#: lib/Forms/Admin/Type.php:178 +msgid "Really delete this type? This may cause data problems!" +msgstr "½T©w­n§R°£³o­ÓÃþ«¬¡H ³o¦³¥i¯à¾É­P¸ê®Æ¤Wªº°ÝÃD !!" + +#: lib/Forms/Admin/Version.php:97 +msgid "Really delete this version? This may cause data problems!" +msgstr "½T©w­n§R°£³o­Óª©¥»¡H ³o¦³¥i¯à¾É­P¸ê®Æ¤Wªº°ÝÃD !!" + +#: lib/Mail.php:217 +msgid "Received message:" +msgstr "¤wŪ¨úªº¶l¥ó:" + +#: search.php:87 +msgid "Refine Search" +msgstr "­«·s·j´M" + +#: admin/index.php:1169 +msgid "Reminders were sent." +msgstr "´£¥Ü¤w°e¥X." + +#: lib/Forms/Admin/User.php:59 +msgid "Remove User" +msgstr "²¾°£¨Ï¥ÎªÌ" + +#: ticket/watch.php:49 +msgid "Remove Watcher" +msgstr "²¾°£­q¾\ªÌ" + +#: templates/prefs/sourceselect.inc:300 +msgid "Remove source" +msgstr "²¾°£³q°T¿ý" + +#: lib/Renderer/Comment.php:95 +msgid "Reply to this comment" +msgstr "¦^ÂÐ" + +#: reports.php:24 +msgid "Reports" +msgstr "³øªí" + +#: lib/Whups.php:650 lib/Ticket.php:965 lib/Renderer/Query.php:86 +msgid "Requester" +msgstr "«Ø¥ß¤H­û" + +#: lib/Forms/Admin/Attribute.php:28 lib/Forms/Admin/Attribute.php:99 +msgid "Required Attribute?" +msgstr "¥²¶·­nªºÄÝ©Ê?" + +#: lib/Whups.php:655 lib/Ticket.php:991 lib/Driver.php:199 lib/api.php:1021 +#: config/prefs.php.dist:54 +msgid "Resolved" +msgstr "¤w¸Ñ¨M" + +#: lib/Forms/Admin/User.php:61 +msgid "Responsible Users" +msgstr "©Ó¿ì¤H­û" + +#: lib/Forms/EditTicket.php:166 +msgid "Restrict Comment to:" +msgstr "¥iÀ˵ø¦¹µû½×ªº¸s²Õ:" + +#: lib/Whups.php:276 +msgid "S_et Queue" +msgstr "³]©w¤ÀÃþ_e" + +#: lib/Query.php:203 +msgid "Sa_ve Query" +msgstr "Àx¦s_v" + +#: templates/view/results.inc:36 lib/Forms/Query.php:318 +msgid "Save" +msgstr "Àx¦s" + +#: lib/Forms/Query.php:317 +msgid "Save Query" +msgstr "Àx¦s" + +#: templates/view/results.inc:30 +msgid "Save these results as: " +msgstr "¥t¦s³o¨Çµ²ªG¬°: " + +#: search.php:55 lib/Block/tree_menu.php:30 +msgid "Search" +msgstr "·j´M" + +#: lib/Forms/Query.php:275 +#, php-format +msgid "Search %s Attribute" +msgstr "·j´M %s ÄÝ©Ê" + +#: lib/Forms/Query.php:278 +msgid "Search Attribute" +msgstr "·j´MÄÝ©Ê" + +#: lib/Forms/Query.php:47 lib/Forms/Query.php:132 +msgid "Search Comments" +msgstr "·j´Mµû½×" + +#: lib/Forms/Query.php:45 +msgid "Search Owners" +msgstr "·j´M¾Ö¦³ªÌ" + +#: lib/Forms/Query.php:46 +msgid "Search Requester" +msgstr "·j´M«Ø¥ß¤H­û" + +#: search.php:79 +msgid "Search Results" +msgstr "·j´Mµ²ªG" + +#: templates/prevnext.inc:38 +#, php-format +msgid "Search Results: %s of %s" +msgstr "·j´Mµ²ªG: %s ¦@ %s" + +#: lib/Forms/Query.php:131 +msgid "Search Summary" +msgstr "·j´MºK­n" + +#: config/prefs.php.dist:76 +msgid "Search Tickets" +msgstr "·j´MÁpô³æ" + +#: config/prefs.php.dist:25 +msgid "Select address book sources for adding and searching for addresses." +msgstr "¿ï¾Ü³q°T¿ý¥H·j´M¤Î·s¼W¦a§}." + +#: templates/prefs/sourceselect.inc:319 +msgid "Select all fields to search when expanding addresses." +msgstr "·í°õ¦æ©m¦WÁr´ú®É,¿ï¾Ü©Ò¦³Äæ¦ì¥H§Q·j´M." + +#: config/prefs.php.dist:78 +msgid "Select the view to display after login:" +msgstr "¿ï¾Üµn¤J«áªºÀ˵ø¤è¦¡:" + +#: templates/prefs/sourceselect.inc:303 templates/prefs/sourceselect.inc:305 +msgid "Selected Address books:" +msgstr "¤w¿ï¾Üªº³q°T¿ý:" + +#: admin/index.php:36 +msgid "Sen_d Reminders" +msgstr "¶Ç°e´£¥Ü_d" + +#: lib/Forms/Admin.php:23 +msgid "Send Reminders" +msgstr "¶Ç°e´£¥Ü" + +#: lib/Forms/Admin.php:34 +msgid "Send only for this list of ticket ids" +msgstr "¥u¶Ç°e³o¨Ç½s¸¹ªºÁpô³æ" + +#: lib/Forms/Admin/Priority.php:80 lib/Forms/Admin/Priority.php:82 +msgid "Set Default Priority" +msgstr "³]©w¬°¹w³]ªºÀu¥ýÅv" + +#: lib/Forms/Admin/State.php:80 lib/Forms/Admin/State.php:82 +msgid "Set Default State" +msgstr "³]©w¬°¹w³]ªºª¬ºA" + +#: ticket/queue.php:201 ticket/queue.php:210 ticket/queue.php:222 +msgid "Set Queue - Step 1" +msgstr "³]©w¤ÀÃþ - ¨BÆJ 1" + +#: ticket/queue.php:202 ticket/queue.php:211 +msgid "Set Queue - Step 2" +msgstr "³]©w¤ÀÃþ - ¨BÆJ 2" + +#: ticket/queue.php:212 +msgid "Set Queue - Step 3" +msgstr "³]©w¤ÀÃþ - ¨BÆJ 3" + +#: ticket/queue.php:189 +#, php-format +msgid "Set Queue for %s" +msgstr "³]©w %s ªº¤ÀÃþ" + +#: lib/api.php:906 +msgid "Set Requester" +msgstr "³]©w«Ø¥ß¤H­û" + +#: ticket/type.php:139 ticket/type.php:148 +msgid "Set Type - Step 1" +msgstr "³]©wÃþ«¬ - ¨BÆJ 1" + +#: ticket/type.php:140 +msgid "Set Type - Step 2" +msgstr "³]©wÃþ«¬ - ¨BÆJ 2" + +#: ticket/type.php:127 +#, php-format +msgid "Set Type for %s" +msgstr "³]©w %s ªºÃþ«¬" + +#: lib/Whups.php:281 +msgid "Set _Type" +msgstr "³]©wÃþ«¬_T" + +#: config/prefs.php.dist:144 +msgid "Show comments in chronological order, or most recent first?" +msgstr "«ö¦~¥N¶¶§Ç,©ÎªÌ³Ìªñªº¤@­Ó¨ÓÅã¥Üµû½×?" + +#: config/prefs.php.dist:95 +msgid "Show ticket IDs in the summary view?" +msgstr "©óºK­nÀ˵ø¤¤Åã¥ÜÁpô³æ¸¹½X?" + +#: config/prefs.php.dist:87 +msgid "Show tickets you have requested in the summary view?" +msgstr "©óºK­nÀ˵ø¤¤Åã¥Ü§A©ÒÂI¿ïªºÁpô³æ?" + +#: config/templates.php.dist:16 +msgid "Simple HTML Report" +msgstr "²³æªº HTML ³øªí" + +#: lib/Forms/Admin/Queue.php:27 +#, php-format +msgid "" +"Slugs allows direct access to this queue's open tickets by visiting: %s. " +"
Slug names may contain only letters, numbers or the _ (underscore) " +"character." +msgstr "" +"§Ö±¶ºô§}´£¨Ñ¤@­Óª½±µ¦s¨ú¦¹Ãþ§O¤¤¥¼µ²®×Ápô³æªººô§}: %s
§Ö±¶ºô§}¥i¥H¬O¥ô" +"¦ó­^¤å,¼Æ¦r©Î¬O _ (©³½u)©Ò²Õ¦¨." + +#: templates/view/results.inc:51 templates/view/results.inc:55 +#, php-format +msgid "Sort by %s" +msgstr "¤w %s ±Æ¦C" + +#: lib/Forms/CreateTicket.php:136 lib/Forms/CreateTicket.php:175 +#: lib/Forms/AddComment.php:20 lib/Forms/AddComment.php:51 +msgid "Spam protection" +msgstr "Spam ¨¾Å@" + +#: ticket/type.php:65 ticket/queue.php:116 lib/Whups.php:640 lib/Whups.php:646 +#: lib/Ticket.php:609 lib/Ticket.php:806 lib/Ticket.php:949 +#: lib/Renderer/Query.php:117 lib/Forms/EditTicket.php:62 +#: lib/Forms/Query.php:193 config/prefs.php.dist:47 +msgid "State" +msgstr "ª¬ºA" + +#: lib/Renderer/Comment.php:110 +#, php-format +msgid "State ⇒ %s" +msgstr "ª¬ºA ⇒ %s" + +#: lib/Forms/Admin/State.php:25 lib/Forms/Admin/State.php:70 +msgid "State Category" +msgstr "ª¬ºA¤ÀÃþ" + +#: lib/Forms/Admin/State.php:24 lib/Forms/Admin/State.php:67 +#: lib/Forms/Admin/State.php:118 +msgid "State Description" +msgstr "ª¬ºAªº´y­z" + +#: lib/Forms/Admin/State.php:23 lib/Forms/Admin/State.php:47 +#: lib/Forms/Admin/State.php:64 lib/Forms/Admin/State.php:96 +#: lib/Forms/Admin/State.php:115 +msgid "State Name" +msgstr "ª¬ºA¦WºÙ" + +#: lib/Forms/Admin/Type.php:76 lib/Forms/Admin/Type.php:165 +msgid "States for this Type" +msgstr "¦¹Ãþ«¬ªºª¬ºA" + +#: templates/ticket/watchers.inc:1 +msgid "Status" +msgstr "ª¬ºA" + +#: ticket/create.php:146 +msgid "Submit" +msgstr "´£¥æ" + +#: admin/index.php:198 +#, php-format +msgid "Successfully Cloned %s to %s." +msgstr "¤w¦¨¥\ªº½Æ»s %s ¨ì %s ." + +#: ticket/type.php:118 +msgid "Successfully changed ticket type." +msgstr "Ápô³æªºÃþ«¬¤wÅܧ󧹦¨." + +#: ticket/delete.php:30 lib/Whups.php:638 lib/Whups.php:645 lib/Ticket.php:616 +#: lib/Ticket.php:643 lib/Ticket.php:646 lib/Ticket.php:650 lib/Ticket.php:812 +#: lib/Ticket.php:821 lib/Ticket.php:912 lib/Renderer/Query.php:89 +#: lib/Forms/CreateTicket.php:152 lib/Forms/EditTicket.php:58 +#: config/prefs.php.dist:46 +msgid "Summary" +msgstr "ºK­n" + +#: lib/Renderer/Comment.php:51 +#, php-format +msgid "Summary ⇒ %s" +msgstr "ºK­n ⇒ %s" + +#: lib/Forms/Search.php:39 +msgid "Summary like" +msgstr "ºK­n¬Û¦ü" + +#: lib/Renderer/Comment.php:79 +#, php-format +msgid "Taken from %s" +msgstr "¸Ñ°£ %s ªº«ü¬£" + +#: lib/Forms/Query.php:129 +msgid "Text" +msgstr "¤º®e" + +#: lib/Driver/sql.php:80 lib/Driver/sql.php:1269 +msgid "That queue slug is already taken. Please select another." +msgstr "¸ÓÃþ§Oªº§Ö±¶ºô§}¤w¨Ï¥Î. ½Ð¥t¿ï¨ä¥L." + +#: lib/Forms/CreateTicket.php:129 +msgid "The Requester's Email Address" +msgstr "«Ø¥ß¤H­ûªº Email" + +#: view.php:58 lib/Ticket.php:439 lib/Ticket.php:487 +msgid "The VFS backend needs to be configured to enable attachment uploads." +msgstr "­n±Ò¥Îªþ¥ó¤W¶Ç¥\¯à«e,µêÀÀÀɮרt²Î(VFS)¦øªAºÝ¥²¶·³]©w§¹¦¨." + +#: admin/index.php:906 +#, php-format +msgid "The attribute \"%s\" has been added to %s." +msgstr "ÄÝ©Ê\"%s\"¤w³Q·s¼W¨ì%s." + +#: admin/index.php:1005 +msgid "The attribute has been deleted." +msgstr "¦¹Äݩʤw³Q§R°£." + +#: admin/index.php:973 +msgid "The attribute has been modified." +msgstr "¦¹Äݩʤw³Q­×§ï." + +#: admin/index.php:1014 +msgid "The attribute was not deleted." +msgstr "¦¹Äݩʨå¼³Q§R°£." + +#: admin/index.php:642 +msgid "The default priority has been set." +msgstr "¹w³]ªºÀu¥ýÅv¤w³]©w§¹¦¨." + +#: admin/index.php:506 +msgid "The default state has been set." +msgstr "¹w³]ªºª¬ºA¤w³]©w§¹¦¨." + +#: admin/index.php:1042 +msgid "The form reply \"%s\" has been added to %s." +msgstr "¦^Âм˥» \"%s\" ¤w³Q·s¼W¨ì %s." + +#: admin/index.php:1134 +msgid "The form reply has been deleted." +msgstr "¦^Âм˥»¤w¸g§R°£." + +#: admin/index.php:1107 +msgid "The form reply has been modified." +msgstr "¦^Âм˥»¤w³Q­×§ï." + +#: admin/index.php:1143 +msgid "The form reply was not deleted." +msgstr "¦^Âм˥»¨Ã¥¼³Q§R°£." + +#: admin/index.php:556 +#, php-format +msgid "The priority \"%s\" has been added to %s." +msgstr "Àu¥ýÅv\"%s\"¤w³Q·s¼W¨ì%s." + +#: admin/index.php:661 +msgid "The priority has been deleted." +msgstr "¦¹Àu¥ýÅv¤w³Q§R°£." + +#: admin/index.php:609 +msgid "The priority has been modified." +msgstr "¦¹Àu¥ýÅv¤w³Q­×§ï." + +#: admin/index.php:670 +msgid "The priority was not deleted." +msgstr "¦¹Àu¥ýÅv¨Ã¥¼³Q§R°£." + +#: lib/Forms/Query.php:393 +#, php-format +msgid "The query \"%s\" couldn't be deleted: %s" +msgstr "¬d¸ß\"%s\"µLªk³Q§R°£:%s" + +#: lib/Forms/Query.php:395 +#, php-format +msgid "The query \"%s\" has been deleted." +msgstr "¬d¸ß\"%s\"¤w³Q§R°£." + +#: lib/Forms/Query.php:360 +#, php-format +msgid "The query couldn't be loaded:" +msgstr "¬d¸ßµLªk³Q¸ü¤J:" + +#: admin/index.php:300 +#, php-format +msgid "The queue \"%s\" has been created." +msgstr "¤ÀÃþ\"%s\"¤w³Q«Ø¥ß." + +#: admin/index.php:392 +msgid "The queue has been deleted." +msgstr "¦¹¤ÀÃþ¤w³Q§R°£." + +#: admin/index.php:359 +msgid "The queue has been modified." +msgstr "¦¹¤ÀÃþ¤w³Q­×§ï." + +#: admin/index.php:400 +msgid "The queue was not deleted." +msgstr "¦¹¤ÀÃþ¨Ã¥¼³Q§R°£." + +#: lib/MIME/Viewer/zip.php:58 +msgid "The requested file does not exist in the Zip attachment." +msgstr "¦b Zip ªþ¥ó¤¤§ä¤£¨ì©Ò¶·­nªºÀÉ®×." + +#: data.php:26 +msgid "The requested template does not exist." +msgstr "ÂI¿ïªº¼ËªO¨Ã¤£¦s¦b." + +#: admin/index.php:422 +#, php-format +msgid "The state \"%s\" has been added to %s." +msgstr "ª¬ºA\"%s\"¤w³Q·s¼W¨ì%s." + +#: admin/index.php:525 +msgid "The state has been deleted." +msgstr "¦¹ª¬ºA¤w³Q§R°£." + +#: admin/index.php:475 +msgid "The state has been modified." +msgstr "¦¹ª¬ºA¤w³Q­×§ï." + +#: admin/index.php:533 +msgid "The state was not deleted." +msgstr "¦¹ª¬ºA¨Ã¥¼³Q§R°£." + +#: ticket/delete.php:78 +msgid "The ticket was not deleted." +msgstr "Ápô³æ¨Ã¥¼³Q§R°£." + +#: admin/index.php:223 +#, php-format +msgid "The type \"%s\" has been modified." +msgstr "Ãþ«¬\"%s\"¤w³Q­×§ï." + +#: admin/index.php:272 +msgid "The type has been deleted." +msgstr "¦¹Ãþ«¬¤w³Q§R°£." + +#: admin/index.php:280 +msgid "The type was not deleted." +msgstr "¦¹Ãþ«¬¨Ã¥¼³Q§R°£." + +#: admin/index.php:776 +#, php-format +msgid "The version \"%s\" has been added to %s." +msgstr "ª©¥»\"%s\"¤w³Q¼W¥[¨ì%s." + +#: admin/index.php:865 +msgid "The version has been deleted." +msgstr "¦¹ª©¥»¤w³Q§R°£." + +#: admin/index.php:835 +msgid "The version has been modified." +msgstr "¦¹ª©¥»¤w³Q­×§ï." + +#: admin/index.php:873 +msgid "The version was not deleted." +msgstr "¦¹ª©¥»¨Ã¥¼³Q§R°£." + +#: lib/Forms/Admin/Attribute.php:70 +msgid "There are no attribute types to edit" +msgstr "¨S¦³ÄÝ©ÊÃþ«¬¥i¨Ñ½s¿è" + +#: lib/Forms/Query.php:278 +msgid "There are no attributes defined." +msgstr "¨S¦³©w¸q¥ô¦XÄÝ©Ê." + +#: lib/Forms/Admin/Reply.php:48 +msgid "There are no form replies to edit" +msgstr "¨S¦³¦^Âм˥»¥i¨Ñ½s¿è" + +#: lib/Block/queuesummary.php:44 +msgid "There are no open tickets." +msgstr "¨S¦³©|¥¼µ²®×ªºÁpô³æ." + +#: lib/Forms/Admin/Priority.php:44 lib/Forms/Admin/Priority.php:90 +msgid "There are no priorities to edit" +msgstr "¨S¦³Àu¥ýÅv¥i¨Ñ½s¿è" + +#: lib/Forms/Admin.php:31 +msgid "There are no queues available." +msgstr "µL¥i¥Îªº¤ÀÃþ¦s¦b." + +#: lib/Forms/Admin/Queue.php:57 +msgid "There are no queues to edit" +msgstr "¨S¦³¤ÀÃþ¥i¨Ñ½s¿è" + +#: lib/Forms/CreateTicket.php:35 +msgid "There are no queues which you can create tickets in." +msgstr "¨S¦³¤ÀÃþ¥i¨Ñ§A«Ø¥ßÁpô³æ." + +#: lib/Forms/Search.php:34 +msgid "There are no queues which you can search." +msgstr "¨S¦³¤ÀÃþ¥i¨Ñ§A·j´M." + +#: lib/Forms/Admin/State.php:43 lib/Forms/Admin/State.php:92 +msgid "There are no states to edit" +msgstr "¨S¦³ª¬ºA¥i¨Ñ½s¿è" + +#: lib/Forms/CreateTicket.php:72 +msgid "" +"There are no ticket types associated with this queue; until there are, you " +"cannot create any tickets in this queue." +msgstr "" +"¨S¦³¥ô¦óÃþ«¬»P³o­Ó¼Ò²Õ¬ÛÃöÁp;§A±NµLªk«Ø¥ßÁpô³æ,°£«D§A¬°¦¹¼Ò²Õ«Ø¥ßÃþ«¬." + +#: lib/Forms/Admin/Type.php:45 +msgid "There are no types to edit" +msgstr "¨S¦³Ãþ«¬¥i¨Ñ½s¿è" + +#: lib/Forms/Admin/User.php:75 +msgid "There are no users responsible for this queue." +msgstr "³o­Ó¤ÀÃþ¨S¦³©Ó¿ì¤H." + +#: lib/Forms/CreateTicket.php:242 +msgid "There are no users to which this ticket can be assigned." +msgstr "¦b¦¹Ápô³æ¤¤¨S¦³¨Ï¥ÎªÌ¥i¨Ñ«ü¬£." + +#: lib/Forms/Admin/Version.php:44 +msgid "There are no versions to edit" +msgstr "¨S¦³ª©¥»¥i¨Ñ½s¿è" + +#: lib/Reports.php:161 +msgid "There is no data for this report." +msgstr "¦¹³øªí¤¤¨S¦³¸ê®Æ." + +#: admin/index.php:705 +#, php-format +msgid "There was an error adding \"%s\" to the responsible list for \"%s\":" +msgstr "·s¼W \"%s\" ¨ì \"%s\" ªº©Ó¿ì¦W³æ®Éµo¥Í¤@­Ó¿ù»~:" + +#: admin/index.php:911 +msgid "There was an error creating the attribute:" +msgstr "«Ø¥ßÄݩʮɵo¥Í¤@­Ó¿ù»~:" + +#: admin/index.php:1050 +msgid "There was an error creating the form reply:" +msgstr "«Ø¥ß¦^Âм˥»®Éµo¥Í¤@­Ó¿ù»~:" + +#: admin/index.php:561 +msgid "There was an error creating the priority:" +msgstr "«Ø¥ßÀu¥ýÅv®Éµo¥Í¤@­Ó¿ù»~:" + +#: admin/index.php:309 +msgid "There was an error creating the queue:" +msgstr "«Ø¥ß¤ÀÃþ®Éµo¥Í¤@­Ó¿ù»~:" + +#: admin/index.php:426 +msgid "There was an error creating the state:" +msgstr "«Ø¥ßª¬ºA®Éµo¥Í¤@­Ó¿ù»~:" + +#: admin/index.php:780 +msgid "There was an error creating the version:" +msgstr "«Ø¥ßª©¥»®Éµo¥Í¤@­Ó¿ù»~:" + +#: admin/index.php:1009 +msgid "There was an error deleting the attribute:" +msgstr "§R°£Äݩʮɵo¥Í¤@­Ó¿ù»~:" + +#: admin/index.php:1138 +msgid "There was an error deleting the form reply:" +msgstr "§R°£¦^Âм˥»®Éµo¥Í¤@­Ó¿ù»~:" + +#: admin/index.php:665 +msgid "There was an error deleting the priority:" +msgstr "§R°£Àu¥ýÅv®Éµo¥Í¤@­Ó¿ù»~:" + +#: admin/index.php:395 +msgid "There was an error deleting the queue:" +msgstr "§R°£¤ÀÃþ®Éµo¥Í¤@­Ó¿ù»~:" + +#: admin/index.php:528 +msgid "There was an error deleting the state:" +msgstr "§R°£ª¬ºA®Éµo¥Í¤@­Ó¿ù»~:" + +#: ticket/delete.php:75 +#, php-format +msgid "There was an error deleting the ticket: %s" +msgstr "§R°£Ápô³æ: %s ®Éµo¥Í¤@­Ó¿ù»~." + +#: admin/index.php:275 +msgid "There was an error deleting the type:" +msgstr "§R°£Ãþ«¬®Éµo¥Í¤@­Ó¿ù»~:" + +#: admin/index.php:868 +msgid "There was an error deleting the version:" +msgstr "§R°£ª©¥»®Éµo¥Í¤@­Ó¿ù»~:" + +#: admin/index.php:981 +msgid "There was an error editing the attribute:" +msgstr "½s¿èÄݩʮɵo¥Í¤@­Ó¿ù»~:" + +#: admin/index.php:1103 +msgid "There was an error editing the form reply:" +msgstr "½s¿è¦^Âм˥»®Éµo¥Í¤@­Ó¿ù»~:" + +#: admin/index.php:615 +msgid "There was an error editing the priority:" +msgstr "½s¿èÀu¥ýÅv®Éµo¥Í¤@­Ó¿ù»~:" + +#: admin/index.php:375 +msgid "There was an error editing the queue:" +msgstr "½s¿è¤ÀÃþ®Éµo¥Í¤@­Ó¿ù»~:" + +#: admin/index.php:480 +msgid "There was an error editing the state:" +msgstr "½s¿èª¬ºA®Éµo¥Í¤@­Ó¿ù»~:" + +#: admin/index.php:841 +msgid "There was an error editing the version:" +msgstr "½s¿èª©¥»®Éµo¥Í¤@­Ó¿ù»~:" + +#: lib/Forms/Admin/User.php:35 +#, php-format +msgid "There was an error listing users: %s; %s" +msgstr "¦C¥X¨Ï¥ÎªÌ: %s; %s ®Éµo¥Í¤@­Ó¿ù»~." + +#: queue/index.php:52 +msgid "There was an error locating tickets in this queue: " +msgstr "´M§ä¤ÀÃþ¤¤ªºÁpô³æ®Éµo¥Í¤@­Ó¿ù»~: " + +#: admin/index.php:219 +msgid "There was an error modifying the type:" +msgstr "­×§ïÃþ«¬®Éµo¥Í¤@­Ó¿ù»~:" + +#: search.php:72 +#, php-format +msgid "There was an error performing your search: %s" +msgstr "°õ¦æ·j´M: %s ®Éµo¥Í¤@­Ó¿ù»~." + +#: admin/index.php:750 +#, php-format +msgid "" +"There was an error removing \"%s\" from the responsible list for \"%s\":" +msgstr "¦Û \"%2$s\" ªº©Ó¿ì¦W³æ²¾°£ \"%1$s\" ®Éµo¥Í¤@­Ó¿ù»~:" + +#: admin/index.php:638 +msgid "There was an error setting the default priority:" +msgstr "³]©w¹w³]Àu¥ýÅv®Éµo¥Í¤@­Ó¿ù»~:" + +#: admin/index.php:502 +msgid "There was an error setting the default state:" +msgstr "³]©w¹w³]ª¬ºA®Éµo¥Í¤@­Ó¿ù»~:" + +#: lib/Forms/Admin/Queue.php:31 +msgid "" +"This email address will be used when sending notifications for any queue " +"tickets." +msgstr "³o­Ó email ¦a§}±N¥Î¨Ó³qª¾©Ò¦³ÄÝ©ó¦¹Ãþ§OªºÁpô³æ." + +#: data.php:29 +msgid "This is not a search results template." +msgstr "³o¤£¬O¤@­Ó·j´Mµ²ªGªº¼Ë¦¡." + +#: ticket/queue.php:81 lib/Forms/CreateTicket.php:88 +msgid "" +"This queue requires that you specify a version, but there are no versions " +"associated with it. Until versions are created for this queue, you will not " +"be able to create tickets." +msgstr "" +"³o­Ó¤ÀÃþ»Ý­n§A¬°¥¦«ü©w¤@­Óª©¥»,¦ý¬O¥Ø«e¨Ã¨S¦³¥ô¦óª©¥»»P¨ä¬ÛÃöÁp.§A±NµLªk«Ø¥ß" +"Ápô³æ,ª½¨ì§A¬°¦¹¤@¤ÀÃþ«Ø¥ßª©¥»." + +#: lib/Ticket.php:638 lib/Ticket.php:820 +msgid "Ticket" +msgstr "Ápô³æ" + +#: ticket/delete.php:71 +#, php-format +msgid "Ticket %d has been deleted." +msgstr "Ápô³æ %d ¤w³Q§R°£." + +#: lib/api.php:949 +#, php-format +msgid "Ticket %s - %s" +msgstr "Ápô³æ %s - %s" + +#: lib/Driver/sql.php:1044 +#, php-format +msgid "Ticket %s was not found." +msgstr "§ä¤£¨ìÁpô³æ %s ." + +#: search.php:98 +msgid "Ticket Search" +msgstr "Ápô³æ·j´M" + +#: lib/Forms/CreateTicket.php:142 +msgid "Ticket State" +msgstr "Ápô³æª¬ºA" + +#: templates/reports/stats.inc:3 +msgid "Ticket Stats" +msgstr "Ápô³æ²Î­p" + +#: lib/Forms/CreateTicket.php:80 +msgid "Ticket Type" +msgstr "Ápô³æÃþ«¬" + +#: lib/Forms/Admin/Queue.php:103 +msgid "Ticket Types associated with this Queue" +msgstr "»P¦¹¤ÀÃþ¦³ÃöÁpªºÁpô³æÃþ«¬" + +#: lib/Ticket.php:633 +#, php-format +msgid "Ticket URL: %s" +msgstr "Ápô³æºô§}: %s" + +#: ticket/update.php:94 +msgid "Ticket Updated" +msgstr "Ápô³æ¤w§ó·s" + +#: lib/api.php:970 +msgid "Tickets" +msgstr "Ápô³æ" + +#: templates/prefs/sourceselect.inc:322 +msgid "" +"To select multiple fields, hold down the Control (PC) or Command (Mac) while " +"clicking." +msgstr "" +"¦pªG­n½Æ¿ïÄæ¦ì,½Ð¦bÂI¿ï·Æ¹«ªº®É¦P®É«ö ControlÁä(­Ó¤H¹q¸£) ©Î CommandÁä(Ä«ªG¹q" +"¸£)." + +#: ticket/queue.php:89 lib/Whups.php:647 lib/Ticket.php:608 lib/Ticket.php:805 +#: lib/Ticket.php:945 lib/Renderer/Query.php:108 lib/Forms/Query.php:174 +#: config/prefs.php.dist:48 +msgid "Type" +msgstr "Ãþ«¬" + +#: lib/Renderer/Comment.php:105 +#, php-format +msgid "Type ⇒ %s" +msgstr "Ãþ«¬ ⇒ %s" + +#: lib/Forms/Admin/Type.php:23 lib/Forms/Admin/Type.php:70 +#: lib/Forms/Admin/Type.php:160 +msgid "Type Description" +msgstr "Ãþ«¬´y­z" + +#: lib/Forms/Admin/Type.php:22 lib/Forms/Admin/Type.php:48 +#: lib/Forms/Admin/Type.php:67 lib/Forms/Admin/Type.php:156 +msgid "Type Name" +msgstr "Ãþ«¬¦WºÙ" + +#: lib/Ticket.php:961 +msgid "Unassigned" +msgstr "¥¼«ü¬£" + +#: lib/Block/unassigned.php:3 lib/Block/unassigned.php:24 +msgid "Unassigned Tickets" +msgstr "¥¼³Q«ü¬£Ápô³æ" + +#: lib/Forms/Admin.php:42 +msgid "Unassigned tickets" +msgstr "¥¼³Q«ü¬£Ápô³æ" + +#: lib/Driver.php:196 +msgid "Unconfirmed" +msgstr "¥¼½T»{" + +#: lib/Renderer/Query.php:141 lib/Renderer/Query.php:181 +#, php-format +msgid "Unknown node type %s" +msgstr "¥¼ª¾ªº¸`ÂI(node)Ãþ«¬ %s" + +#: lib/api.php:896 +msgid "Update" +msgstr "Åܧó" + +#: ticket/update.php:108 +#, php-format +msgid "Update %s" +msgstr "§ó·s %s" + +#: templates/admin/mtmatrix.inc:29 +msgid "Update Associations" +msgstr "§ó·sÃöÁp" + +#: lib/Whups.php:653 lib/Ticket.php:981 +msgid "Updated" +msgstr "Åܧó¤é" + +#: lib/Ticket.php:615 lib/Ticket.php:640 +msgid "Updated By" +msgstr "§ó·sªÌ" + +#: lib/Forms/Admin/User.php:34 lib/Forms/Admin/User.php:44 +#: lib/Forms/Admin/User.php:47 +msgid "User" +msgstr "¨Ï¥ÎªÌ" + +#: lib/Forms/Query.php:43 +msgid "User ID" +msgstr "¨Ï¥ÎªÌÃѧO¸¹½X" + +#: lib/Forms/Admin/Queue.php:131 +msgid "Users responsible for this Queue" +msgstr "¤ÀÃþ©Ó¿ì¤H" + +#: lib/Forms/Admin/User.php:79 +msgid "Users responsible for this queue" +msgstr "³o­Ó¤ÀÃþªº©Ó¿ì¤H" + +#: lib/Ticket.php:607 lib/Ticket.php:804 lib/Renderer/Query.php:102 +#: lib/Forms/Query.php:185 config/prefs.php.dist:51 +msgid "Version" +msgstr "ª©¥»" + +#: lib/Forms/Admin/Version.php:24 lib/Forms/Admin/Version.php:70 +#: lib/Forms/Admin/Version.php:93 +msgid "Version Description" +msgstr "ª©¥»´y­z" + +#: lib/Forms/Admin/Version.php:23 lib/Forms/Admin/Version.php:48 +#: lib/Forms/Admin/Version.php:67 lib/Forms/Admin/Version.php:90 +msgid "Version Name" +msgstr "ª©¥»¦WºÙ" + +#: ticket/type.php:43 ticket/queue.php:50 lib/Forms/AddComment.php:38 +msgid "Viewable only by members of" +msgstr "¥iÀ˵ø¦¹µû½×ªº¸s²Õ" + +#: lib/Forms/AddComment.php:25 +msgid "Watch this ticket" +msgstr "­q¾\¦¹Ápô³æ" + +#: ticket/watch.php:78 +#, php-format +msgid "Watchers for %s" +msgstr "%sªº­q¾\ªÌ" + +#: config/prefs.php.dist:104 +msgid "Weekday Day Month" +msgstr "¬P´Á ¤é ¤ë" + +#: config/prefs.php.dist:105 +msgid "Weekday Day Month HH:MM:SS TZ" +msgstr "¬P´Á ¤é ¤ë ®É:¤À:¬í ®É°Ï" + +#: ticket/delete.php:33 lib/Forms/Query.php:379 lib/Forms/Admin/Version.php:96 +#: lib/Forms/Admin/State.php:121 lib/Forms/Admin/Priority.php:121 +#: lib/Forms/Admin/Queue.php:174 lib/Forms/Admin/Attribute.php:149 +#: lib/Forms/Admin/Reply.php:110 lib/Forms/Admin/Type.php:176 +msgid "Yes" +msgstr "¬O" + +#: view.php:54 +#, php-format +msgid "You are not allowed to view ticket %d." +msgstr "§A¥¼³Q±ÂÅvÀ˵øÁpô³æ %d." + +#: lib/Driver/sql.php:1053 +#, php-format +msgid "You do not have permission to access this ticket (%s)." +msgstr "§A¨S¦³¦s¨ú¦¹Ápô³æ (%s) ªºÅv­­." + +#: lib/api.php:548 +msgid "You do not have permission to update this ticket." +msgstr "§A¨S¦³Åܧó¦¹Ápô³æªºÅv­­." + +#: lib/Block/myrequests.php:46 +msgid "You have no open requests." +msgstr "¨S¦³Ápô³æ¥¼«ü¬£." + +#: lib/Forms/Query.php:349 lib/Block/query.php:28 +msgid "You have no saved queries." +msgstr "¨S¦³Àx¦sªº¬d¸ß." + +#: lib/Whups.php:680 +msgid "You must select at least one queue to send reminders for." +msgstr "§A¥²¶·¿ï¾Ü¦Ü¤Ö¤@­Ó¤ÀÃþ¥H¶Ç°e´£¥Ü." + +#: lib/Forms/CreateTicket.php:132 lib/Forms/AddComment.php:18 +msgid "Your Email Address" +msgstr "§Aªº¹q¤l¶l¥ó¦a§}" + +#: ticket/create.php:60 +#, php-format +msgid "" +"Your ticket ID is %s. An appropriate person has been notified of this " +"request." +msgstr "§AªºÁpô³æ¸¹½X(ID)¬° %s. ¤w³qª¾¤@¦ì¾A·íªº¤H­û" + +#: lib/Mail.php:244 +msgid "[ Could not render body of message. ]" +msgstr "[ µLªk¶}±ÒŪ¨ú¶l¥ó¥»¤å. ]" + +#: lib/Whups.php:744 +msgid "_Admin" +msgstr "ºÞ²z_A" + +#: lib/Whups.php:268 +msgid "_Comment" +msgstr "µû½×_C" + +#: lib/Whups.php:286 +msgid "_Delete" +msgstr "§R°£_D" + +#: lib/Query.php:206 +msgid "_Delete Query" +msgstr "§R°£_D" + +#: lib/Query.php:187 +msgid "_Edit Query" +msgstr "½s¿è_E" + +#: admin/index.php:33 +msgid "_Edit Queues" +msgstr "½s¿è¤ÀÃþ_E" + +#: templates/menu.inc:5 +msgid "_Go" +msgstr "«e©¹_G" + +#: query.php:140 +msgid "_Group Criteria" +msgstr "¸s²Õ_G" + +#: lib/Whups.php:262 +msgid "_History" +msgstr "¾ú¥v_H" + +#: lib/Query.php:200 +msgid "_Load Query" +msgstr "¸ü¤J_L" + +#: lib/Whups.php:735 +#, php-format +msgid "_My %s" +msgstr "§Úªº%s_M" + +#: lib/Whups.php:738 +msgid "_New Ticket" +msgstr "·s¼WÁpô³æ_N" + +#: query.php:138 +msgid "_Property Criteria" +msgstr "©Ê½è_P" + +#: lib/Whups.php:739 +msgid "_Query Builder" +msgstr "¬d¸ß²£¥Í¾¹_Q" + +#: lib/Whups.php:740 +msgid "_Reports" +msgstr "³øªí_R" + +#: lib/Whups.php:737 +msgid "_Search" +msgstr "·j´M_S" + +#: query.php:142 +msgid "_Text Criteria" +msgstr "¤º®e_T" + +#: lib/Whups.php:264 +msgid "_Update" +msgstr "Åܧó_U" + +#: query.php:139 +msgid "_User Criteria" +msgstr "¨Ï¥ÎªÌ_U" + +#: lib/Whups.php:272 +msgid "_Watch" +msgstr "­q¾\_W" + +#: lib/Renderer/Query.php:161 +msgid "contains (case insensitive) substring" +msgstr "¥]§t(¤£¤À¤j¤p¼g)¤l¦r¦ê" + +#: lib/Renderer/Query.php:165 +msgid "contains (case sensitive) substring" +msgstr "¥]§t(°Ï¤À¤j¤p¼g)¤l¦r¦ê" + +#: lib/Renderer/Query.php:169 +msgid "contains the word" +msgstr "¥]§t³o­Ó¦r" + +#: lib/Mail.php:94 lib/Mail.php:118 lib/Mail.php:146 +msgid "current user:" +msgstr "¥Ø«e¨Ï¥ÎªÌ:" + +#: lib/api.php:958 +msgid "estimated time" +msgstr "¹w¦ô®É¶¡" + +#: lib/Renderer/Query.php:157 +msgid "is" +msgstr "¬O" + +#: lib/Renderer/Query.php:149 +msgid "is greater than" +msgstr "¤j©ó" + +#: lib/Renderer/Query.php:153 +msgid "is less than" +msgstr "¤p©ó" + +#: lib/Renderer/Query.php:173 +msgid "matches the pattern" +msgstr "»P¼Ë¥»§k¦X" diff --git a/whups/query/.htaccess b/whups/query/.htaccess new file mode 100644 index 000000000..9f52c7130 --- /dev/null +++ b/whups/query/.htaccess @@ -0,0 +1,9 @@ + + RewriteEngine On + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^([0-9]+)/?$ run.php?query=$1 [QSA] + RewriteRule ^([0-9]+)/rss/?$ rss.php?query=$1 [QSA] + RewriteRule ^([a-zA-Z0-9_]+)/?$ run.php?slug=$1 [QSA] + RewriteRule ^([a-zA-Z0-9_]+)/rss/?$ rss.php?slug=$1 [QSA] + diff --git a/whups/query/index.php b/whups/query/index.php new file mode 100644 index 000000000..1785dd5c1 --- /dev/null +++ b/whups/query/index.php @@ -0,0 +1,246 @@ + + * Copyright 2001-2009 The Horde Project (http://www.horde.org/) + * + * See the enclosed file LICENSE for license information (BSD). If you + * did not receive this file, see http://www.horde.org/licenses/bsdl.php. + * + * @author Chuck Hagenbuch + */ + +require_once dirname(__FILE__) . '/../lib/base.php'; +require_once WHUPS_BASE . '/lib/Query.php'; +require_once WHUPS_BASE . '/lib/Forms/Query.php'; +require_once WHUPS_BASE . '/lib/Renderer/Query.php'; + +$vars = Horde_Variables::getDefaultVariables(); +$qManager = new Whups_QueryManager(); + +// Set up the page config vars. +$showEditQuery = true; +$showExtraForm = null; + +// Find our current query. +if (isset($_SESSION['whups']['query'])) { + $whups_query = unserialize($_SESSION['whups']['query']); + if (!$whups_query->hasPermission(Horde_Auth::getAuth(), Horde_Perms::READ)) { + $notification->push(_("Permission denied."), 'horde.error'); + header('Location: ' . Horde::applicationUrl($prefs->getValue('whups_default_view') . '.php', true)); + exit; + } +} else { + $whups_query = $qManager->newQuery(); +} + +// Find the current criteria form, and default to the user form if not +// present. +if (!isset($_SESSION['whups']['query_form'])) { + $_SESSION['whups']['query_form'] = 'props'; +} +$vars->set('whups_query_form', $_SESSION['whups']['query_form']); + +// What now? First check the result of the query edit action dropdown, as this +// action overrides the form it sits within. +if ($vars->get('qaction1') || $vars->get('qaction2')) { + $action = $vars->get('qaction1') ? $vars->get('qaction1') : $vars->get('qaction2'); + + switch ($action) { + // Query actions. + case 'deleteNode': + $whups_query->deleteNode($vars->get('path')); + $vars->remove('path'); + break; + + case 'hoist': + $whups_query->hoist($vars->get('path')); + break; + + case 'branch': + $form = new InsertBranchForm($vars); + break; + + case 'not': + $path = $whups_query->insertBranch($vars->get('path'), QUERY_TYPE_NOT); + $vars->set('path', $path); + break; + + case 'and': + $path = $whups_query->insertBranch($vars->get('path'), QUERY_TYPE_AND); + $vars->set('path', $path); + break; + + case 'or': + $path = $whups_query->insertBranch($vars->get('path'), QUERY_TYPE_OR); + $vars->set('path', $path); + break; + + case 'edit': + $_SESSION['whups']['query_form'] = $whups_query->pathToForm($vars); + if (is_a($_SESSION['whups']['query_form'], 'PEAR_Error')) { + $notification->push($_SESSION['whups']['query_form']); + $_SESSION['whups']['query_form'] = 'props'; + } + $vars->set('edit', true); + break; + } + + $vars->remove('qaction1'); + $vars->remove('qaction2'); +} elseif ($vars->get('formname')) { + // Now check for submitted forms. + $class = $vars->get('formname'); + $form = new $class($vars); + if ($form->validate($vars)) { + if ($vars->get('edit')) { + $whups_query->deleteNode($vars->get('path')); + $path = Whups_Query::stringToPath($vars->get('path')); + array_pop($path); + $vars->set('path', Whups_Query::pathToString($path)); + $vars->remove('edit'); + } + $form->execute($vars); + $vars->remove('action'); + } +} elseif ($vars->get('action') != '') { + // Last, check for actions from tabs. + $action = $vars->get('action'); + + switch ($action) { + // Current form actions. + case 'props': + case 'user': + case 'group': + case 'date': + case 'text': + case 'attribs': + $_SESSION['whups']['query_form'] = $action; + break; + + // Global query options + case 'new': + unset($whups_query); + $whups_query = $qManager->newQuery(); + break; + + case 'delete': + $showExtraForm = 'DeleteQueryForm'; + $showEditQuery = false; + break; + + case 'save': + $showExtraForm = 'ChooseQueryNameForSaveForm'; + $showEditQuery = false; + break; + + case 'load': + $showExtraForm = 'ChooseQueryNameForLoadForm'; + $showEditQuery = false; + break; + } +} + +// Query actions. +$queryTabs = $whups_query->getTabs($vars); + +// Criterion form types. +$queryurl = Horde::applicationUrl('query/index.php'); +$vars->set('action', $_SESSION['whups']['query_form']); +$criteriaTabs = new Horde_Ui_Tabs('action', $vars); +$criteriaTabs->preserve('path', $vars->get('path')); +$criteriaTabs->addTab(_("_Property Criteria"), $queryurl, 'props'); +$criteriaTabs->addTab(_("_User Criteria"), $queryurl, 'user'); +$criteriaTabs->addTab(_("_Group Criteria"), $queryurl, 'group'); +$criteriaTabs->addTab(_("_Date Criteria"), $queryurl, 'date'); +$criteriaTabs->addTab(_("_Text Criteria"), $queryurl, 'text'); +$criteriaTabs->addTab(_("Attri_bute Criteria"), $queryurl, 'attribs'); + +$qops = array( + '' => _("Choose Action:"), + 'deleteNode' => _("Delete"), + 'edit' => _("Edit"), + 'hoist' => _("Hoist Children"), + 'and' => _("Insert And"), + 'or' => _("Insert Or"), + 'not' => _("Insert Not"), +); + +// Start the page. +$title = _("Query Builder"); +require WHUPS_TEMPLATES . '/common-header.inc'; +require WHUPS_TEMPLATES . '/menu.inc'; + +echo $queryTabs->render(Horde_Util::getFormData('action', 'edit')); + +if ($showExtraForm !== null) { + $form = new $showExtraForm($vars); + $form->renderActive($form->getRenderer(), $vars, 'index.php'); + echo '
'; +} + +/* Get the general query renderer object. */ +$queryRenderer = new Horde_Form_Renderer_Query(); + +if ($showEditQuery) { + // Get our current form. + switch ($_SESSION['whups']['query_form']) { + default: + printf(_("Error: Unknown query form \"%s\", defaulting to properties"), + $_SESSION['whups']['query_form']); + // Fall through. + + case 'props': + $form = new PropertyCriterionForm($vars); + break; + + case 'user': + $form = new UserCriterionForm($vars); + break; + + case 'group': + $form = new GroupCriterionForm($vars); + break; + + case 'text': + $form = new TextCriterionForm($vars); + break; + + case 'attribs': + $form = new AttributeCriterionForm($vars); + break; + + case 'date': + $form = new DateCriterionForm($vars); + break; + } + + $renderer = $form->getRenderer(); + $form->open($renderer, $vars, 'index.php', 'post'); + + $queryRenderer->beginActive(_("Current Query")); + $queryRenderer->edit($qops, $form->getName(), 1); + $queryRenderer->renderFormActive($whups_query, $vars); + $queryRenderer->edit($qops, $form->getName(), 2); + $renderer->end(); + + echo '
' . $criteriaTabs->render(); + + $renderer->beginActive($form->getTitle()); + $renderer->renderFormActive($form, $vars); + $renderer->submit($vars->get('edit') ? _("Save Criterion") : _("Add Criterion")); + $renderer->end(); + + $form->close($renderer); +} else { + // Show query readonly. + $renderer = new Horde_Form_Renderer(); + $renderer->beginActive(_("Current Query")); + $queryRenderer->renderFormInactive($whups_query, $vars); + $renderer->end(); +} + +require $registry->get('templates', 'horde') . '/common-footer.inc'; + +$_SESSION['whups']['query'] = serialize($whups_query); diff --git a/whups/query/rss.php b/whups/query/rss.php new file mode 100644 index 000000000..4e2f9155a --- /dev/null +++ b/whups/query/rss.php @@ -0,0 +1,72 @@ + + * @author Jan Schneider + */ +@define('WHUPS_BASE', dirname(__FILE__) . '/..'); +require_once WHUPS_BASE . '/lib/base.php'; +require_once WHUPS_BASE . '/lib/Query.php'; +require_once 'Horde/Template.php'; + +$qManager = new Whups_QueryManager(); +$vars = new Horde_Variables(); + +// See if we were passed a slug or id. Slug is tried first. +$whups_query = null; +$slug = Horde_Util::getFormData('slug'); +if ($slug) { + $whups_query = $qManager->getQueryBySlug($slug); +} else { + $whups_query = $qManager->getQuery(Horde_Util::getFormData('query')); +} + +if (!isset($whups_query) || + is_a($whups_query, 'PEAR_Error') || + $whups_query->parameters || + !$whups_query->hasPermission(Horde_Auth::getAuth(), Horde_Perms::READ)) { + exit; +} + +$tickets = $whups_driver->executeQuery($whups_query, $vars); +if (is_a($tickets, 'PEAR_Error') || !count($tickets)) { + exit; +} + +Whups::sortTickets($tickets, 'date_updated', 'desc'); +$cnt = 0; +foreach (array_keys($tickets) as $i) { + $description = 'Type: ' . $tickets[$i]['type_name'] . '; State: ' + . $tickets[$i]['state_name']; + + $items[$i]['title'] = htmlspecialchars(sprintf('[%s] %s', + $tickets[$i]['id'], + $tickets[$i]['summary'])); + $items[$i]['description'] = htmlspecialchars($description); + $items[$i]['url'] = Whups::urlFor('ticket', $tickets[$i]['id'], true, -1); + $items[$i]['pubDate'] = htmlspecialchars(date('r', $tickets[$i]['timestamp'])); +} + +$template = new Horde_Template(); +$template->set('charset', Horde_Nls::getCharset()); +$template->set('xsl', $registry->get('themesuri') . '/feed-rss.xsl'); +$template->set('pubDate', htmlspecialchars(date('r'))); +$template->set('title', htmlspecialchars($whups_query->name ? $whups_query->name : _("Query Results"))); +$template->set('items', $items, true); +$url_param = isset($slug) + ? array('slug' => $slug) + : array('id' => Horde_Util::getFormData('query')); +$template->set('url', Whups::urlFor('query', $url_param, true, -1)); +$template->set('rss_url', Whups::urlFor('query_rss', $url_param, true, -1)); +$template->set('description', htmlspecialchars(sprintf(_("Tickets matching the query \"%s\"."), $whups_query->name))); + +$browser->downloadHeaders((isset($slug) ? $slug : 'query') . '.rss', 'text/xml', true); +echo $template->fetch(WHUPS_TEMPLATES . '/rss/items.rss'); diff --git a/whups/query/run.php b/whups/query/run.php new file mode 100644 index 000000000..d53ca8447 --- /dev/null +++ b/whups/query/run.php @@ -0,0 +1,117 @@ + + * Copyright 2001-2009 The Horde Project (http://www.horde.org/) + * + * See the enclosed file LICENSE for license information (BSD). If you + * did not receive this file, see http://www.horde.org/licenses/bsdl.php. + * + * @author Chuck Hagenbuch + */ + +require_once dirname(__FILE__) . '/../lib/base.php'; +require_once WHUPS_BASE . '/lib/Query.php'; +require_once WHUPS_BASE . '/lib/Forms/QueryParameterForm.php'; +require WHUPS_BASE . '/lib/Renderer/Query.php'; +require_once WHUPS_BASE . '/lib/View.php'; + +$vars = Horde_Variables::getDefaultVariables(); +$qManager = new Whups_QueryManager(); + +// Load the current query. If we have a 'slug' or 'query' parameter, that +// overrides and we load in that from the query store. Slug is tried +// first. Otherwise we use the query that is currently in our session. +$whups_query = null; +if ($vars->exists('slug')) { + $whups_query = $qManager->getQueryBySlug($vars->get('slug')); +} elseif ($vars->exists('query')) { + $whups_query = $qManager->getQuery($vars->get('query')); +} elseif (isset($_SESSION['whups']['query'])) { + $whups_query = unserialize($_SESSION['whups']['query']); +} + +// If we have an error, or if we still don't have a query, or if we don't have +// read permissions on the requested query, go to the initial Whups page. +if (!isset($whups_query) || + is_a($whups_query, 'PEAR_Error') || + !$whups_query->hasPermission(Horde_Auth::getAuth(), Horde_Perms::READ)) { + if (is_a($whups_query, 'PEAR_Error')) { + $notification->push($whups_query); + } elseif (isset($whups_query)) { + $notification->push(_("Permission denied."), 'horde.error'); + } + header('Location: ' . Horde::applicationUrl($prefs->getValue('whups_default_view') . '.php', true)); + exit; +} + +// Query actions. +$tabs = $whups_query->getTabs($vars); + +$renderer = new Horde_Form_Renderer(); + +// Update sorting preferences. +if (Horde_Util::getFormData('sortby') !== null) { + $prefs->setValue('sortby', Horde_Util::getFormData('sortby')); +} +if (Horde_Util::getFormData('sortdir') !== null) { + $prefs->setValue('sortdir', Horde_Util::getFormData('sortdir')); +} + +$tickets = null; +$isvalid = false; +if (!$whups_query->parameters) { + $isvalid = true; +} else { + $form = new QueryParameterForm($whups_query, $vars); + if ($vars->get('formname') == 'queryparameters') { + $isvalid = $form->validate($vars); + } +} + +if ($isvalid) { + $tickets = $whups_driver->executeQuery($whups_query, $vars); + $_SESSION['whups']['last_search'] = Horde::applicationUrl('query/run.php'); +} + +$title = $whups_query->name ? $whups_query->name : _("Query Results"); +require WHUPS_TEMPLATES . '/common-header.inc'; +require WHUPS_TEMPLATES . '/menu.inc'; + +echo $tabs->render($vars->get('action') ? $vars->get('action') : 'run'); + +if (!is_null($tickets)) { + Whups::sortTickets($tickets); + $subscription = null; + if (isset($whups_query->id)) { + $params = empty($whups_query->slug) + ? array('id' => $whups_query->id) + : array('slug' => $whups_query->slug); + $subscription = Horde::link(Whups::urlFor('query_rss', $params, true, -1), + _("Subscribe to this query")) + . Horde::img('feed.png', _("Subscribe to this query"), null, + $GLOBALS['registry']->getImageDir('horde')) + . ''; + } + $results = Whups_View::factory( + 'Results', + array('title' => $title, + 'results' => $tickets, + 'extra' => $subscription, + 'values' => Whups::getSearchResultColumns(), + 'url' => Horde::applicationUrl('query/run.php'))); + + $results->html(); +} else { + $form->open($renderer, $vars, 'query/run.php'); + $renderer->beginActive($form->getTitle()); + $renderer->renderFormActive($form, $vars); + $renderer->submit(_("Execute Query")); + $renderer->end(); + $form->close($renderer); +} + +require $registry->get('templates', 'horde') . '/common-footer.inc'; + +$_SESSION['whups']['query'] = serialize($whups_query); diff --git a/whups/queue/.htaccess b/whups/queue/.htaccess new file mode 100644 index 000000000..bf0c14650 --- /dev/null +++ b/whups/queue/.htaccess @@ -0,0 +1,9 @@ + + RewriteEngine On + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^([0-9]+)/?$ index.php?id=$1 [QSA] + RewriteRule ^([0-9]+)/rss/?$ rss.php?id=$1 [QSA] + RewriteRule ^([a-zA-Z0-9_]+)/?$ index.php?slug=$1 [QSA] + RewriteRule ^([a-zA-Z0-9_]+)/rss/?$ rss.php?slug=$1 [QSA] + diff --git a/whups/queue/index.php b/whups/queue/index.php new file mode 100644 index 000000000..5f7ab6d43 --- /dev/null +++ b/whups/queue/index.php @@ -0,0 +1,66 @@ + + */ + +@define('WHUPS_BASE', dirname(__FILE__) . '/..'); +require_once WHUPS_BASE . '/lib/base.php'; +require_once WHUPS_BASE . '/lib/View.php'; + +// See if we were passed a slug or id. Slug is tried first. +$slug = Horde_Util::getFormData('slug'); +if ($slug) { + $queue = $whups_driver->getQueueBySlugInternal($slug); + $id = $queue['id']; +} else { + $id = Horde_Util::getFormData('id'); + $queue = $whups_driver->getQueue($id); +} + +if (!$id || is_a($queue, 'PEAR_Error')) { + $notification->push(_("Invalid queue"), 'horde.error'); + header('Location: ' . Horde::applicationUrl(basename($prefs->getValue('whups_default_view')) . '.php', true)); + exit; +} + +// Update sorting preferences. +if (Horde_Util::getFormData('sortby') !== null) { + $prefs->setValue('sortby', Horde_Util::getFormData('sortby')); +} +if (Horde_Util::getFormData('sortdir') !== null) { + $prefs->setValue('sortdir', Horde_Util::getFormData('sortdir')); +} + +$title = sprintf(_("Open tickets in %s"), $queue['name']); +require WHUPS_TEMPLATES . '/common-header.inc'; +require WHUPS_TEMPLATES . '/menu.inc'; + +$criteria = array('queue' => $id, + 'category' => array('unconfirmed', 'new', 'assigned')); + +$tickets = $whups_driver->getTicketsByProperties($criteria); +if (is_a($tickets, 'PEAR_Error')) { + $notification->push(sprintf(_("There was an error locating tickets in this queue: "), $tickets->getMessage()), 'horde.error'); +} else { + Whups::sortTickets($tickets); + $values = Whups::getSearchResultColumns(); + $self = Whups::urlFor('queue', $queue); + $results = Whups_View::factory('Results', array('title' => sprintf(_("Open tickets in %s"), $queue['name']), + 'results' => $tickets, + 'values' => $values, + 'url' => $self)); + $_SESSION['whups']['last_search'] = $self; + $results->html(); + +} + +require $registry->get('templates', 'horde') . '/common-footer.inc'; \ No newline at end of file diff --git a/whups/queue/rss.php b/whups/queue/rss.php new file mode 100644 index 000000000..f375e2370 --- /dev/null +++ b/whups/queue/rss.php @@ -0,0 +1,126 @@ + + */ +@define('WHUPS_BASE', dirname(__FILE__) . '/..'); +require_once WHUPS_BASE . '/lib/base.php'; +require_once 'Horde/Template.php'; + +// See if we were passed a slug or id. Slug is tried first. +$slug = Horde_Util::getFormData('slug'); +if ($slug) { + $queue = $whups_driver->getQueueBySlugInternal($slug); + // Bad queue slug? + if (!count($queue)) { + exit; + } + $id = $queue['id']; +} else { + $id = Horde_Util::getFormData('id'); + $queue = $whups_driver->getQueue($id); +} + +// If a specific state_category is not specified, default to returning all +// open tickets. +$state_category = Horde_Util::getFormData('state'); +if ($state_category) { + require_once 'Horde/String.php'; + $state_display = Horde_String::ucFirst($state_category); + // When specifying an explicit state, limit the feed to 10. + $limit = 10; + $state_category = array($state_category); +} else { + $state_category = array('unconfirmed', 'new', 'assigned'); + $state_display = _("Open"); + $limit = 0; +} + +$criteria = array(); + +// See if we are requesting a specific type_id (for bug, feature etc...) +$typeId = Horde_Util::getFormData('type_id'); +if (is_numeric($typeId)) { + $type = $whups_driver->getType($typeId); + if (!is_a($type, 'PEAR_Error')) { + $criteria['type'] = array($typeId); + } else { + unset($type); + } +} + +if (!$id && !$state_category && !$typeId) { + exit; +} + +$criteria['category'] = $state_category; +if ($id) { + $criteria['queue'] = $id; +} + +$tickets = $whups_driver->getTicketsByProperties($criteria); +if (is_a($tickets, 'PEAR_Error') || !count($tickets)) { + exit; +} + +Whups::sortTickets($tickets, 'date_updated', 'desc'); +$cnt = 0; +foreach (array_keys($tickets) as $i) { + if ($limit > 0 && $cnt++ == $limit) { + break; + } + $description = 'Type: ' . $tickets[$i]['type_name'] . '; State: ' + . $tickets[$i]['state_name']; + + $items[$i]['title'] = htmlspecialchars(sprintf('[%s] %s', + $tickets[$i]['id'], + $tickets[$i]['summary'])); + $items[$i]['description'] = htmlspecialchars($description); + $items[$i]['url'] = Whups::urlFor('ticket', $tickets[$i]['id'], true, -1); + $items[$i]['pubDate'] = htmlspecialchars(date('r', $tickets[$i]['timestamp'])); +} + +$template = new Horde_Template(); +$template->set('charset', Horde_Nls::getCharset()); +$template->set('xsl', $registry->get('themesuri') . '/feed-rss.xsl'); +$template->set('pubDate', htmlspecialchars(date('r'))); +if (isset($type) && isset($queue['name'])) { + $rss_title = sprintf(_("%s %s tickets in %s"), + $state_display, + $type['name'], $queue['name']); +} elseif (isset($type)) { + $rss_title = sprintf(_("%s %s tickets in all queues"), + $state_display, + $type['name']); +} elseif (isset($queue['name'])) { + $rss_title = sprintf(_("%s tickets in %s"), + $state_display, + $queue['name']); +} else { + $rss_title = sprintf(_("%s tickets in all queues"), $state_display); +} +$template->set('title', htmlspecialchars($rss_title)); +$template->set('items', $items, true); +$template->set('url', + Horde_Util::addParameter(Horde::applicationUrl('queue/', true, -1), + 'id', $id)); +$template->set('rss_url', + Horde_Util::addParameter(Horde::applicationUrl('rss.php', true, -1), + 'id', $id)); +if (isset($queue['name'])) { + $description = sprintf(_("Open tickets in %s"), $queue['name']); +} else { + $description = _("Open tickets in all queues."); +} +$template->set('description', htmlspecialchars($description)); + +$browser->downloadHeaders((isset($queue['name']) ? $queue['name'] : 'horde') . '.rss', 'text/xml', true); +echo $template->fetch(WHUPS_TEMPLATES . '/rss/items.rss'); diff --git a/whups/reports.php b/whups/reports.php new file mode 100644 index 000000000..d18a337d8 --- /dev/null +++ b/whups/reports.php @@ -0,0 +1,46 @@ + + */ + +@define('WHUPS_BASE', dirname(__FILE__)); +require_once WHUPS_BASE . '/lib/base.php'; +require_once WHUPS_BASE . '/lib/Reports.php'; + +/* Supported graph types. Unused at the moment. */ +$graphs = array('open|queue_name' => array('chart', _("Open Tickets by Queue")), + 'open|state_name' => array('chart', _("Open Tickets by State")), + 'open|type_name' => array('chart', _("Open Tickets by Type")), + 'open|priority_name' => array('chart', _("Open Tickets by Priority")), + 'open|user_id_requester' => array('chart', _("Open Tickets by Requester")), + 'open|owner' => array('chart', _("Open Tickets by Owner")), + '@closed:avg:open|owner' => array('plot', _("Average days to close by Owner")), + '@closed:avg:open|user_id_requester' => array('plot', _("Average days to close by Requester")), + '@closed:avg:open|queue_name' => array('plot', _("Average days to close by Queue"))); + +/* Supported statistic types. */ +$stats = array('avg|open' => _("Average time a ticket is unresolved"), + 'max|open' => _("Maximum time a ticket is unresolved"), + 'min|open' => _("Minimum time a ticket is unresolved")); + +$queues = Whups::permissionsFilter($whups_driver->getQueues(), 'queue', Horde_Perms::READ); +if (!count($queues)) { + $notification->push(_("No stats available.")); +} + +$reporter = new Whups_Reports($whups_driver); + +$title = _("Reports"); +require WHUPS_TEMPLATES . '/common-header.inc'; +require WHUPS_TEMPLATES . '/menu.inc'; +if (count($queues)) { + require WHUPS_TEMPLATES . '/reports/stats.inc'; +} +require $registry->get('templates', 'horde') . '/common-footer.inc'; diff --git a/whups/scripts/.htaccess b/whups/scripts/.htaccess new file mode 100644 index 000000000..3a4288278 --- /dev/null +++ b/whups/scripts/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/whups/scripts/bugzilla-import.php b/whups/scripts/bugzilla-import.php new file mode 100755 index 000000000..ddff35a0e --- /dev/null +++ b/whups/scripts/bugzilla-import.php @@ -0,0 +1,251 @@ +#!/usr/bin/php + + */ + +/* CONFIGURATION */ +$BUGZILLA_DSN = 'mysql://root:password@localhost/bugzilla'; +$BUGZILLA_STATES = array('NEW', 'ASSIGNED', 'RESOLVED', 'REOPENED', 'CLOSED'); +$BUGZILLA_BUG_TYPE = array('Bug', 'Imported Bugzilla Bug'); +$BUGZILLA_PRIORITIES = array('P1', 'P2', 'P3', 'P4', 'P5'); + + +@define('HORDE_BASE', dirname(__FILE__) . '/../..'); +@define('WHUPS_BASE', dirname(__FILE__) . '/..'); + +/* Do CLI checks and environment setup first. */ +require_once HORDE_BASE . '/lib/core.php'; + +/* Make sure no one runs this from the web. */ +if (!Horde_Cli::runningFromCLI()) { + exit("Must be run from the command line\n"); +} + +/* Load the command line environment. */ +Horde_Cli::init(); +$cli =& Horde_Cli::singleton(); + +/* Load the Whups libraries. */ +require_once HORDE_BASE . '/lib/core.php'; + +$registry = Horde_Registry::singleton(); +$registry->pushApp('whups', false); +$conf = &$GLOBALS['conf']; + +require_once WHUPS_BASE . '/lib/Whups.php'; +require_once WHUPS_BASE . '/lib/Driver.php'; + +$GLOBALS['whups_driver'] = Whups_Driver::factory(); +$GLOBALS['whups_driver']->initialise(); + +/* Load the PEAR DB library. We'll use it to read the Bugzilla database. */ +require_once 'DB.php'; + +function sectionHeader($text) +{ + global $cli; + $cli->writeln($cli->bold($text)); +} + +function error($text, $error = null) +{ + global $cli; + + if (is_a($error, 'PEAR_Error')) { + $text .= ' (' . $error->getMessage() . ')'; + } + $cli->message($text, 'cli.error'); +} + +function success($text) +{ + global $cli; + + $cli->message($text, 'cli.success'); +} + +function info($text) +{ + global $cli; + + $cli->message($text, 'cli.message'); +} + +/* Connect to the Bugzilla database. */ +$bugzilla = DB::connect($BUGZILLA_DSN); +if (is_a($bugzilla, 'PEAR_Error')) { + error('Failed to connect to Bugzilla database', $bugzilla); + exit; +} + +// Set DB portability options +switch ($bugzilla->phptype) { +case 'mssql': + $bugzilla->setOption('portability', DB_PORTABILITY_LOWERCASE | DB_PORTABILITY_ERRORS | DB_PORTABILITY_RTRIM); + break; +default: + $bugzilla->setOption('portability', DB_PORTABILITY_LOWERCASE | DB_PORTABILITY_ERRORS); +} + +$bugzilla->setFetchMode(DB_FETCHMODE_ASSOC); + +sectionHeader('Creating Types'); +$type = $whups_driver->addType($BUGZILLA_BUG_TYPE[0], $BUGZILLA_BUG_TYPE[1]); +if (is_a($type, 'PEAR_Error')) { + error("Failed to add '" . $BUGZILLA_BUG_TYPE[0] . "' type", $type); + exit; +} +info("Created '" . $BUGZILLA_BUG_TYPE[0] . "' type"); +$cli->writeln(); + +sectionHeader('Creating States'); +$states = array(); +foreach ($BUGZILLA_STATES as $state) { + $result = $whups_driver->addState($type, $state, "Bugzilla - $state", $state); + if (is_a($result, 'PEAR_Error')) { + error("Failed to add '$state' state", $result); + continue; + } + $states[$state] = $result; + info("Created '$state' state"); +} +$cli->writeln(); + +sectionHeader('Creating Priorities'); +$priorities = array(); +foreach ($BUGZILLA_PRIORITIES as $priority) { + $result = $whups_driver->addPriority($type, $priority, "Bugzilla - $priority"); + if (is_a($result, 'PEAR_Error')) { + error("Failed to add '$priority' priority", $result); + continue; + } + $priorities[$priority] = $result; + info("Created '$priority' priority"); +} +$cli->writeln(); + +/* Create a mapping of products and components. */ +$components = array(); + +sectionHeader('Importing Components'); +$res = $bugzilla->query('select value, program, description from components'); +while ($row = $res->fetchRow()) { + $result = $whups_driver->addQueue($row['value'], $row['description']); + if (is_a($result, 'PEAR_Error')) { + error('Failed to add queue: ' . $row['value'], $result); + continue; + } + + /* Set the queue's parameters. */ + $whups_driver->updateQueue($result, + $row['value'], + $row['description'], + array($type), + false); + + /* Add this component to the map. */ + $components[($row['program'])][] = $row['value']; + + success('Created queue: ' . $row['value']); +} +$cli->writeln(); + +/* Get a mapping of queue IDs to queue names. */ +$queues = $whups_driver->getQueues(); + +/* Maintain a mapping of version names. */ +$versions = array(); + +sectionHeader('Importing Versions'); +$res = $bugzilla->query('select value, program from versions'); +while ($row = $res->fetchRow()) { + /* Bugzilla manages versions on a per-product basis. Whups manages + * versions on a per-queue (i.e., per-component) basis. Add this + * product's versions to each each of its components. */ + foreach ($components[($row['program'])] as $component) { + $queueID = array_search($component, $queues); + + if ($queueID === false) { + error('Unknown queue: ' . $component); + continue; + } + + $result = $whups_driver->addVersion($queueID, $row['value'], '', true, 0); + if (is_a($result, 'PEAR_Error')) { + error('Failed to add version: ' . $row['value'], $result); + continue; + } + + $versions[$queueID][($row['value'])] = $result; + success('Added version: ' . $row['value'] . " ($component)"); + } +} +$cli->writeln(); + +/* Maintain a mapping of Bugzilla userid's to email addresses. */ +$profiles = array(); + +sectionHeader('Loading Profiles'); +$res = $bugzilla->query('select userid, login_name from profiles'); +while ($row = $res->fetchRow()) { + $profiles[($row['userid'])] = $row['login_name']; +} +info('Loaded ' . count($profiles) . ' profiles'); +$cli->writeln(); + +sectionHeader('Importing Bugs'); +$res = $bugzilla->query('select * from bugs'); +while ($row = $res->fetchRow()) { + $info = array(); + + $info['queue'] = array_search($row['component'], $queues); + if ($info['queue'] === false) { + error('Unknown queue: ' . $row['component']); + continue; + } + + $info['version'] = null; + if (isset($versions[($info['queue'])][($row['version'])])) { + $info['version'] = $versions[($info['queue'])][($row['version'])]; + } + + $info['type'] = $type; + + if (!isset($priorities[($row['priority'])])) { + error('Unknown priority: ' . $row['priority']); + continue; + } + $info['priority'] = $priorities[($row['priority'])]; + + if (!isset($states[($row['bug_status'])])) { + error('Unknown state: ' . $row['bug_status']); + continue; + } + $info['state'] = $states[($row['bug_status'])]; + + if (isset($profiles[($row['reporter'])])) { + $info['user_email'] = $profiles[($row['reporter'])]; + } + + $info['summary'] = htmlspecialchars($row['short_desc']); + $info['comment'] = $row['long_desc']; + + $result = $whups_driver->addTicket($info); + if (is_a($result, 'PEAR_Error')) { + error('Failed to add ticket', $result); + continue; + } + + success('Added new ticket ' . $result . ' to ' . $row['component']); +} +$cli->writeln(); diff --git a/whups/scripts/mail-filter.php b/whups/scripts/mail-filter.php new file mode 100755 index 000000000..7ff613b68 --- /dev/null +++ b/whups/scripts/mail-filter.php @@ -0,0 +1,207 @@ +#!/usr/bin/env php + $value) { + $dump .= sprintf("\n%${idlen}d: %s", $id, $value); + } + return $dump; +} + +$whups_authentication = 'none'; +require_once dirname(__FILE__) . '/../lib/base.php'; + +// Make sure no one runs this from the web. +if (!Horde_Cli::runningFromCLI()) { + exit("Must be run from the command line\n"); +} + +// Load the CLI environment - make sure there's no time limit, init some +// variables, etc. +Horde_Cli::init(); +$cli = Horde_Cli::singleton(); + +// Set server name. +$conf['server']['name'] = $conf['mail']['server_name']; +$conf['server']['port'] = $conf['mail']['server_port']; + +// Read command-line parameters. +$info = array(); +$mail = array('host' => 'localhost', + 'pass' => '', + 'port' => 143, + 'protocol' => 'imap/notls', + 'folder' => 'INBOX'); +$from_mail = false; +$options = Console_Getopt::getopt(Console_Getopt::readPHPArgv(), + 'ha:q:Q:gk:', + array('help', + 'default-auth=', + 'queue-name=', 'queue-id=', + 'guess-queue', + 'ticket=', + 'mail-host=', 'mail-user=', + 'mail-pass=', 'mail-port=', + 'mail-protocol=', 'mail-folder=')); +if (is_a($options, 'PEAR_Error')) { + usage(); + $cli->fatal($options->getMessage()); +} + +// Convert options into a hash. This is possible because all options are only +// allowed once. +$opts_hash = array(); +list($opts, $args) = $options; +foreach ($opts as $opt) { + list($optName, $optValue) = $opt; + switch ($optName) { + case 'h': $optName = '--help'; break; + case 'a': $optName = '--default-auth'; break; + case 'k': $optName = '--ticket'; break; + case 'q': $optName = '--queue-name'; break; + case 'Q': $optName = '--queue-id'; break; + case 'g': $optName = '--guess-queue'; break; + } + $opts_hash[$optName] = is_null($optValue) ? true : $optValue; +} + +// Process options in this order because some depend on others. +if (isset($opts_hash['--help'])) { + usage(); + exit; +} +if (isset($opts_hash['--default-auth'])) { + $info['default_auth'] = $opts_hash['--default-auth']; + Horde_Auth::setAuth($info['default_auth'], array()); +} +if (isset($opts_hash['--ticket'])) { + $info['ticket'] = (int)$opts_hash['--ticket']; +} +if (isset($opts_hash['--guess-queue'])) { + $info['guess-queue'] = true; +} +if (isset($opts_hash['--queue-name'])) { + $queues = $whups_driver->getQueues(); + foreach ($queues as $queueId => $queueName) { + if (strcasecmp($queueName, $opts_hash['--queue-name']) == 0) { + $info['queue'] = $queueId; + break; + } + } +} +if (isset($opts_hash['--queue-id'])) { + $queues = $whups_driver->getQueues(); + foreach ($queues as $queueId => $queueName) { + if (strcasecmp($queueId, $opts_hash['--queue-id']) == 0) { + $info['queue'] = $queueId; + break; + } + } +} +foreach (array('host', 'user', 'pass', 'port', 'protocol', 'folder') as $opt) { + if (isset($opts_hash['--mail-' . $opt])) { + $mail[$opt] = $opts_hash['--mail-' . $opt]; + } +} + +// Sanity check options. +if (empty($info['ticket'])) { + if (empty($info['queue'])) { + usage(); + $msg = _("--queue-name or --queue-id must specify a valid and public queue."); + if (isset($queues)) { + $msg .= ' ' . _("Available queues:") . _dump($queues); + } + $cli->fatal($msg); + } +} + +// Set charset to UTF-8 for most flexible conversion between email charset and +// backend charset. +Horde_Nls::setCharsetEnvironment('UTF-8'); + +// Read and parse the message. +if (empty($mail['user'])) { + $result = Whups_Mail::processMail($cli->readStdin(), $info); + if (is_a($result, 'PEAR_Error')) { + $cli->fatal(_("Error processing message:") . ' ' . $result->getMessage() . ' ' . $result->getUserInfo()); + } +} else { + $messages = array(); + $imap = @imap_open(sprintf('{%s:%d/%s}%s', + $mail['host'], + $mail['port'], + $mail['protocol'], + $mail['folder']), + $mail['user'], $mail['pass']); + if (!$imap) { + $cli->fatal(_("Cannot authenticate at mail server:") . ' ' . implode('; ', imap_errors())); + } + $mailbox = imap_search($imap, 'ALL', SE_UID); + if ($mailbox) { + foreach ($mailbox as $uid) { + $message = imap_fetchheader($imap, $uid, FT_UID) + . imap_body($imap, $uid, FT_UID); + $result = Whups_Mail::processMail($message, $info); + if (is_a($result, 'PEAR_Error')) { + $cli->message(_("Error processing message:") . ' ' . $result->getMessage() . ' ' . $result->getUserInfo(), 'cli.error'); + } else { + imap_delete($imap, $uid, FT_UID); + } + } + } + imap_expunge($imap); + imap_close($imap); +} + +exit(0); diff --git a/whups/scripts/obliterate.php b/whups/scripts/obliterate.php new file mode 100755 index 000000000..e4abcd8e2 --- /dev/null +++ b/whups/scripts/obliterate.php @@ -0,0 +1,73 @@ +#!/usr/bin/php + + */ +@define('HORDE_BASE', dirname(__FILE__) . '/../..'); +@define('WHUPS_BASE', dirname(__FILE__) . '/..'); + +/* Do CLI checks and environment setup first. */ +require_once HORDE_BASE . '/lib/core.php'; + +/* Make sure no one runs this from the web. */ +if (!Horde_Cli::runningFromCLI()) { + exit("Must be run from the command line\n"); +} + +/* Load the command line environment. */ +Horde_Cli::init(); +$cli = &Horde_Cli::singleton(); + +$confirm = $cli->prompt('Are you sure you want to obliterate all Whups data?', + array('n' => 'No', 'y' => 'Yes')); +$cli->writeln(); +if ($confirm !== 'y') { + exit; +} + +/* Load the Whups libraries. */ +require_once HORDE_BASE . '/lib/core.php'; + +$registry = Horde_Registry::singleton(); +$registry->pushApp('whups', false); +$conf = &$GLOBALS['conf']; + +require_once WHUPS_BASE . '/lib/Whups.php'; +require_once WHUPS_BASE . '/lib/Driver.php'; + +$GLOBALS['whups_driver'] = Whups_Driver::factory(); +$GLOBALS['whups_driver']->initialise(); + +$cli->writeln($cli->bold('Obliterating queues')); +$queues = $whups_driver->getQueues(); +foreach ($queues as $queue_id => $queue_name) { + $cli->message("Deleting queue: $queue_name"); + $whups_driver->deleteQueue($queue_id); +} +$cli->writeln(); + +$cli->writeln($cli->bold('Obliterating types')); +$types = $whups_driver->getAllTypes(); +foreach ($types as $type_id => $type_name) { + $cli->message("Deleting type: $type_name"); + $whups_driver->deleteType($type_id); +} +$cli->writeln(); + +$cli->writeln($cli->bold('Obliterating tickets')); +$tickets = $whups_driver->_getAll('select ticket_id from whups_tickets'); +foreach ($tickets as $ticket) { + $info = array('id' => $ticket['ticket_id']); + $cli->message('Deleting ticket: ' . $info['id']); + $whups_driver->deleteTicket($info); +} +$cli->writeln(); diff --git a/whups/scripts/reminders.php b/whups/scripts/reminders.php new file mode 100755 index 000000000..777cd2dee --- /dev/null +++ b/whups/scripts/reminders.php @@ -0,0 +1,35 @@ +#!/usr/bin/env php + + */ + +// Do CLI checks and environment setup first. +require_once dirname(__FILE__) . '/../../lib/core.php'; + +// Make sure no one runs this from the web. +if (!Horde_Cli::runningFromCLI()) { + exit("Must be run from the command line\n"); +} + +// Load the CLI environment - make sure there's no time limit, init +// some variables, etc. +Horde_Cli::init(); + +// Include needed libraries. +$whups_authentication = 'none'; +require_once dirname(__FILE__) . '/../lib/base.php'; +require_once WHUPS_BASE . '/lib/Scheduler/whups.php'; + +// Get an instance of the Whups scheduler. +$reminder = Horde_Scheduler::unserialize('Horde_Scheduler_whups'); + +// Check for and send reminders. +$reminder->run(); diff --git a/whups/scripts/sql/whups.mssql.sql b/whups/scripts/sql/whups.mssql.sql new file mode 100644 index 000000000..948c4f267 --- /dev/null +++ b/whups/scripts/sql/whups.mssql.sql @@ -0,0 +1,226 @@ +-- +-- $Horde: whups/scripts/sql/whups.mssql.sql,v 1.27 2009/10/20 21:28:28 jan Exp $ +-- +-- Copyright 2001-2005 Robert E. Coyle +-- +-- See the enclosed file LICENSE for license information (BSD). If you +-- did not receive this file, see http://www.horde.org/licenses/bsdl.php. +-- +-- Database definitions for Whups + +CREATE TABLE whups_tickets ( + ticket_id INT NOT NULL, -- unique ticket id + ticket_summary VARCHAR(255), -- summary of the ticket + user_id_requester VARCHAR(255) NOT NULL, -- user id of the creator of this ticket + queue_id INT NOT NULL, -- queue id that this ticket refers to + version_id INT, -- version id that this ticket refers to + type_id INT NOT NULL, -- id into the type table, describing the type of ticket + state_id INT NOT NULL, -- state of this ticket, meaning depends on the type of the ticket + priority_id INT NOT NULL, -- priority, meaning depends on the type of the ticket + ticket_timestamp INT NOT NULL, -- redundant but useful, mirrored in the comment and log + ticket_due INT, -- optional ticket due date + date_updated INT, -- date of last update + date_assigned INT, -- date of assignment + date_resolved INT, -- date of resolving +-- + PRIMARY KEY (ticket_id) +); +CREATE INDEX whups_ticket_queue_idx ON whups_tickets (queue_id); +CREATE INDEX whups_ticket_state_idx ON whups_tickets (state_id); +CREATE INDEX whups_ticket_requester_idx ON whups_tickets (user_id_requester); +CREATE INDEX whups_ticket_version_idx ON whups_tickets (version_id); +CREATE INDEX whups_ticket_priority_idx ON whups_tickets (priority_id); + +CREATE TABLE whups_ticket_owners ( + ticket_id INT NOT NULL, + ticket_owner VARCHAR(255) NOT NULL +-- + PRIMARY KEY (ticket_id, ticket_owner) +); +CREATE INDEX whups_ticket_owner_ticket_idx ON whups_ticket_owners (ticket_id); +CREATE INDEX whups_ticket_owner_owner_idx ON whups_ticket_owners (ticket_owner); + +CREATE TABLE whups_guests ( + guest_id VARCHAR(255) NOT NULL, + guest_email VARCHAR(255) NOT NULL, +-- + PRIMARY KEY (guest_id) +); + +CREATE TABLE whups_queues ( + queue_id INT NOT NULL, + queue_name VARCHAR(64) NOT NULL, + queue_description VARCHAR(255), + queue_versioned SMALLINT DEFAULT 0 NOT NULL, + queue_slug VARCHAR(64), + queue_email VARCHAR(64), +-- + PRIMARY KEY (queue_id) +); + +CREATE TABLE whups_queues_users ( + queue_id INT NOT NULL, + user_uid VARCHAR(250) NOT NULL, +-- + PRIMARY KEY (queue_id, user_uid) +); + +CREATE TABLE whups_types ( + type_id INT NOT NULL, + type_name VARCHAR(64) NOT NULL, + type_description VARCHAR(255), +-- + PRIMARY KEY (type_id) +); + +CREATE TABLE whups_types_queues ( + type_id INT NOT NULL, + queue_id INT NOT NULL, + type_default SMALLINT DEFAULT 0 NOT NULL +); +CREATE INDEX whups_type_queue_idx ON whups_types_queues (queue_id, type_id); + +CREATE TABLE whups_states ( + state_id INT NOT NULL, + type_id INT NOT NULL, + state_name VARCHAR(64) NOT NULL, + state_description VARCHAR(255), + state_category VARCHAR(16), + state_default SMALLINT DEFAULT 0 NOT NULL, +-- + PRIMARY KEY (state_id) +); +CREATE INDEX whups_state_type_idx ON whups_states (type_id); +CREATE INDEX whups_state_category_idx ON whups_states (state_category); + +CREATE TABLE whups_replies ( + type_id INT NOT NULL, + reply_id INT NOT NULL, + reply_name VARCHAR(255) NOT NULL, + reply_text VARCHAR(MAX) NOT NULL, +-- + PRIMARY KEY (reply_id) +); +CREATE INDEX whups_reply_type_idx ON whups_replies (type_id); +CREATE INDEX whups_reply_name_idx ON whups_replies (reply_name); + +CREATE TABLE whups_attributes_desc ( + attribute_id INT NOT NULL, + type_id INT NOT NULL, + attribute_name VARCHAR(64) NOT NULL, + attribute_description VARCHAR(255), + attribute_type VARCHAR(255) DEFAULT 'text' NOT NULL, + attribute_params VARCHAR(MAX), + attribute_required SMALLINT, +-- + PRIMARY KEY (attribute_id) +); + +CREATE TABLE whups_attributes ( + ticket_id INT NOT NULL, + attribute_id INT NOT NULL, + attribute_value VARCHAR(255) +); + +CREATE TABLE whups_comments ( + comment_id INT NOT NULL, + ticket_id INT NOT NULL, + user_id_creator VARCHAR(255) NOT NULL, + comment_text VARCHAR(MAX), + comment_timestamp INT, +-- + PRIMARY KEY (comment_id) +); +CREATE INDEX whups_comment_ticket_idx ON whups_comments (ticket_id); + +CREATE TABLE whups_logs ( + log_id INT NOT NULL, + transaction_id INT NOT NULL, + ticket_id INT NOT NULL, + log_timestamp INT NOT NULL, + log_type VARCHAR(255) NOT NULL, + log_value VARCHAR(255), + log_value_num INT, + user_id VARCHAR(255) NOT NULL, +-- + PRIMARY KEY (log_id) +); + +CREATE INDEX whups_log_transaction_idx ON whups_logs (transaction_id); +CREATE INDEX whups_log_ticket_id_idx ON whups_logs (ticket_id); +CREATE INDEX whups_log_timestamp_idx ON whups_logs (log_timestamp); + +CREATE TABLE whups_priorities ( + priority_id INT NOT NULL, + type_id INT NOT NULL, + priority_name VARCHAR(64), + priority_description VARCHAR(255), + priority_default SMALLINT DEFAULT 0 NOT NULL, +-- + PRIMARY KEY (priority_id) +); + +CREATE TABLE whups_versions ( + version_id INT NOT NULL, + queue_id INT NOT NULL, + version_name VARCHAR(64), + version_description VARCHAR(255), + version_active INT DEFAULT 1, +-- + PRIMARY KEY (version_id) +); +CREATE INDEX whups_versions_active_idx ON whups_versions (version_active); + +CREATE TABLE whups_ticket_listeners ( + ticket_id INT NOT NULL, + user_uid VARCHAR(255) NOT NULL +); +CREATE INDEX whups_ticket_listeners_ticket_idx ON whups_ticket_listeners (ticket_id); + +CREATE TABLE whups_queries ( + query_id INT NOT NULL, + query_parameters VARCHAR(MAX), + query_object VARCHAR(MAX), +-- + PRIMARY KEY (query_id) +); + +CREATE TABLE whups_shares ( + share_id INT NOT NULL, + share_name VARCHAR(255) NOT NULL, + share_owner VARCHAR(255) NOT NULL, + share_flags SMALLINT DEFAULT 0 NOT NULL, + perm_creator SMALLINT DEFAULT 0 NOT NULL, + perm_default SMALLINT DEFAULT 0 NOT NULL, + perm_guest SMALLINT DEFAULT 0 NOT NULL, + attribute_name VARCHAR(255) NOT NULL, + attribute_slug VARCHAR(255), +-- + PRIMARY KEY (share_id) +); + +CREATE INDEX whups_shares_share_name_idx ON whups_shares (share_name); +CREATE INDEX whups_shares_share_owner_idx ON whups_shares (share_owner); +CREATE INDEX whups_shares_perm_creator_idx ON whups_shares (perm_creator); +CREATE INDEX whups_shares_perm_default_idx ON whups_shares (perm_default); +CREATE INDEX whups_shares_perm_guest_idx ON whups_shares (perm_guest); + +CREATE TABLE whups_shares_groups ( + share_id INT NOT NULL, + group_uid VARCHAR(255) NOT NULL, + perm SMALLINT NOT NULL +); + +CREATE INDEX whups_shares_groups_share_id_idx ON whups_shares_groups (share_id); +CREATE INDEX whups_shares_groups_group_uid_idx ON whups_shares_groups (group_uid); +CREATE INDEX whups_shares_groups_perm_idx ON whups_shares_groups (perm); + +CREATE TABLE whups_shares_users ( + share_id INT NOT NULL, + user_uid VARCHAR(255) NOT NULL, + perm SMALLINT NOT NULL +); + +CREATE INDEX whups_shares_users_share_id_idx ON whups_shares_users (share_id); +CREATE INDEX whups_shares_users_user_uid_idx ON whups_shares_users (user_uid); +CREATE INDEX whups_shares_users_perm_idx ON whups_shares_users (perm); diff --git a/whups/scripts/sql/whups.oci8.sql b/whups/scripts/sql/whups.oci8.sql new file mode 100644 index 000000000..5824e24f8 --- /dev/null +++ b/whups/scripts/sql/whups.oci8.sql @@ -0,0 +1,226 @@ +-- +-- $Horde: whups/scripts/sql/whups.oci8.sql,v 1.28 2009/10/20 21:28:28 jan Exp $ +-- +-- Copyright 2001-2005 Robert E. Coyle +-- +-- See the enclosed file LICENSE for license information (BSD). If you +-- did not receive this file, see http://www.horde.org/licenses/bsdl.php. +-- +-- Database definitions for Whups + +CREATE TABLE whups_tickets ( + ticket_id NUMBER(16) NOT NULL, -- unique ticket id + ticket_summary VARCHAR2(255), -- summary of the ticket + user_id_requester VARCHAR2(255) NOT NULL, -- user id of the creator of this ticket + queue_id NUMBER(16) NOT NULL, -- queue id that this ticket refers to + version_id NUMBER(16), -- version id that this ticket refers to + type_id NUMBER(16) NOT NULL, -- id into the type table, describing the type of ticket + state_id NUMBER(16) NOT NULL, -- state of this ticket, meaning depends on the type of the ticket + priority_id NUMBER(16) NOT NULL, -- priority, meaning depends on the type of the ticket + ticket_timestamp NUMBER(16) NOT NULL, -- redundant but useful, mirrored in the comment and log + ticket_due NUMBER(16), -- optional ticket due date + date_updated NUMBER(16), -- date of last update + date_assigned NUMBER(16), -- date of assignment + date_resolved NUMBER(16), -- date of resolving +-- + PRIMARY KEY (ticket_id) +); +CREATE INDEX whups_ticket_queue_idx ON whups_tickets (queue_id); +CREATE INDEX whups_ticket_state_idx ON whups_tickets (state_id); +CREATE INDEX whups_ticket_requester_idx ON whups_tickets (user_id_requester); +CREATE INDEX whups_ticket_version_idx ON whups_tickets (version_id); +CREATE INDEX whups_ticket_priority_idx ON whups_tickets (priority_id); + +CREATE TABLE whups_ticket_owners ( + ticket_id NUMBER(16) NOT NULL, + ticket_owner VARCHAR2(255) NOT NULL +-- + PRIMARY KEY (ticket_id, ticket_owner) +); +CREATE INDEX whups_ticket_owner_ticket_idx ON whups_ticket_owners (ticket_id); +CREATE INDEX whups_ticket_owner_owner_idx ON whups_ticket_owners (ticket_owner); + +CREATE TABLE whups_guests ( + guest_id VARCHAR2(255) NOT NULL, + guest_email VARCHAR2(255) NOT NULL, +-- + PRIMARY KEY (guest_id) +); + +CREATE TABLE whups_queues ( + queue_id NUMBER(16) NOT NULL, + queue_name VARCHAR2(64) NOT NULL, + queue_description VARCHAR2(255), + queue_versioned NUMBER(1) DEFAULT 0 NOT NULL, + queue_slug VARCHAR2(64), + queue_email VARCHAR2(64), +-- + PRIMARY KEY (queue_id) +); + +CREATE TABLE whups_queues_users ( + queue_id NUMBER(16) NOT NULL, + user_uid VARCHAR2(255) NOT NULL, +-- + PRIMARY KEY (queue_id, user_uid) +); + +CREATE TABLE whups_types ( + type_id NUMBER(16) NOT NULL, + type_name VARCHAR2(64) NOT NULL, + type_description VARCHAR2(255), +-- + PRIMARY KEY (type_id) +); + +CREATE TABLE whups_types_queues ( + type_id NUMBER(16) NOT NULL, + queue_id NUMBER(16) NOT NULL, + type_default NUMBER(1) DEFAULT 0 NOT NULL +); +CREATE INDEX whups_type_queue_idx ON whups_types_queues (queue_id, type_id); + +CREATE TABLE whups_states ( + state_id NUMBER(16) NOT NULL, + type_id NUMBER(16) NOT NULL, + state_name VARCHAR2(64) NOT NULL, + state_description VARCHAR2(255), + state_category VARCHAR2(16), + state_default NUMBER(1) DEFAULT 0 NOT NULL, +-- + PRIMARY KEY (state_id) +); +CREATE INDEX whups_state_type_idx ON whups_states (type_id); +CREATE INDEX whups_state_category_idx ON whups_states (state_category); + +CREATE TABLE whups_replies ( + type_id NUMBER(16) NOT NULL, + reply_id NUMBER(16) NOT NULL, + reply_name VARCHAR2(255) NOT NULL, + reply_text CLOB NOT NULL, +-- + PRIMARY KEY (reply_id) +); +CREATE INDEX whups_reply_type_idx ON whups_replies (type_id); +CREATE INDEX whups_reply_name_idx ON whups_replies (reply_name); + +CREATE TABLE whups_attributes_desc ( + attribute_id NUMBER(16) NOT NULL, + type_id NUMBER(16) NOT NULL, + attribute_name VARCHAR2(64) NOT NULL, + attribute_description VARCHAR2(255), + attribute_type VARCHAR2(255) DEFAULT 'text' NOT NULL, + attribute_params CLOB, + attribute_required NUMBER(8), +-- + PRIMARY KEY (attribute_id) +); + +CREATE TABLE whups_attributes ( + ticket_id NUMBER(16) NOT NULL, + attribute_id NUMBER(16) NOT NULL, + attribute_value VARCHAR2(255) +); + +CREATE TABLE whups_comments ( + comment_id NUMBER(16) NOT NULL, + ticket_id NUMBER(16) NOT NULL, + user_id_creator VARCHAR2(255) NOT NULL, + comment_text CLOB, + comment_timestamp NUMBER(16), +-- + PRIMARY KEY (comment_id) +); +CREATE INDEX whups_comment_ticket_idx ON whups_comments (ticket_id); + +CREATE TABLE whups_logs ( + log_id NUMBER(16) NOT NULL, + transaction_id NUMBER(16) NOT NULL, + ticket_id NUMBER(16) NOT NULL, + log_timestamp NUMBER(16) NOT NULL, + log_type VARCHAR2(255) NOT NULL, + log_value VARCHAR2(255), + log_value_num NUMBER(16), + user_id VARCHAR2(255) NOT NULL, +-- + PRIMARY KEY (log_id) +); + +CREATE INDEX whups_log_transaction_idx ON whups_logs (transaction_id); +CREATE INDEX whups_log_ticket_id_idx ON whups_logs (ticket_id); +CREATE INDEX whups_log_timestamp_idx ON whups_logs (log_timestamp); + +CREATE TABLE whups_priorities ( + priority_id NUMBER(16) NOT NULL, + type_id NUMBER(16) NOT NULL, + priority_name VARCHAR2(64), + priority_description VARCHAR2(255), + priority_default NUMBER(1) DEFAULT 0 NOT NULL, +-- + PRIMARY KEY (priority_id) +); + +CREATE TABLE whups_versions ( + version_id NUMBER(16) NOT NULL, + queue_id NUMBER(16) NOT NULL, + version_name VARCHAR2(64), + version_description VARCHAR2(255), + version_active NUMBER(1) DEFAULT 1, +-- + PRIMARY KEY (version_id) +); +CREATE INDEX whups_versions_active_idx ON whups_versions (version_active); + +CREATE TABLE whups_ticket_listeners ( + ticket_id NUMBER(16) NOT NULL, + user_uid VARCHAR2(255) NOT NULL +); +CREATE INDEX whups_ticket_listeners_ticket_idx ON whups_ticket_listeners (ticket_id); + +CREATE TABLE whups_queries ( + query_id NUMBER(16) NOT NULL, + query_parameters CLOB, + query_object CLOB, +-- + PRIMARY KEY (query_id) +); + +CREATE TABLE whups_shares ( + share_id NUMBER(16) NOT NULL, + share_name VARCHAR2(255) NOT NULL, + share_owner VARCHAR2(255) NOT NULL, + share_flags NUMBER(8) DEFAULT 0 NOT NULL, + perm_creator NUMBER(8) DEFAULT 0 NOT NULL, + perm_default NUMBER(8) DEFAULT 0 NOT NULL, + perm_guest NUMBER(8) DEFAULT 0 NOT NULL, + attribute_name VARCHAR2(255) NOT NULL, + attribute_slug VARCHAR2(255), +-- + PRIMARY KEY (share_id) +); + +CREATE INDEX whups_shares_share_name_idx ON whups_shares (share_name); +CREATE INDEX whups_shares_share_owner_idx ON whups_shares (share_owner); +CREATE INDEX whups_shares_perm_creator_idx ON whups_shares (perm_creator); +CREATE INDEX whups_shares_perm_default_idx ON whups_shares (perm_default); +CREATE INDEX whups_shares_perm_guest_idx ON whups_shares (perm_guest); + +CREATE TABLE whups_shares_groups ( + share_id NUMBER(16) NOT NULL, + group_uid VARCHAR2(255) NOT NULL, + perm NUMBER(8) NOT NULL +); + +CREATE INDEX whups_shares_groups_share_id_idx ON whups_shares_groups (share_id); +CREATE INDEX whups_shares_groups_group_uid_idx ON whups_shares_groups (group_uid); +CREATE INDEX whups_shares_groups_perm_idx ON whups_shares_groups (perm); + +CREATE TABLE whups_shares_users ( + share_id NUMBER(16) NOT NULL, + user_uid VARCHAR2(255) NOT NULL, + perm NUMBER(8) NOT NULL +); + +CREATE INDEX whups_shares_users_share_id_idx ON whups_shares_users (share_id); +CREATE INDEX whups_shares_users_user_uid_idx ON whups_shares_users (user_uid); +CREATE INDEX whups_shares_users_perm_idx ON whups_shares_users (perm); diff --git a/whups/scripts/sql/whups.sql b/whups/scripts/sql/whups.sql new file mode 100644 index 000000000..a910f512e --- /dev/null +++ b/whups/scripts/sql/whups.sql @@ -0,0 +1,226 @@ +-- +-- $Horde: whups/scripts/sql/whups.sql,v 1.32 2009/10/20 21:28:28 jan Exp $ +-- +-- Copyright 2001-2005 Robert E. Coyle +-- +-- See the enclosed file LICENSE for license information (BSD). If you +-- did not receive this file, see http://www.horde.org/licenses/bsdl.php. +-- +-- Database definitions for Whups + +CREATE TABLE whups_tickets ( + ticket_id INT NOT NULL, -- unique ticket id + ticket_summary VARCHAR(255), -- summary of the ticket + user_id_requester VARCHAR(255) NOT NULL, -- user id of the creator of this ticket + queue_id INT NOT NULL, -- queue id that this ticket refers to + version_id INT, -- version id that this ticket refers to + type_id INT NOT NULL, -- id into the type table, describing the type of ticket + state_id INT NOT NULL, -- state of this ticket, meaning depends on the type of the ticket + priority_id INT NOT NULL, -- priority, meaning depends on the type of the ticket + ticket_timestamp INT NOT NULL, -- redundant but useful, mirrored in the comment and log + ticket_due INT, -- optional ticket due date + date_updated INT, -- date of last update + date_assigned INT, -- date of assignment + date_resolved INT, -- date of resolving +-- + PRIMARY KEY (ticket_id) +); +CREATE INDEX whups_ticket_queue_idx ON whups_tickets (queue_id); +CREATE INDEX whups_ticket_state_idx ON whups_tickets (state_id); +CREATE INDEX whups_ticket_requester_idx ON whups_tickets (user_id_requester); +CREATE INDEX whups_ticket_version_idx ON whups_tickets (version_id); +CREATE INDEX whups_ticket_priority_idx ON whups_tickets (priority_id); + +CREATE TABLE whups_ticket_owners ( + ticket_id INT NOT NULL, + ticket_owner VARCHAR(255) NOT NULL, +-- + PRIMARY KEY (ticket_id, ticket_owner) +); +CREATE INDEX whups_ticket_owner_ticket_idx ON whups_ticket_owners (ticket_id); +CREATE INDEX whups_ticket_owner_owner_idx ON whups_ticket_owners (ticket_owner); + +CREATE TABLE whups_guests ( + guest_id VARCHAR(255) NOT NULL, + guest_email VARCHAR(255) NOT NULL, +-- + PRIMARY KEY (guest_id) +); + +CREATE TABLE whups_queues ( + queue_id INT NOT NULL, + queue_name VARCHAR(64) NOT NULL, + queue_description VARCHAR(255), + queue_versioned SMALLINT DEFAULT 0 NOT NULL, + queue_slug VARCHAR(64), + queue_email VARCHAR(64), +-- + PRIMARY KEY (queue_id) +); + +CREATE TABLE whups_queues_users ( + queue_id INT NOT NULL, + user_uid VARCHAR(250) NOT NULL, +-- + PRIMARY KEY (queue_id, user_uid) +); + +CREATE TABLE whups_types ( + type_id INT NOT NULL, + type_name VARCHAR(64) NOT NULL, + type_description VARCHAR(255), +-- + PRIMARY KEY (type_id) +); + +CREATE TABLE whups_types_queues ( + type_id INT NOT NULL, + queue_id INT NOT NULL, + type_default SMALLINT DEFAULT 0 NOT NULL +); +CREATE INDEX whups_type_queue_idx ON whups_types_queues (queue_id, type_id); + +CREATE TABLE whups_states ( + state_id INT NOT NULL, + type_id INT NOT NULL, + state_name VARCHAR(64) NOT NULL, + state_description VARCHAR(255), + state_category VARCHAR(16), + state_default SMALLINT DEFAULT 0 NOT NULL, +-- + PRIMARY KEY (state_id) +); +CREATE INDEX whups_state_type_idx ON whups_states (type_id); +CREATE INDEX whups_state_category_idx ON whups_states (state_category); + +CREATE TABLE whups_replies ( + type_id INT NOT NULL, + reply_id INT NOT NULL, + reply_name VARCHAR(255) NOT NULL, + reply_text TEXT NOT NULL, +-- + PRIMARY KEY (reply_id) +); +CREATE INDEX whups_reply_type_idx ON whups_replies (type_id); +CREATE INDEX whups_reply_name_idx ON whups_replies (reply_name); + +CREATE TABLE whups_attributes_desc ( + attribute_id INT NOT NULL, + type_id INT NOT NULL, + attribute_name VARCHAR(64) NOT NULL, + attribute_description VARCHAR(255), + attribute_type VARCHAR(255) DEFAULT 'text' NOT NULL, + attribute_params TEXT, + attribute_required SMALLINT, +-- + PRIMARY KEY (attribute_id) +); + +CREATE TABLE whups_attributes ( + ticket_id INT NOT NULL, + attribute_id INT NOT NULL, + attribute_value VARCHAR(255) +); + +CREATE TABLE whups_comments ( + comment_id INT NOT NULL, + ticket_id INT NOT NULL, + user_id_creator VARCHAR(255) NOT NULL, + comment_text TEXT, + comment_timestamp INT, +-- + PRIMARY KEY (comment_id) +); +CREATE INDEX whups_comment_ticket_idx ON whups_comments (ticket_id); + +CREATE TABLE whups_logs ( + log_id INT NOT NULL, + transaction_id INT NOT NULL, + ticket_id INT NOT NULL, + log_timestamp INT NOT NULL, + log_type VARCHAR(255) NOT NULL, + log_value VARCHAR(255), + log_value_num INT, + user_id VARCHAR(255) NOT NULL, +-- + PRIMARY KEY (log_id) +); +CREATE INDEX whups_log_transaction_idx ON whups_logs (transaction_id); +CREATE INDEX whups_log_ticket_id_idx ON whups_logs (ticket_id); +CREATE INDEX whups_log_timestamp_idx ON whups_logs (log_timestamp); + +CREATE TABLE whups_priorities ( + priority_id INT NOT NULL, + type_id INT NOT NULL, + priority_name VARCHAR(64), + priority_description VARCHAR(255), + priority_default SMALLINT DEFAULT 0 NOT NULL, +-- + PRIMARY KEY (priority_id) +); +CREATE INDEX whups_priority_type_idx ON whups_priorities (type_id); + +CREATE TABLE whups_versions ( + version_id INT NOT NULL, + queue_id INT NOT NULL, + version_name VARCHAR(64), + version_description VARCHAR(255), + version_active INT DEFAULT 1, +-- + PRIMARY KEY (version_id) +); +CREATE INDEX whups_versions_active_idx ON whups_versions (version_active); + +CREATE TABLE whups_ticket_listeners ( + ticket_id INT NOT NULL, + user_uid VARCHAR(255) NOT NULL +); +CREATE INDEX whups_ticket_listeners_ticket_idx ON whups_ticket_listeners (ticket_id); + +CREATE TABLE whups_queries ( + query_id INT NOT NULL, + query_parameters TEXT, + query_object TEXT, +-- + PRIMARY KEY (query_id) +); + +CREATE TABLE whups_shares ( + share_id INT NOT NULL, + share_name VARCHAR(255) NOT NULL, + share_owner VARCHAR(255) NOT NULL, + share_flags SMALLINT DEFAULT 0 NOT NULL, + perm_creator SMALLINT DEFAULT 0 NOT NULL, + perm_default SMALLINT DEFAULT 0 NOT NULL, + perm_guest SMALLINT DEFAULT 0 NOT NULL, + attribute_name VARCHAR(255) NOT NULL, + attribute_slug VARCHAR(255), +-- + PRIMARY KEY (share_id) +); + +CREATE INDEX whups_shares_share_name_idx ON whups_shares (share_name); +CREATE INDEX whups_shares_share_owner_idx ON whups_shares (share_owner); +CREATE INDEX whups_shares_perm_creator_idx ON whups_shares (perm_creator); +CREATE INDEX whups_shares_perm_default_idx ON whups_shares (perm_default); +CREATE INDEX whups_shares_perm_guest_idx ON whups_shares (perm_guest); + +CREATE TABLE whups_shares_groups ( + share_id INT NOT NULL, + group_uid VARCHAR(255) NOT NULL, + perm SMALLINT NOT NULL +); + +CREATE INDEX whups_shares_groups_share_id_idx ON whups_shares_groups (share_id); +CREATE INDEX whups_shares_groups_group_uid_idx ON whups_shares_groups (group_uid); +CREATE INDEX whups_shares_groups_perm_idx ON whups_shares_groups (perm); + +CREATE TABLE whups_shares_users ( + share_id INT NOT NULL, + user_uid VARCHAR(255) NOT NULL, + perm SMALLINT NOT NULL +); + +CREATE INDEX whups_shares_users_share_id_idx ON whups_shares_users (share_id); +CREATE INDEX whups_shares_users_user_uid_idx ON whups_shares_users (user_uid); +CREATE INDEX whups_shares_users_perm_idx ON whups_shares_users (perm); diff --git a/whups/scripts/sql/whups.xml b/whups/scripts/sql/whups.xml new file mode 100644 index 000000000..291106f89 --- /dev/null +++ b/whups/scripts/sql/whups.xml @@ -0,0 +1,1368 @@ + + + + name + false + false + + + + whups_attributes + + + + + ticket_id + integer + 0 + true + 4 + + + + attribute_id + integer + 0 + true + 4 + + + + attribute_value + text + + false + 255 + + + + +
+ + + + whups_attributes_desc + + + + + attribute_id + integer + 0 + true + 4 + + + + type_id + integer + 0 + true + 4 + + + + attribute_name + text + + true + 64 + + + + attribute_description + text + + false + 255 + + + + attribute_type + text + text + false + 255 + + + + attribute_required + integer + + false + 4 + + + + attribute_params + text + + false + + + + whups_attributes_desc_pKey + true + + attribute_id + ascending + + + + + +
+ + + + whups_comments + + + + + comment_id + integer + 0 + true + 4 + + + + ticket_id + integer + 0 + true + 4 + + + + user_id_creator + text + + true + 255 + + + + comment_text + text + + false + + + + comment_timestamp + integer + + false + 4 + + + + whups_comment_ticket + + ticket_id + ascending + + + + + whups_comments_pKey + true + + comment_id + ascending + + + + + +
+ + + + whups_guests + + + + + guest_id + text + + true + 255 + + + + guest_email + text + + true + 255 + + + + whups_guests_pKey + true + + guest_id + ascending + + + + + +
+ + + + whups_logs + + + + + ticket_id + integer + 0 + true + 4 + + + + log_timestamp + integer + 0 + true + 4 + + + + user_id + text + + true + 255 + + + + log_type + text + + false + 255 + + + + log_value + text + + false + 255 + + + + log_id + integer + + false + 4 + + + + transaction_id + integer + + false + 4 + + + + log_value_num + integer + + false + 4 + + + + log_ticket_id + + ticket_id + ascending + + + + + log_timestamp + + log_timestamp + ascending + + + + + +
+ + + + whups_priorities + + + + + priority_id + integer + 0 + true + 4 + + + + type_id + integer + 0 + true + 4 + + + + priority_name + text + + false + 64 + + + + priority_description + text + + false + 255 + + + + priority_default + integer + 0 + true + 2 + + + + whups_priority_type + + type_id + ascending + + + + + whups_priorities_pKey + true + + priority_id + ascending + + + + + +
+ + + + whups_queries + + + + + query_id + integer + + true + 4 + + + + query_parameters + text + + false + + + + query_object + text + + false + + + + whups_queries_pKey + true + + query_id + ascending + + + + + +
+ + + + whups_queues + + + + + queue_id + integer + 0 + true + 4 + + + + queue_name + text + + true + 64 + + + + queue_description + text + + false + 255 + + + + queue_versioned + integer + 0 + true + 2 + + + + queue_slug + text + + false + 64 + + + + queue_email + text + + false + 64 + + + + whups_queue_slug + + queue_slug + ascending + + + + + whups_queues_pKey + true + + queue_id + ascending + + + + + +
+ + + + whups_queues_users + + + + + queue_id + integer + 0 + true + 4 + + + + user_uid + text + + true + 250 + + + + whups_queues_users_pKey + true + + queue_id + ascending + + + user_uid + ascending + + + + + +
+ + + + whups_replies + + + + + type_id + integer + + true + 4 + + + + reply_id + integer + + true + 4 + + + + reply_name + text + + true + 255 + + + + reply_text + text + + true + + + + whups_reply_type + + type_id + ascending + + + + + whups_reply_name + + reply_name + ascending + + + + + whups_replies_pKey + true + + reply_id + ascending + + + + + +
+ + + + whups_shares + + + + + share_id + integer + + true + 4 + + + + share_name + text + + true + 255 + + + + share_owner + text + + true + 32 + + + + share_flags + integer + 0 + true + 2 + + + + perm_creator + integer + 0 + true + 2 + + + + perm_default + integer + 0 + true + 2 + + + + perm_guest + integer + 0 + true + 2 + + + + attribute_name + text + + true + 255 + + + + attribute_slug + text + + false + 255 + + + + whups_shares_share_name + + share_name + ascending + + + + + whups_shares_share_owner + + share_owner + ascending + + + + + whups_shares_perm_creator + + perm_creator + ascending + + + + + whups_shares_perm_default + + perm_default + ascending + + + + + whups_shares_perm_guest + + perm_guest + ascending + + + + + whups_shares_pKey + true + + share_id + ascending + + + + + +
+ + + + whups_shares_groups + + + + + share_id + integer + + true + 4 + + + + group_uid + text + + true + 255 + + + + perm + integer + + true + 2 + + + + whups_shares_groups_share_id + + share_id + ascending + + + + + whups_shares_groups_group_uid + + group_uid + ascending + + + + + whups_shares_groups_perm + + perm + ascending + + + + + +
+ + + + whups_shares_users + + + + + share_id + integer + + true + 4 + + + + user_uid + text + + true + 32 + + + + perm + integer + + true + 2 + + + + whups_shares_users_share_id + + share_id + ascending + + + + + whups_shares_users_user_uid + + user_uid + ascending + + + + + whups_shares_users_perm + + perm + ascending + + + + + +
+ + + + whups_states + + + + + state_id + integer + 0 + true + 4 + + + + type_id + integer + 0 + true + 4 + + + + state_name + text + + true + 64 + + + + state_description + text + + false + 255 + + + + state_category + text + + false + 16 + + + + state_default + integer + 0 + true + 2 + + + + whups_state_type + + type_id + ascending + + + + + whups_state_category + + state_category + ascending + + + + + whups_states_pKey + true + + state_id + ascending + + + + + +
+ + + + whups_ticket_listeners + + + + + ticket_id + integer + + true + 4 + + + + user_uid + text + + true + 255 + + + + whups_ticket_listeners_ticket + + ticket_id + ascending + + + + + +
+ + + + whups_ticket_owners + + + + + ticket_id + integer + 0 + true + 4 + + + + ticket_owner + text + + true + 255 + + + + ticket_id + + ticket_id + ascending + + + + + ticket_owner + + ticket_owner + ascending + + + + + whups_ticket_owner_ticket + + ticket_id + ascending + + + + + whups_ticket_owner_owner + + ticket_owner + ascending + + + + + +
+ + + + whups_tickets + + + + + ticket_id + integer + 0 + true + 4 + + + + ticket_summary + text + + false + 255 + + + + user_id_requester + text + + true + 255 + + + + queue_id + integer + 0 + true + 4 + + + + version_id + integer + + false + 4 + + + + type_id + integer + 0 + true + 4 + + + + state_id + integer + 0 + true + 4 + + + + priority_id + integer + 0 + true + 4 + + + + ticket_timestamp + integer + 0 + true + 4 + + + + ticket_due + integer + + false + 4 + + + + date_updated + integer + + false + 4 + + + + date_assigned + integer + + false + 4 + + + + date_resolved + integer + + false + 4 + + + + whups_ticket_queue + + queue_id + ascending + + + + + whups_ticket_state + + state_id + ascending + + + + + whups_ticket_requester + + user_id_requester + ascending + + + + + whups_ticket_version + + version_id + ascending + + + + + whups_ticket_priority + + priority_id + ascending + + + + + whups_tickets_pKey + true + + ticket_id + ascending + + + + + +
+ + + + whups_types + + + + + type_id + integer + 0 + true + 4 + + + + type_name + text + + true + 64 + + + + type_description + text + + false + 255 + + + + whups_types_pKey + true + + type_id + ascending + + + + + +
+ + + + whups_types_queues + + + + + type_id + integer + 0 + true + 4 + + + + queue_id + integer + 0 + true + 4 + + + + type_default + integer + 0 + true + 2 + + + + whups_type_queue + + queue_id + ascending + + + type_id + ascending + + + + + +
+ + + + whups_users_queries + + + + + user_uid + text + + true + 255 + + + + query_name + text + + false + 255 + + + + query_object + text + + false + + + + +
+ + + + whups_versions + + + + + version_id + integer + + true + 4 + + + + queue_id + integer + + true + 4 + + + + version_name + text + + false + 64 + + + + version_description + text + + false + 255 + + + + version_active + integer + 1 + 1 + + + + whups_versions_pKey + true + + version_id + ascending + + + + + whups_versions_active + + version_active + ascending + + + + + +
+ +
diff --git a/whups/scripts/upgrades/2006-07-12_add_due_date.sql b/whups/scripts/upgrades/2006-07-12_add_due_date.sql new file mode 100644 index 000000000..1775b4bc1 --- /dev/null +++ b/whups/scripts/upgrades/2006-07-12_add_due_date.sql @@ -0,0 +1,6 @@ +-- Script to add due date to whups_tickets table +-- +-- $Horde: whups/scripts/upgrades/2006-07-12_add_due_date.sql,v 1.1 2006/07/19 02:54:31 chuck Exp $ +-- + +ALTER TABLE whups_tickets ADD ticket_due INT; diff --git a/whups/scripts/upgrades/2006-08-04_drop_subjectlist.sql b/whups/scripts/upgrades/2006-08-04_drop_subjectlist.sql new file mode 100644 index 000000000..840c8a995 --- /dev/null +++ b/whups/scripts/upgrades/2006-08-04_drop_subjectlist.sql @@ -0,0 +1,4 @@ +DROP TABLE whups_queues_subjects; +DROP TABLE whups_subjects; +ALTER TABLE whups_queues DROP COLUMN queue_subjectlist; +DROP TABLE whups_subjects_seq; diff --git a/whups/scripts/upgrades/2008-02-27_add_defaults.sql b/whups/scripts/upgrades/2008-02-27_add_defaults.sql new file mode 100644 index 000000000..e2408ae84 --- /dev/null +++ b/whups/scripts/upgrades/2008-02-27_add_defaults.sql @@ -0,0 +1,3 @@ +ALTER TABLE whups_types_queues ADD COLUMN type_default SMALLINT DEFAULT 0 NOT NULL; +ALTER TABLE whups_states ADD COLUMN state_default SMALLINT DEFAULT 0 NOT NULL; +ALTER TABLE whups_priorities ADD COLUMN priority_default SMALLINT DEFAULT 0 NOT NULL; diff --git a/whups/scripts/upgrades/2008-04-29_add_sql_share_tables.sql b/whups/scripts/upgrades/2008-04-29_add_sql_share_tables.sql new file mode 100644 index 000000000..4c6cf070d --- /dev/null +++ b/whups/scripts/upgrades/2008-04-29_add_sql_share_tables.sql @@ -0,0 +1,39 @@ +-- $Horde: whups/scripts/upgrades/2008-04-29_add_sql_share_tables.sql,v 1.3 2009/10/20 21:28:28 jan Exp $ + +CREATE TABLE whups_shares ( + share_id INT NOT NULL, + share_name VARCHAR(255) NOT NULL, + share_owner VARCHAR(255) NOT NULL, + share_flags SMALLINT DEFAULT 0 NOT NULL, + perm_creator SMALLINT DEFAULT 0 NOT NULL, + perm_default SMALLINT DEFAULT 0 NOT NULL, + perm_guest SMALLINT DEFAULT 0 NOT NULL, + attribute_name VARCHAR(255) NOT NULL, + PRIMARY KEY (share_id) +); + +CREATE INDEX whups_shares_share_name_idx ON whups_shares (share_name); +CREATE INDEX whups_shares_share_owner_idx ON whups_shares (share_owner); +CREATE INDEX whups_shares_perm_creator_idx ON whups_shares (perm_creator); +CREATE INDEX whups_shares_perm_default_idx ON whups_shares (perm_default); +CREATE INDEX whups_shares_perm_guest_idx ON whups_shares (perm_guest); + +CREATE TABLE whups_shares_groups ( + share_id INT NOT NULL, + group_uid INT NOT NULL, + perm SMALLINT NOT NULL +); + +CREATE INDEX whups_shares_groups_share_id_idx ON whups_shares_groups (share_id); +CREATE INDEX whups_shares_groups_group_uid_idx ON whups_shares_groups (group_uid); +CREATE INDEX whups_shares_groups_perm_idx ON whups_shares_groups (perm); + +CREATE TABLE whups_shares_users ( + share_id INT NOT NULL, + user_uid VARCHAR(32) NOT NULL, + perm SMALLINT NOT NULL +); + +CREATE INDEX whups_shares_users_share_id_idx ON whups_shares_users (share_id); +CREATE INDEX whups_shares_users_user_uid_idx ON whups_shares_users (user_uid); +CREATE INDEX whups_shares_users_perm_idx ON whups_shares_users (perm); diff --git a/whups/scripts/upgrades/2008-06-11_add_attribute_types.oci8.sql b/whups/scripts/upgrades/2008-06-11_add_attribute_types.oci8.sql new file mode 100644 index 000000000..7138887cb --- /dev/null +++ b/whups/scripts/upgrades/2008-06-11_add_attribute_types.oci8.sql @@ -0,0 +1,7 @@ +ALTER TABLE whups_attributes_desc ADD COLUMN attribute_description_new VARCHAR2(255); +UPDATE whups_attributes_desc SET attribute_description_new = attribute_description; +ALTER TABLE whups_attributes_desc DROP COLUMN attribute_description; +ALTER TABLE whups_attributes_desc RENAME COLUMN attribute_description_new TO attribute_description; +ALTER TABLE whups_attributes_desc ADD COLUMN attribute_type VARCHAR2(255) DEFAULT 'text'; +ALTER TABLE whups_attributes_desc ADD COLUMN attribute_params CLOB; +ALTER TABLE whups_attributes_desc ADD COLUMN attribute_required NUMBER(8); diff --git a/whups/scripts/upgrades/2008-06-11_add_attribute_types.pgsql.sql b/whups/scripts/upgrades/2008-06-11_add_attribute_types.pgsql.sql new file mode 100644 index 000000000..1f9edc3ac --- /dev/null +++ b/whups/scripts/upgrades/2008-06-11_add_attribute_types.pgsql.sql @@ -0,0 +1,14 @@ +BEGIN; +ALTER TABLE whups_attributes_desc ADD COLUMN attribute_description_new VARCHAR(255); +UPDATE whups_attributes_desc SET attribute_description_new = attribute_description; +ALTER TABLE whups_attributes_desc DROP attribute_description; +ALTER TABLE whups_attributes_desc RENAME attribute_description_new TO attribute_description; +COMMIT; + +BEGIN; +ALTER TABLE whups_attributes_desc ADD COLUMN attribute_type VARCHAR(255); +ALTER TABLE whups_attributes_desc ALTER COLUMN attribute_type SET DEFAULT 'text'; +COMMIT; + +ALTER TABLE whups_attributes_desc ADD COLUMN attribute_params TEXT; +ALTER TABLE whups_attributes_desc ADD COLUMN attribute_required SMALLINT; diff --git a/whups/scripts/upgrades/2008-06-11_add_attribute_types.sql b/whups/scripts/upgrades/2008-06-11_add_attribute_types.sql new file mode 100644 index 000000000..78b48f8a1 --- /dev/null +++ b/whups/scripts/upgrades/2008-06-11_add_attribute_types.sql @@ -0,0 +1,4 @@ +ALTER TABLE whups_attributes_desc CHANGE COLUMN attribute_description attribute_description VARCHAR(255); +ALTER TABLE whups_attributes_desc ADD COLUMN attribute_type VARCHAR(255) DEFAULT 'text'; +ALTER TABLE whups_attributes_desc ADD COLUMN attribute_params TEXT; +ALTER TABLE whups_attributes_desc ADD COLUMN attribute_required SMALLINT; diff --git a/whups/scripts/upgrades/2008-06-13_add_queue_emails.sql b/whups/scripts/upgrades/2008-06-13_add_queue_emails.sql new file mode 100644 index 000000000..325b18457 --- /dev/null +++ b/whups/scripts/upgrades/2008-06-13_add_queue_emails.sql @@ -0,0 +1 @@ +ALTER TABLE whups_queues ADD COLUMN queue_email VARCHAR(64); diff --git a/whups/scripts/upgrades/2008-06-17_fix_varchar_lengths.sql b/whups/scripts/upgrades/2008-06-17_fix_varchar_lengths.sql new file mode 100644 index 000000000..48f65288e --- /dev/null +++ b/whups/scripts/upgrades/2008-06-17_fix_varchar_lengths.sql @@ -0,0 +1,2 @@ +ALTER TABLE whups_shares CHANGE share_owner share_owner VARCHAR(255); +ALTER TABLE whups_shares_users CHANGE user_uid user_uid VARCHAR(255); \ No newline at end of file diff --git a/whups/scripts/upgrades/2008-06-24_add_replies.sql b/whups/scripts/upgrades/2008-06-24_add_replies.sql new file mode 100644 index 000000000..b3bb7bdf2 --- /dev/null +++ b/whups/scripts/upgrades/2008-06-24_add_replies.sql @@ -0,0 +1,10 @@ +CREATE TABLE whups_replies ( + type_id INT NOT NULL, + reply_id INT NOT NULL, + reply_name VARCHAR(255) NOT NULL, + reply_text TEXT NOT NULL, +-- + PRIMARY KEY (reply_id) +); +CREATE INDEX whups_reply_type_idx ON whups_replies (type_id); +CREATE INDEX whups_reply_name_idx ON whups_replies (reply_name); diff --git a/whups/scripts/upgrades/2008-07-10_add_query_slugs.sql b/whups/scripts/upgrades/2008-07-10_add_query_slugs.sql new file mode 100644 index 000000000..524762fcd --- /dev/null +++ b/whups/scripts/upgrades/2008-07-10_add_query_slugs.sql @@ -0,0 +1 @@ +ALTER TABLE whups_shares ADD COLUMN attribute_slug VARCHAR(255); diff --git a/whups/scripts/upgrades/2008-09-23_fix_group_uid.sql b/whups/scripts/upgrades/2008-09-23_fix_group_uid.sql new file mode 100644 index 000000000..410d9923c --- /dev/null +++ b/whups/scripts/upgrades/2008-09-23_fix_group_uid.sql @@ -0,0 +1,2 @@ +ALTER TABLE whups_shares_groups CHANGE group_uid group_uid VARCHAR(255); + diff --git a/whups/scripts/upgrades/2009-09-07_add_version_active.pgsql.sql b/whups/scripts/upgrades/2009-09-07_add_version_active.pgsql.sql new file mode 100644 index 000000000..6de2a2ffc --- /dev/null +++ b/whups/scripts/upgrades/2009-09-07_add_version_active.pgsql.sql @@ -0,0 +1,4 @@ +ALTER TABLE whups_versions ADD COLUMN version_active INT; +UPDATE whups_versions SET version_active = 1; +ALTER TABLE whups_versions ALTER COLUMN version_active SET DEFAULT 1; +CREATE INDEX whups_versions_active_idx ON whups_versions (version_active); diff --git a/whups/scripts/upgrades/2009-09-07_add_version_active.sql b/whups/scripts/upgrades/2009-09-07_add_version_active.sql new file mode 100644 index 000000000..c192a1f36 --- /dev/null +++ b/whups/scripts/upgrades/2009-09-07_add_version_active.sql @@ -0,0 +1,2 @@ +ALTER TABLE whups_versions ADD COLUMN version_active INT DEFAULT 1; +CREATE INDEX whups_versions_active_idx ON whups_versions (version_active); diff --git a/whups/scripts/upgrades/convert_datatree_shares_to_sql.php b/whups/scripts/upgrades/convert_datatree_shares_to_sql.php new file mode 100755 index 000000000..1ae3c1996 --- /dev/null +++ b/whups/scripts/upgrades/convert_datatree_shares_to_sql.php @@ -0,0 +1,176 @@ +#!/usr/bin/env php +init(); + +/* Grab what we need to steal the DB config */ +require_once HORDE_BASE . '/config/conf.php'; +require_once 'MDB2.php'; + +$config = $GLOBALS['conf']['sql']; +unset($config['charset']); +$db = MDB2::factory($config); +$db->setOption('seqcol_name', 'id'); + +$error_cnt = 0; +$delete_dt_data = false; +$answer = $cli->prompt('Do you want to keep your old datatree data or delete it?', array('Keep', 'Delete')); +if ($answer == 1) { + $delete_dt_data = true; +} +$answer = $cli->prompt(sprintf("Data will be copied into the new tables, and %s be deleted from the datatree.\n Is this what you want?", (($delete_dt_data) ? 'WILL' : 'WILL NOT')), array('y' => 'Yes', 'n' => 'No')); +if ($answer != 'y') { + exit; +} + +/* Get the share entries */ +$shares_result = $db->query('SELECT datatree_id, datatree_name FROM horde_datatree WHERE group_uid = \'horde.shares.whups\''); +if (is_a($shares_result, 'PEAR_Error')) { + die($shares_result->toString()); +} + +$query = $db->prepare('SELECT attribute_name, attribute_key, attribute_value FROM horde_datatree_attributes WHERE datatree_id = ?'); +$maxId = 0; +while ($row = $shares_result->fetchRow(MDB2_FETCHMODE_ASSOC)) { + $share_id = $row['datatree_id']; + $share_name = $row['datatree_name']; + $maxId = max($maxId, $share_id); + + /* Build an array to hold the new row data */ + $data = array('share_id' => $share_id, + 'share_name' => $share_name); + + $query_result = $query->execute($share_id); + $rows = $query_result->fetchAll(MDB2_FETCHMODE_ASSOC); + if (!count($rows)) { + continue; + } + $users = array(); + $groups = array(); + + foreach ($rows as $row) { + if ($row['attribute_name'] == 'perm_groups') { + /* Group table entry */ + $groups[] = array('share_id' => $data['share_id'], + 'group_uid' => $row['attribute_key'], + 'perm' => $row['attribute_value']); + } elseif ($row['attribute_name'] == 'perm_users') { + /* User table entry */ + $users[] = array('share_id' => $data['share_id'], + 'user_uid' => $row['attribute_key'], + 'perm' => $row['attribute_value']); + } else { + /* Everything else goes in the main share table */ + switch ($row['attribute_name']) { + case 'perm_creator': + case 'perm_default': + case 'perm_guest': + $data[$row['attribute_name']] = $row['attribute_value']; + break; + + case 'owner': + $data['share_owner'] = $row['attribute_value']; + break; + + case 'name': + // Note the key to the $data array is not related to + // the attribute_name field in the dt_attributes table. + $data['attribute_name'] = $row['attribute_value']; + break; + + case 'slug': + // Note the key to the $data array is not related to + // the attribute_name field in the dt_attributes table. + $data['attribute_slug'] = $row['attribute_value']; + break; + } + } + } + + /* Set flags */ + $data['share_flags'] = 0; + if (count($users)) { + $data['share_flags'] |= 1; + } + if (count($groups)) { + $data['share_flags'] |= 2; + } + + /* Insert the new data */ + $cli->message('Migrating share data for share_id: ' . $share_id, 'cli.message'); + $result = insertData('whups_shares', $data); + if (is_a($result, 'PEAR_Error')) { + ++$error_cnt; + $cli->message($result->toString(), 'cli.error'); + } + if (count($groups)) { + foreach ($groups as $group) { + $result = insertData('whups_shares_groups', $group); + if (is_a($result, 'PEAR_Error')) { + ++$error_cnt; + $cli->message($result->getMessage(), 'cli.error'); + } + } + } + if (count($users)) { + foreach ($users as $user) { + $result = insertData('whups_shares_users', $user); + if (is_a($result, 'PEAR_Error')) { + ++$error_cnt; + $cli->message($result->getMessage(), 'cli.error'); + } + } + } + + /* Delete the datatree data, but ONLY if it was requested */ + if ($delete_dt_data && !$error_cnt) { + $cli->message('DELETING datatree data for share_id: ' . $share_id, 'cli.message'); + $delete = $db->prepare('DELETE FROM horde_datatree_attributes WHERE datatree_id = ?', null, MDB2_PREPARE_MANIP); + $delete->execute(array($share_id)); + $delete->free(); + + $delete = $db->prepare('DELETE FROM horde_datatree WHERE datatree_id = ?', null, MDB2_PREPARE_MANIP); + $delete->execute(array($share_id)); + $delete->free(); + } + + /* Cleanup */ + $query_result->free(); + unset($row, $rows, $data, $groups, $users); +} + +while ($nextId = $db->nextId('whups_shares') < $maxId) { +} + +if ($error_cnt) { + $cli->message(sprintf("Encountered %u errors. No data was deleted from your database.", $error_cnt)); +} +echo "\nDone.\n"; + +/** + * Helper function + */ +function insertData($table, $data) +{ + $fields = array_keys($data); + $values = array_map(array($GLOBALS['db'], 'quote'), array_values($data)); + + return $GLOBALS['db']->exec('INSERT INTO ' . $table . ' (' . implode(', ', $fields) . ') VALUES (' . implode(', ', $values) . ')'); +} diff --git a/whups/search.php b/whups/search.php new file mode 100644 index 000000000..603040183 --- /dev/null +++ b/whups/search.php @@ -0,0 +1,181 @@ + + * Copyright 2001-2009 The Horde Project (http://www.horde.org/) + * + * See the enclosed file LICENSE for license information (BSD). If you + * did not receive this file, see http://www.horde.org/licenses/bsdl.php. + * + * @author Chuck Hagenbuch + */ + +/** + * Construct the URL back to a supplied search + */ +function _getSearchUrl($vars) +{ + $qUrl = ''; + + $queue = (int)$vars->get('queue'); + $qUrl = Horde_Util::addParameter($qUrl, array('queue' => $queue)); + + $summary = $vars->get('summary'); + if ($summary) { + $qUrl = Horde_Util::addParameter($qUrl, 'summary', $summary); + } + + $states = $vars->get('states'); + if (is_array($states)) { + foreach ($states as $type => $state) { + if (is_array($state)) { + foreach ($state as $s) { + $qUrl = Horde_Util::addParameter($qUrl, "states[$type][]", $s); + } + } else { + $qUrl = Horde_Util::addParameter($qUrl, "states[$type]", $state); + } + } + } + + return substr($qUrl, 1); +} + +require_once dirname(__FILE__) . '/lib/base.php'; +require_once WHUPS_BASE . '/lib/Query.php'; +require_once WHUPS_BASE . '/lib/Forms/Search.php'; +require_once WHUPS_BASE . '/lib/View.php'; + +$renderer = new Horde_Form_Renderer(); +$beendone = false; +$vars = Horde_Variables::getDefaultVariables(); + +// Update sorting preferences. +if (Horde_Util::getFormData('sortby') !== null) { + $prefs->setValue('sortby', Horde_Util::getFormData('sortby')); +} +if (Horde_Util::getFormData('sortdir') !== null) { + $prefs->setValue('sortdir', Horde_Util::getFormData('sortdir')); +} + +$form = new SearchForm($vars); +$results = null; +if (($vars->get('formname') || $vars->get('summary') || $vars->get('states') || + Horde_Util::getFormData('haveSearch', false)) && $form->validate($vars, true)) { + + $form->getInfo($vars, $info); + if ($vars->get('submitbutton') == _("Save as Query")) { + require_once WHUPS_BASE . '/lib/Query.php'; + $qManager = new Whups_QueryManager(); + $whups_query = $qManager->newQuery(); + if (strlen($info['summary'])) { + $whups_query->insertCriterion('', CRITERION_SUMMARY, null, + OPERATOR_CI_SUBSTRING, $info['summary']); + } + if ($vars->get('queue')) { + $whups_query->insertCriterion('', CRITERION_QUEUE, null, + OPERATOR_EQUAL, $info['queue']); + } + foreach (array('ticket_timestamp', 'date_updated', 'date_resolved', 'date_assigned', 'date_due') as $date_field) { + if (!empty($info[$date_field]['from']) || !empty($info[$date_field]['to'])) { + $path = $whups_query->insertBranch('', QUERY_TYPE_AND); + break; + } + } + if (!empty($info['ticket_timestamp']['from'])) { + $whups_query->insertCriterion($path, CRITERION_TIMESTAMP, null, + OPERATOR_GREATER, $info['ticket_timestamp']['from']); + } + if (!empty($info['ticket_timestamp']['to'])) { + $whups_query->insertCriterion($path, CRITERION_TIMESTAMP, null, + OPERATOR_LESS, $info['ticket_timestamp']['to']); + } + if (!empty($info['date_updated']['from'])) { + $whups_query->insertCriterion($path, CRITERION_UPDATED, null, + OPERATOR_GREATER, $info['date_updated']['from']); + } + if (!empty($info['date_updated']['to'])) { + $whups_query->insertCriterion($path, CRITERION_UPDATED, null, + OPERATOR_LESS, $info['date_updated']['to']); + } + if (!empty($info['date_resolved']['from'])) { + $whups_query->insertCriterion($path, CRITERION_RESOLVED, null, + OPERATOR_GREATER, $info['date_resolved']['from']); + } + if (!empty($info['date_resolved']['to'])) { + $whups_query->insertCriterion($path, CRITERION_RESOLVED, null, + OPERATOR_LESS, $info['date_resolved']['to']); + } + if (!empty($info['date_assigned']['from'])) { + $whups_query->insertCriterion($path, CRITERION_ASSIGNED, null, + OPERATOR_GREATER, $info['date_assigned']['from']); + } + if (!empty($info['date_assigned']['to'])) { + $whups_query->insertCriterion($path, CRITERION_ASSIGNED, null, + OPERATOR_LESS, $info['date_assigned']['to']); + } + if (!empty($info['date_due']['from'])) { + $whups_query->insertCriterion($path, CRITERION_DUE, null, + OPERATOR_GREATER, $info['date_due']['from']); + } + if (!empty($info['date_due']['to'])) { + $whups_query->insertCriterion($path, CRITERION_DUE, null, + OPERATOR_LESS, $info['date_due']['to']); + } + if ($info['state_id']) { + $path = $whups_query->insertBranch('', QUERY_TYPE_OR); + foreach ($info['state_id'] as $state) { + $whups_query->insertCriterion($path, CRITERION_STATE, null, + OPERATOR_EQUAL, $state); + } + } + $_SESSION['whups']['query'] = serialize($whups_query); + header('Location: ' . Horde::applicationUrl(Horde_Util::addParameter('query/index.php', 'action', 'save'), true)); + exit; + } + $tickets = $whups_driver->getTicketsByProperties($info); + if (is_a($tickets, 'PEAR_Error')) { + $notification->push(sprintf(_("There was an error performing your search: %s"), $tickets->getMessage()), 'horde.error'); + } else { + Whups::sortTickets($tickets); + + $_SESSION['whups']['last_search'] = Horde::applicationUrl('search.php?' . _getSearchUrl($vars)); + $results = Whups_View::factory( + 'Results', + array('title' => _("Search Results"), + 'results' => $tickets, + 'values' => Whups::getSearchResultColumns(), + 'url' => $_SESSION['whups']['last_search'])); + $beendone = true; + } +} + +$title = _("Search"); +require WHUPS_TEMPLATES . '/common-header.inc'; +require WHUPS_TEMPLATES . '/menu.inc'; + +if ($results) { + $results->html(); + if (is_object($form)) { + $form->setTitle(_("Refine Search")); + $form->renderActive($renderer, $vars, 'search.php', 'get'); + echo '
'; + } +} + +if (!$beendone) { + // Front search page. + $form->setTitle(_("Ticket Search")); + $form->renderActive($renderer, $vars, 'search.php', 'get'); + echo '
'; +} + +$qManager = new Whups_QueryManager(); +$myqueries = Whups_View::factory( + 'SavedQueries', + array('title' => Horde_Auth::getAuth() ? _("My Queries") : _("Public Queries"), + 'results' => $qManager->listQueries(Horde_Auth::getAuth(), true))); +$myqueries->html(); + +require $registry->get('templates', 'horde') . '/common-footer.inc'; diff --git a/whups/search/rss.php b/whups/search/rss.php new file mode 100644 index 000000000..46f88211e --- /dev/null +++ b/whups/search/rss.php @@ -0,0 +1,61 @@ + + */ + +require_once dirname(__FILE__) . '/../lib/base.php'; +require_once WHUPS_BASE . '/lib/Forms/Search.php'; +require_once 'Horde/Template.php'; + +$vars = Horde_Variables::getDefaultVariables(); +$limit = (int)$vars->get('limit'); +$form = new SearchForm($vars); + +if ($form->validate($vars, true)) { + $form->getInfo($vars, $info); + $tickets = $whups_driver->getTicketsByProperties($info); + if (is_a($tickets, 'PEAR_Error')) { + Horde::fatal($tickets, __FILE__, __LINE__); + } + Whups::sortTickets($tickets, 'date_updated', 'desc'); +} else { + Horde::fatal(_("Invalid search"), __FILE__, __LINE__); +} + +$count = 0; +$items = array(); +foreach (array_keys($tickets) as $i) { + if ($limit > 0 && $count++ == $limit) { + break; + } + $description = sprintf(_("Type: %s; State: %s"), + $tickets[$i]['type_name'], + $tickets[$i]['state_name']); + + $items[$i]['title'] = htmlspecialchars(sprintf('[%s] %s', + $tickets[$i]['id'], + $tickets[$i]['summary'])); + $items[$i]['description'] = htmlspecialchars($description); + $items[$i]['url'] = Whups::urlFor('ticket', $tickets[$i]['id'], true, -1); + $items[$i]['pubDate'] = htmlspecialchars(date('r', $tickets[$i]['timestamp'])); +} + +$template = new Horde_Template(); +$template->set('charset', Horde_Nls::getCharset()); +$template->set('xsl', $registry->get('themesuri') . '/feed-rss.xsl'); +$template->set('pubDate', htmlspecialchars(date('r'))); +$template->set('title', _("Search Results")); +$template->set('items', $items, true); +$template->set('url', Horde::applicationUrl('search.php')); +$template->set('rss_url', Horde::selfUrl()); +$template->set('description', _("Search Results")); + +$browser->downloadHeaders('search.rss', 'text/xml', true); +echo $template->fetch(WHUPS_TEMPLATES . '/rss/items.rss'); diff --git a/whups/templates/.htaccess b/whups/templates/.htaccess new file mode 100644 index 000000000..3a4288278 --- /dev/null +++ b/whups/templates/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/whups/templates/admin/mtmatrix.inc b/whups/templates/admin/mtmatrix.inc new file mode 100644 index 000000000..074e6a73f --- /dev/null +++ b/whups/templates/admin/mtmatrix.inc @@ -0,0 +1,31 @@ +
+ + + +

+ +

+ + + + + + $type): ?> + + + + + + $queue): $selected = $whups_driver->getTypes($mid); ?> + + + $type): ?> + + + + +
 
   />
+ +
" />
+ +
diff --git a/whups/templates/common-header.inc b/whups/templates/common-header.inc new file mode 100644 index 000000000..ea10839f1 --- /dev/null +++ b/whups/templates/common-header.inc @@ -0,0 +1,37 @@ + + + + + +' : '' ?> + +get('name'); +if (!empty($title)) $page_title .= ' :: ' . $title; +if (!empty($refresh_time) && !empty($refresh_url)) { + echo "\n"; +} + +Horde::includeScriptFiles(); + +if (isset($ticket)) { + echo ''; +} +if (isset($whups_query) && isset($whups_query->id)) { + echo ''; +} + +?> +<?php echo htmlspecialchars($page_title) ?> + + + + + +> diff --git a/whups/templates/menu.inc b/whups/templates/menu.inc new file mode 100644 index 000000000..52e3a444f --- /dev/null +++ b/whups/templates/menu.inc @@ -0,0 +1,11 @@ +
+ + +
+notify(array('listeners' => 'status')) ?> diff --git a/whups/templates/prefs/sourceselect.inc b/whups/templates/prefs/sourceselect.inc new file mode 100644 index 000000000..5e661f3cf --- /dev/null +++ b/whups/templates/prefs/sourceselect.inc @@ -0,0 +1,338 @@ +hasMethod('contacts/sources')) { + $selected = explode("\t", $prefs->getValue('search_sources')); + $readable = $registry->call('contacts/sources'); + $writeable = $registry->call('contacts/sources', true); + + $nbReadSources = count(array_keys($readable)); + $nbWriteSources = count(array_keys($writeable)); + + if (count($selected) == 1 && empty($selected[0])) { + $selected = array(); + } + + if ($nbReadSources == 1) { + // Only one source, no need to display the selection widget + $selected = array_keys($readable); + $readSelect = ''; + } + + $prefSelect = ''; + foreach ($selected as $source) { + if (!empty($readable[$source])) { + $prefSelect .= '\n"; + } + } + + $readSelect = ''; + if (!is_a($readable, 'PEAR_Error') && is_array($readable)) { + foreach (array_diff(array_keys($readable), $selected) as $source) { + $readSelect .= '\n"; + } + } + + if (!is_a($writeable, 'PEAR_Error') && is_array($writeable)) { + $writeSelect = '' . "\n"; + $writeSource = ''; + foreach ($writeable as $source => $name) { + $sel = $prefs->getValue('add_source') == $source ? ' selected="selected"' : ''; + $writeSelect .= '\n"; + $writeSource = $source; + } + } + + $selected_fields = array(); + $search_field_pref = $prefs->getValue('search_fields'); + if (!empty($search_field_pref)) { + $selected_fields = explode("\n", $prefs->getValue('search_fields')); + foreach ($selected_fields as $field) { + $field = trim($field); + if (!empty($field)) { + $tmp = explode("\t", $field); + if (count($tmp) > 1) { + $source = array_splice($tmp, 0, 1); + $selected_fields[$source[0]] = $tmp; + } + } + } + } + + $search_fields = array(); + if (!is_a($readable, 'PEAR_Error') && is_array($readable)) { + foreach (array_keys($readable) as $source) { + $search_fields[$source] = $registry->call('contacts/fields', $source); + } + } + + $js = "var searchFields = [];\n"; + $source_count = 0; + foreach ($search_fields as $source => $fields) { + $js .= "searchFields[$source_count] = [];\n"; + $js .= "searchFields[$source_count][0] = '$source';\n"; + + $field_count = 1; + foreach ($fields as $field) { + if ($field['search']) { + $marked = isset($selected_fields[$source]) && in_array($field['name'], $selected_fields[$source]) ? 'true' : 'false'; + $js .= "searchFields[$source_count][$field_count] = ['" . $field['name'] . "', '" . $field['label'] . "', $marked];\n"; + $field_count++; + } + } + + $source_count++; + } +} +?> + +isLocked('search_sources') && (!empty($readSelect) || !empty($prefSelect))): ?> + + +
+" /> + 1): ?> +
+ + + + + + + +
+ + + + getImageDir('horde')) ?> +
+ getImageDir('horde')) ?> +
+ + + + getImageDir('horde')) ?> +
+ getImageDir('horde')) ?> +
+ +
+ +
+ + +
+ + + + + +
+ + +
+ + + diff --git a/whups/templates/prevnext.inc b/whups/templates/prevnext.inc new file mode 100644 index 000000000..601e3b3c3 --- /dev/null +++ b/whups/templates/prevnext.inc @@ -0,0 +1,46 @@ +getId(), $_SESSION['whups']['tickets'])) === false) { + return; +} + +$prevnext_links = array(); +if ($this_ticket != 0) { + $prevnext_links[] = Horde::link( + Whups::urlFor('ticket', + $_SESSION['whups']['tickets'][0])) + . htmlspecialchars(_("<'; + $prevnext_links[] = Horde::link( + Whups::urlFor('ticket', + $_SESSION['whups']['tickets'][$this_ticket - 1])) + . htmlspecialchars(_("'; +} +if ($this_ticket + 1 != $list_length) { + $prevnext_links[] = Horde::link( + Whups::urlFor('ticket', + $_SESSION['whups']['tickets'][$this_ticket + 1])) + . htmlspecialchars(_("Next>")) . ''; + $prevnext_links[] = Horde::link( + Whups::urlFor('ticket', + $_SESSION['whups']['tickets'][$list_length - 1])) + . htmlspecialchars(_("Last>>")) . ''; +} +$label = _("Re_turn to Search Results"); +$ak = Horde::getAccessKey($label); +$label = Horde::highlightAccessKey($label, $ak); +?> +
+

+ + + [ ] + + [ ] + + +

+
diff --git a/whups/templates/renderer/query/edit.inc b/whups/templates/renderer/query/edit.inc new file mode 100644 index 000000000..4f512a022 --- /dev/null +++ b/whups/templates/renderer/query/edit.inc @@ -0,0 +1,7 @@ +
+ +
\ No newline at end of file diff --git a/whups/templates/renderer/query/render.inc b/whups/templates/renderer/query/render.inc new file mode 100644 index 000000000..015449165 --- /dev/null +++ b/whups/templates/renderer/query/render.inc @@ -0,0 +1,5 @@ + + /> + + + \ No newline at end of file diff --git a/whups/templates/renderer/querysetcurrenttype.inc b/whups/templates/renderer/querysetcurrenttype.inc new file mode 100644 index 000000000..3d9cbd0a9 --- /dev/null +++ b/whups/templates/renderer/querysetcurrenttype.inc @@ -0,0 +1,10 @@ + + + + + + + + +
" /> 
+ \ No newline at end of file diff --git a/whups/templates/reports/stats.inc b/whups/templates/reports/stats.inc new file mode 100644 index 000000000..672453f4e --- /dev/null +++ b/whups/templates/reports/stats.inc @@ -0,0 +1,18 @@ +

+ + + + + + + $label): + $time = $reporter->getTime($stat, 'type_name'); + if (is_a($time, 'PEAR_Error')): +?> + + + + + +
getMessage() ?> $type_time) echo $type . ': ' . sprintf(_("%s days"), $type_time) . '
' ?>
diff --git a/whups/templates/rss/items.rss b/whups/templates/rss/items.rss new file mode 100644 index 000000000..b95d83208 --- /dev/null +++ b/whups/templates/rss/items.rss @@ -0,0 +1,23 @@ +"?> +" type="text/xsl"?> + + + <tag:title /> + + + + + + + + + <tag:items.title /> + + + + + + + + + diff --git a/whups/templates/ticket/watchers.inc b/whups/templates/ticket/watchers.inc new file mode 100644 index 000000000..735ad4ff6 --- /dev/null +++ b/whups/templates/ticket/watchers.inc @@ -0,0 +1,7 @@ +

+
+ getListeners($id, false, false, false)), + count($whups_driver->getOwners($id))) ?> +
+
\ No newline at end of file diff --git a/whups/templates/view/results.inc b/whups/templates/view/results.inc new file mode 100755 index 000000000..e45934360 --- /dev/null +++ b/whups/templates/view/results.inc @@ -0,0 +1,103 @@ + + + + + + + +
_params['title'] . ' (' . count($this->_params['results']) . ')' ?>_params['extra']) ? $this->_params['extra'] : ' ' ?>
+_params['results'])): ?> + + +'; + foreach ($this->_params['values'] as $name => $value) { + if ($sortby == $value) { + $class = ' class="' . $sortdirclass . '"'; + $revurl = Horde_Util::addParameter($this->_params['url'], 'sortdir', ($sortdir ? 0 : 1)); + $sortlink = Horde::link($revurl, sprintf(_("Sort by %s"), $name), 'sortlink') . $name . ' '; + } else { + $class = ''; + $url = Horde_Util::addParameter($this->_params['url'], 'sortby', $value); + $sortlink = Horde::link($url, sprintf(_("Sort by %s"), $name), 'sortlink') . $name . ' '; + } + + echo ''; + } + echo ''; + + foreach ($this->_params['results'] as $info) { + echo ''; + + $url = Whups::urlFor('ticket', $info['id']); + + foreach ($this->_params['values'] as $name => $value) { + $thevalue = isset($info[$value]) ? $info[$value] : ''; + + if ($value == 'timestamp' || substr($value, 0, 5) == 'date_') { + $sortval = (strlen($thevalue) ? ' sortval="' . $thevalue . '"' : ''); + $thevalue = Horde_Form_Type_date::getFormattedTime($thevalue, $prefs->getValue('report_time_format'), false); + } elseif ($value == 'user_id_requester') { + $thevalue = Whups::formatUser($thevalue, false, true, true); + } elseif ($value == 'id' || $value == 'summary') { + $sortval = ''; + $thevalue = Horde::link($url) . '' . htmlspecialchars($thevalue) . ''; + } elseif ($value == 'owners') { + $sortval = ''; + if (!empty($info['owners'])) { + $owners = array(); + foreach ($thevalue as $owner) { + $owners[] = Whups::formatUser($owner, false); + } + $thevalue = implode(', ', $owners); + } + } + + echo '' . (strlen($thevalue) ? $thevalue : ' ') . ''; + } + + echo ''; + } +?> + +
' . $sortlink . '
+ + + + + +
+
+ + + + + " /> +
+
+ + +
\ No newline at end of file diff --git a/whups/templates/view/savedqueries.inc b/whups/templates/view/savedqueries.inc new file mode 100644 index 000000000..963e6c6c5 --- /dev/null +++ b/whups/templates/view/savedqueries.inc @@ -0,0 +1,10 @@ + +

+ _params['title']); ?> +

+ + +_params['results'] as $id => $result): ?> + + +
$id) : array('slug' => $result['slug']))) . htmlspecialchars($result['name']) ?>
diff --git a/whups/themes/feed-rss.xsl b/whups/themes/feed-rss.xsl new file mode 100644 index 000000000..211493e0c --- /dev/null +++ b/whups/themes/feed-rss.xsl @@ -0,0 +1,79 @@ + + + + + + + + + + + <xsl:value-of select="/rss/channel/title"/> + + + + +

+ You're viewing an XML content feed which is + intended to be viewed within a feed aggregator. +

+ +

Subscribe to

+ +

+ Subscribe now in your favorite RSS aggregator: +

+ + + + + +

+

Preview

+

+ + + + + +
+ + + +

+ + + +

+
+ +
diff --git a/whups/themes/graphics/admin.png b/whups/themes/graphics/admin.png new file mode 100644 index 000000000..502e04cdc Binary files /dev/null and b/whups/themes/graphics/admin.png differ diff --git a/whups/themes/graphics/az.png b/whups/themes/graphics/az.png new file mode 100644 index 000000000..2b646f94c Binary files /dev/null and b/whups/themes/graphics/az.png differ diff --git a/whups/themes/graphics/create.png b/whups/themes/graphics/create.png new file mode 100644 index 000000000..51e47130b Binary files /dev/null and b/whups/themes/graphics/create.png differ diff --git a/whups/themes/graphics/favicon.ico b/whups/themes/graphics/favicon.ico new file mode 100644 index 000000000..887e1235c Binary files /dev/null and b/whups/themes/graphics/favicon.ico differ diff --git a/whups/themes/graphics/query.png b/whups/themes/graphics/query.png new file mode 100644 index 000000000..ef46d4aef Binary files /dev/null and b/whups/themes/graphics/query.png differ diff --git a/whups/themes/graphics/reports.png b/whups/themes/graphics/reports.png new file mode 100644 index 000000000..6e8e3d8dc Binary files /dev/null and b/whups/themes/graphics/reports.png differ diff --git a/whups/themes/graphics/search.png b/whups/themes/graphics/search.png new file mode 100644 index 000000000..5eb2e4ef0 Binary files /dev/null and b/whups/themes/graphics/search.png differ diff --git a/whups/themes/graphics/whups.png b/whups/themes/graphics/whups.png new file mode 100644 index 000000000..1251ddafe Binary files /dev/null and b/whups/themes/graphics/whups.png differ diff --git a/whups/themes/graphics/za.png b/whups/themes/graphics/za.png new file mode 100644 index 000000000..a154237b5 Binary files /dev/null and b/whups/themes/graphics/za.png differ diff --git a/whups/themes/hordeweb/screen.css b/whups/themes/hordeweb/screen.css new file mode 100644 index 000000000..51fa620ac --- /dev/null +++ b/whups/themes/hordeweb/screen.css @@ -0,0 +1,42 @@ +/** + * $Horde: whups/themes/hordeweb/screen.css,v 1.4 2008/04/03 14:47:16 jan Exp $ + */ + +#searchnav { + background: #cfc; + color: #063; + border: none; + padding: 2px 5px; + margin-left: 0; + margin-right: 0; + -moz-border-radius: 8px; + -webkit-border-radius: 8px; +} +#searchnav p { + background: none; +} + +div#comments { + margin: 0; +} + +.c_l, .c_r, .c_m, .c_b { + background: #cfc; + color: #063; + border: 1px solid #cfc; +} +.c_l { + padding-left: 5px; + -moz-border-radius-topleft: 8px; + -webkit-border-top-left-radius: 8px; +} +.c_r { + padding-right: 5px; + -moz-border-radius-topright: 8px; + -webkit-border-top-right-radius: 8px; +} + +table.tickets th { + background: #cfc; + color: #063; +} diff --git a/whups/themes/screen.css b/whups/themes/screen.css new file mode 100644 index 000000000..a50d5963c --- /dev/null +++ b/whups/themes/screen.css @@ -0,0 +1,128 @@ +/** + * $Horde: whups/themes/screen.css,v 1.17 2008/08/05 22:37:34 bklang Exp $ + */ + +del { + background: transparent; +} + +#searchnav { + border: 1px solid #ccc; + padding: 2px; + margin: 8px; +} +#searchnav p { + margin: 0; + background: #e9e9e9; +} + +.query { + background: #cdcdcd; +} + +div#comments { + margin: .5em; +} +div#comments div { + margin-top: .4em; +} +.comment-body { + background: #fff; + color: #000; + padding: 1em; + font-size: 100%; + font-family: "Lucida Console",Courier,"Courier New"; +} +.pc_l { + background: #eee; + border-left: 8px solid #900; + border-top: 2px solid #900; +} +.pc_r { + background: #eee; + border-right: 8px solid #900; + border-top: 2px solid #900; +} +.pc_m { + background: #eee; + border-top: 2px solid #900; +} +.pc_b { + background: #eee; + border-left: 8px solid #900; + border-right: 8px solid #900; + border-bottom: 2px solid #900; +} +.c_l { + background: #eee; + border-left: 8px solid #ccc; + border-top: 2px solid #ccc; +} +.c_r { + background: #eee; + border-right: 8px solid #ccc; + border-top: 2px solid #ccc; +} +.c_m { + background: #eee; + border-top: 2px solid #ccc; +} +.c_b { + background: #eee; + border-left: 8px solid #ccc; + border-right: 8px solid #ccc; + border-bottom: 2px solid #ccc; +} + +/* Search result tables */ +table.tickets { + width: 100%; + /* width: 99%; + margin: 0 0 8px 5px; */ + border-top: 1px solid #ddd; + border-left: 1px solid #ddd; +} +table.tickets th { + padding: 3px; + background: #e9e9e9; + border-right: 1px solid #ccc; + text-align: left; +} +table.tickets td { + padding: 3px; + border-right: 1px solid #ddd; + border-bottom: 1px solid #ddd; +} +table.tickets th.sortup { + background: #bbcbff url("graphics/za.png") center left no-repeat; + padding-left: 10px; +} +table.tickets th.sortdown { + background: #bbcbff url("graphics/az.png") center left no-repeat; + padding-left: 10px; +} + +/* Autocomplete styles. */ +.autocomplete { + background: #f4f4f4; + border: 1px solid #d4d4d4; + position: absolute; + padding: 2px 2px 2px 2px; +} +.autocomplete ul { + margin: 1px; + padding: 1px; + list-style-type: none; +} +.autocomplete ul li { + padding-top: 3px; + padding-bottom: 3px; + cursor: pointer; + text-decoration: underline; + font-size: 90%; + color: #000; +} +.autocomplete ul .selected { + background: gray; + color: #fff; +} diff --git a/whups/themes/silver/graphics/admin.png b/whups/themes/silver/graphics/admin.png new file mode 100644 index 000000000..c4e8c2809 Binary files /dev/null and b/whups/themes/silver/graphics/admin.png differ diff --git a/whups/themes/silver/graphics/az.png b/whups/themes/silver/graphics/az.png new file mode 100644 index 000000000..f52e8287a Binary files /dev/null and b/whups/themes/silver/graphics/az.png differ diff --git a/whups/themes/silver/graphics/create.png b/whups/themes/silver/graphics/create.png new file mode 100644 index 000000000..ced781747 Binary files /dev/null and b/whups/themes/silver/graphics/create.png differ diff --git a/whups/themes/silver/graphics/favicon.ico b/whups/themes/silver/graphics/favicon.ico new file mode 100644 index 000000000..461907c71 Binary files /dev/null and b/whups/themes/silver/graphics/favicon.ico differ diff --git a/whups/themes/silver/graphics/query.png b/whups/themes/silver/graphics/query.png new file mode 100644 index 000000000..9680afd12 Binary files /dev/null and b/whups/themes/silver/graphics/query.png differ diff --git a/whups/themes/silver/graphics/reports.png b/whups/themes/silver/graphics/reports.png new file mode 100644 index 000000000..fe00fa050 Binary files /dev/null and b/whups/themes/silver/graphics/reports.png differ diff --git a/whups/themes/silver/graphics/search.png b/whups/themes/silver/graphics/search.png new file mode 100644 index 000000000..4e4ae99db Binary files /dev/null and b/whups/themes/silver/graphics/search.png differ diff --git a/whups/themes/silver/graphics/whups.png b/whups/themes/silver/graphics/whups.png new file mode 100644 index 000000000..2d5fb90ec Binary files /dev/null and b/whups/themes/silver/graphics/whups.png differ diff --git a/whups/themes/silver/graphics/za.png b/whups/themes/silver/graphics/za.png new file mode 100644 index 000000000..32e427a6d Binary files /dev/null and b/whups/themes/silver/graphics/za.png differ diff --git a/whups/themes/silver/screen.css b/whups/themes/silver/screen.css new file mode 100644 index 000000000..9f3730a22 --- /dev/null +++ b/whups/themes/silver/screen.css @@ -0,0 +1,10 @@ +/** + * $Horde: whups/themes/silver/screen.css,v 1.1 2008/03/27 17:45:34 jan Exp $ + */ + +table.tickets th.sortup { + background: #ccc url("graphics/za.png") center left no-repeat; +} +table.tickets th.sortdown { + background: #ccc url("graphics/az.png") center left no-repeat; +} diff --git a/whups/themes/silver/themed_graphics b/whups/themes/silver/themed_graphics new file mode 100644 index 000000000..e69de29bb diff --git a/whups/ticket/.htaccess b/whups/ticket/.htaccess new file mode 100644 index 000000000..34a1d9f55 --- /dev/null +++ b/whups/ticket/.htaccess @@ -0,0 +1,8 @@ + + RewriteEngine On + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^([0-9]+)$ index.php?id=$1 [QSA,L] + RewriteRule ^([0-9]+)/rss/?$ rss.php?id=$1 [QSA,L] + RewriteRule ^([0-9]+)/([a-z]+)(\.php)?$ $2.php?id=$1 [QSA,L] + diff --git a/whups/ticket/comment.php b/whups/ticket/comment.php new file mode 100644 index 000000000..d3e894937 --- /dev/null +++ b/whups/ticket/comment.php @@ -0,0 +1,94 @@ + + * Copyright 2001-2009 The Horde Project (http://www.horde.org/) + * + * See the enclosed file LICENSE for license information (BSD). If you + * did not receive this file, see http://www.horde.org/licenses/bsdl.php. + */ + +@define('WHUPS_BASE', dirname(__FILE__) . '/..'); +require_once WHUPS_BASE . '/lib/base.php'; +require_once WHUPS_BASE . '/lib/Ticket.php'; +require_once WHUPS_BASE . '/lib/Ticket.php'; +require_once WHUPS_BASE . '/lib/Forms/AddComment.php'; + +$ticket = Whups::getCurrentTicket(); +$vars = Horde_Variables::getDefaultVariables(); +$vars->set('id', $id = $ticket->getId()); +foreach ($ticket->getDetails() as $varname => $value) { + $vars->add($varname, $value); +} +if ($tid = $vars->get('transaction')) { + $history = Whups::permissionsFilter($whups_driver->getHistory($ticket->getId()), + 'comment', Horde_Perms::READ); + if (!empty($history[$tid]['comment'])) { + $private = false; + foreach ($history[$tid]['changes'] as $change) { + if (!empty($change['private'])) { + if (!$GLOBALS['perms']->hasPermission('whups:comments:' . $change['value'], Horde_Auth::getAuth(), Horde_Perms::READ)) { + $private = true; + break; + } + } + } + + if (!$private) { + $flowed = new Horde_Text_Flowed(preg_replace("/\s*\n/U", "\n", $history[$tid]['comment'])); + $vars->set('newcomment', $flowed->toFlowed(true)); + } + } +} + +$title = sprintf(_("Comment on %s"), '[#' . $id . '] ' . $ticket->get('summary')); +$commentForm = new AddCommentForm($vars, $title); +if ($vars->get('formname') == 'addcommentform' && $commentForm->validate($vars)) { + $commentForm->getInfo($vars, $info); + + // Add comment. + if (!empty($info['newcomment'])) { + $ticket->change('comment', $info['newcomment']); + } + + if (!empty($info['user_email'])) { + $ticket->change('comment-email', $info['user_email']); + } + + // Add attachment if one was uploaded. + if (!empty($info['newattachment']['name'])) { + $ticket->change('attachment', array('name' => $info['newattachment']['name'], + 'tmp_name' => $info['newattachment']['tmp_name'])); + } + + // Add watch + if (!empty($info['add_watch'])) { + $whups_driver->addListener($ticket->getId(), '**' . $info['user_email']); + } + + // If there was a new comment and permissions were specified on + // it, set them. + if (!empty($info['group'])) { + $ticket->change('comment-perms', $info['group']); + } + + $result = $ticket->commit(); + if (is_a($result, 'PEAR_Error')) { + $notification->push($result, 'horde.error'); + } else { + $notification->push(_("Comment added"), 'horde.success'); + $ticket->show(); + } +} + +require WHUPS_TEMPLATES . '/common-header.inc'; +require WHUPS_TEMPLATES . '/menu.inc'; +require WHUPS_TEMPLATES . '/prevnext.inc'; + +$tabs = Whups::getTicketTabs($vars, $id); +echo $tabs->render('comment'); + +$commentForm->renderActive(new Horde_Form_Renderer(), $vars, 'comment.php', 'post'); + +require $registry->get('templates', 'horde') . '/common-footer.inc'; diff --git a/whups/ticket/create.php b/whups/ticket/create.php new file mode 100644 index 000000000..62a356a8f --- /dev/null +++ b/whups/ticket/create.php @@ -0,0 +1,187 @@ + + * Copyright 2001-2009 The Horde Project (http://www.horde.org/) + * + * See the enclosed file LICENSE for license information (BSD). If you + * did not receive this file, see http://www.horde.org/licenses/bsdl.php. + */ + +@define('WHUPS_BASE', dirname(__FILE__) . '/..'); +require_once WHUPS_BASE . '/lib/base.php'; +require_once WHUPS_BASE . '/lib/Forms/CreateTicket.php'; +require_once WHUPS_BASE . '/lib/Forms/VarRenderer.php'; +require_once WHUPS_BASE . '/lib/Ticket.php'; + +$empty = ''; +$beendone = 0; +$wereerrors = 0; + +$vars = Horde_Variables::getDefaultVariables($empty); +$formname = $vars->get('formname'); + +$form1 = new CreateStep1Form($vars); +$form2 = new CreateStep2Form($vars); +$form3 = new CreateStep3Form($vars); +$form4 = new CreateStep4Form($vars); +$r = new Horde_Form_Renderer( + array('varrenderer_driver' => 'whups')); + +$valid4 = $form4->validate($vars) && + $vars->get('formname') == 'createstep4form'; +$valid3 = $form3->validate($vars, true); +$valid2 = $form2->validate($vars, !$form1->isSubmitted()); +$valid1 = $form1->validate($vars, true); +$doAssignForm = Horde_Auth::getAuth() && + $whups_driver->isCategory('assigned', $vars->get('state')); + +if ($valid1 && $valid2 && $valid3 && + // Don't validate the assignment form if it isn't being used. + (!$doAssignForm || $valid4)) { + + $form1->getInfo($vars, $info); + $form2->getInfo($vars, $info); + $form3->getInfo($vars, $info); + if ($doAssignForm) { + $form4->getInfo($vars, $info); + } + + $ticket = Whups_Ticket::newTicket($info, Horde_Auth::getAuth()); + if (is_a($ticket, 'PEAR_Error')) { + Horde::logMessage($ticket, __FILE__, __LINE__, PEAR_LOG_ERR); + $notification->push(sprintf(_("Adding your ticket failed: %s."), + $ticket->getMessage()), + 'horde.error'); + header('Location: ' . Horde::applicationUrl('ticket/create.php', true)); + } else { + $notification->push(sprintf(_("Your ticket ID is %s. An appropriate person has been notified of this request."), $ticket->getId()), 'horde.success'); + $ticket->show(); + } + exit; +} + +// Start the page. +$title = _("New Ticket"); +require WHUPS_TEMPLATES . '/common-header.inc'; +require WHUPS_TEMPLATES . '/menu.inc'; + +if ($valid3 && $valid2 && $valid1) { + $form4->open($r, $vars, 'create.php', 'post'); + + // Preserve previous forms. + $form1->preserve($vars); + $r->_name = $form1->getName(); + $r->beginInactive($form1->getTitle()); + $r->renderFormInactive($form1, $vars); + $r->end(); + echo '
'; + + $form2->preserve($vars); + $r->_name = $form2->getName(); + $r->beginInactive($form2->getTitle()); + $r->renderFormInactive($form2, $vars); + $r->end(); + echo '
'; + + $form3->preserve($vars); + $r->_name = $form3->getName(); + $r->beginInactive($form3->getTitle()); + $r->renderFormInactive($form3, $vars); + $r->end(); + echo '
'; + + // Preserve an uploaded file if there was one. + $form3->getInfo($vars, $info); + if (!empty($info['newattachment']['name'])) { + $file_name = $info['newattachment']['name']; + + $tmp_file_path = tempnam(Horde::getTempDir(), 'att'); + if (move_uploaded_file($info['newattachment']['tmp_name'], + $tmp_file_path)) { + $_SESSION['whups']['deferred_attachment'][$file_name] = + $tmp_file_path; + $vars->set('deferred_attachment', $file_name); + $form3->preserveVarByPost($vars, 'deferred_attachment'); + } + } + + // Render the 4th stage form. + if ($formname != 'createstep4form') { + $form4->clearValidation(); + } + $r->_name = $form4->getName(); + $r->beginActive($form4->getTitle()); + $r->renderFormActive($form4, $vars); + $r->submit(); + $r->end(); + $form3->close($r); + + $beendone = 1; +} elseif ($valid2 && $valid1) { + $form3->open($r, $vars, 'create.php', 'post'); + + // Render the stage 1 form readonly. + $form1->preserve($vars); + $r->beginInactive($form1->getTitle()); + $r->renderFormInactive($form1, $vars); + $r->end(); + echo '
'; + + // Render the stage 2 form readonly. + $form2->preserve($vars); + $r->beginInactive($form2->getTitle()); + $r->renderFormInactive($form2, $vars); + $r->end(); + echo '
'; + + // Render the third stage form. + if ($formname != 'createstep3form') { + $form3->clearValidation(); + } + $r->beginActive($form3->getTitle()); + $r->renderFormActive($form3, $vars); + $r->submit(_("Submit"), true); + $r->end(); + + $form3->close($r); + + $beendone = 1; +} else { + if ($valid1) { + $form2->open($r, $vars, 'create.php', 'post'); + + // Render the original form readonly. + $form1->preserve($vars); + $r->beginInactive($form1->getTitle()); + $r->renderFormInactive($form1, $vars); + $r->end(); + echo '
'; + + // Render the second stage form. + if ($formname != 'createstep2form') { + $form2->clearValidation(); + } + $r->beginActive($form2->getTitle()); + $r->renderFormActive($form2, $vars); + $r->submit(); + $r->end(); + + $form2->close($r); + + $beendone = 1; + } else { + if ($formname != 'createstep1form') { + $form1->clearValidation(); + } + $form1->open($r, $vars, 'create.php', 'post'); + $r->beginActive($form1->getTitle()); + $r->renderFormActive($form1, $vars); + $r->submit(); + $r->end(); + $form1->close($r); + } +} + +require $registry->get('templates', 'horde') . '/common-footer.inc'; diff --git a/whups/ticket/delete.php b/whups/ticket/delete.php new file mode 100644 index 000000000..0f1f2813e --- /dev/null +++ b/whups/ticket/delete.php @@ -0,0 +1,100 @@ + + * Copyright 2001-2009 The Horde Project (http://www.horde.org/) + * + * See the enclosed file LICENSE for license information (BSD). If you + * did not receive this file, see http://www.horde.org/licenses/bsdl.php. + */ + +@define('WHUPS_BASE', dirname(__FILE__) . '/..'); +require_once WHUPS_BASE . '/lib/base.php'; +require_once WHUPS_BASE . '/lib/Ticket.php'; + +class DeleteTicketForm extends Horde_Form { + + var $_queue; + + function DeleteTicketForm(&$vars, $title = '') + { + parent::Horde_Form($vars, $title, 'deleteticketform'); + + $info = $GLOBALS['whups_driver']->getTicketDetails($vars->get('id')); + $this->_queue = $info['queue']; + $this->addHidden('', 'id', 'int', true, true); + $summary = &$this->addVariable(_("Summary"), 'summary', 'text', false, + true); + $summary->setDefault($info['summary']); + $yesno = array(0 => _("No"), 1 => _("Yes")); + $this->addVariable(_("Really delete this ticket? It will NOT be archived, and will be gone forever."), 'yesno', 'enum', true, false, null, array($yesno)); + } + + function validate(&$vars) + { + if (!Whups::hasPermission($this->_queue, 'queue', Horde_Perms::DELETE)) { + $this->setError('yesno', _("Permission Denied.")); + } + + return parent::validate($vars); + } + +} + +$ticket = Whups::getCurrentTicket(); +$details = $ticket->getDetails(); +if (!Whups::hasPermission($details['queue'], 'queue', Horde_Perms::DELETE)) { + $notification->push(_("Permission Denied"), 'horde.error'); + header('Location: ' . Horde::applicationUrl($prefs->getValue('whups_default_view') . '.php', true)); + exit; +} + +$vars = Horde_Variables::getDefaultVariables(); +$vars->set('id', $id = $ticket->getId()); +foreach ($details as $varname => $value) { + $vars->add($varname, $value); +} +$title = sprintf(_("Delete %s?"), '[#' . $id . '] ' . $ticket->get('summary')); +$deleteform = new DeleteTicketForm($vars, $title); + +if ($vars->get('formname') == 'deleteticketform') { + if ($deleteform->validate($vars)) { + if ($vars->get('yesno') == 1) { + $deleteform->getInfo($vars, $info); + $result = $whups_driver->deleteTicket($info); + + if (!is_a($result, 'PEAR_Error')) { + $notification->push(sprintf(_("Ticket %d has been deleted."), $info['id']), 'horde.success'); + header('Location: ' . Horde::applicationUrl($prefs->getValue('whups_default_view') . '.php', true)); + exit; + } else { + $notification->push(_("There was an error deleting the ticket:") . ' ' . $result->getMessage(), 'horde.error'); + } + } else { + $notification->push(_("The ticket was not deleted."), 'horde.message'); + } + } +} + +require WHUPS_TEMPLATES . '/common-header.inc'; +require WHUPS_TEMPLATES . '/menu.inc'; +require WHUPS_TEMPLATES . '/prevnext.inc'; + +$tabs = Whups::getTicketTabs($vars, $id); +echo $tabs->render('delete'); + +$deleteform->renderActive($deleteform->getRenderer(), $vars, 'delete.php', 'post'); +echo '
'; + +$form = new TicketDetailsForm($vars, $ticket); +$ticket->setDetails($vars); + +$r = $form->getRenderer(); +$r->beginInactive($title); +$r->renderFormInactive($form, $vars); +$r->end(); + +require $registry->get('templates', 'horde') . '/common-footer.inc'; diff --git a/whups/ticket/deleteAttachment.php b/whups/ticket/deleteAttachment.php new file mode 100644 index 000000000..c5a2610f0 --- /dev/null +++ b/whups/ticket/deleteAttachment.php @@ -0,0 +1,38 @@ + + * Copyright 2001-2009 The Horde Project (http://www.horde.org/) + * + * See the enclosed file LICENSE for license information (BSD). If you + * did not receive this file, see http://www.horde.org/licenses/bsdl.php. + */ + +@define('WHUPS_BASE', dirname(__FILE__) . '/..'); +require_once WHUPS_BASE . '/lib/base.php'; +require_once WHUPS_BASE . '/lib/Ticket.php'; + +$ticket = Whups::getCurrentTicket(); +if (!Whups::hasPermission($ticket->get('queue'), 'queue', Horde_Perms::DELETE)) { + $notification->push(_("Permission Denied"), 'horde.error'); + header('Location: ' . Horde::applicationUrl($prefs->getValue('whups_default_view') . '.php', true)); + exit; +} + +$file = basename(Horde_Util::getFormData('file')); +$ticket->change('delete-attachment', $file); +$result = $ticket->commit(); +if (is_a($result, 'PEAR_Error')) { + $notification->push($result, 'horde.error'); +} else { + $notification->push(sprintf(_("Attachment %s deleted."), $file), 'horde.success'); +} + +if ($url = Horde_Util::getFormData('url')) { + header('Location: ' . $url); +} else { + header('Location: ' . Horde::applicationUrl($prefs->getValue('whups_default_view') . '.php', true)); +} diff --git a/whups/ticket/index.php b/whups/ticket/index.php new file mode 100644 index 000000000..424214bad --- /dev/null +++ b/whups/ticket/index.php @@ -0,0 +1,54 @@ + + * Copyright 2001-2009 The Horde Project (http://www.horde.org/) + * + * See the enclosed file LICENSE for license information (BSD). If you + * did not receive this file, see http://www.horde.org/licenses/bsdl.php. + * + * @author Chuck Hagenbuch + */ + +require_once dirname(__FILE__) . '/../lib/base.php'; +require_once WHUPS_BASE . '/lib/Ticket.php'; +require_once WHUPS_BASE . '/lib/Renderer/Comment.php'; + +$ticket = Whups::getCurrentTicket(); +$vars = Horde_Variables::getDefaultVariables(); +$ticket->setDetails($vars); + +$title = '[#' . $ticket->getId() . '] ' . $ticket->get('summary'); +require WHUPS_TEMPLATES . '/common-header.inc'; +require WHUPS_TEMPLATES . '/menu.inc'; +require WHUPS_TEMPLATES . '/prevnext.inc'; + +$tabs = Whups::getTicketTabs($vars, $ticket->getId()); +echo $tabs->render('history'); + +$form = new TicketDetailsForm($vars, $ticket); + +$renderer = $form->getRenderer(); +$renderer->_name = $form->getName(); +$renderer->beginInactive($title); +$renderer->renderFormInactive($form, $vars); +$renderer->end(); + +echo '
'; + +$comment = new Horde_Form_Renderer_Comment(); +$comment->begin(_("History")); +$history = Whups::permissionsFilter($whups_driver->getHistory($ticket->getId()), + 'comment', Horde_Perms::READ); +$chtml = array(); +foreach ($history as $transaction => $comment_values) { + $chtml[] = $comment->render($transaction, new Horde_Variables($comment_values)); +} +if ($prefs->getValue('comment_sort_dir')) { + $chtml = array_reverse($chtml); +} +echo implode('', $chtml); +$comment->end(); + +require $registry->get('templates', 'horde') . '/common-footer.inc'; diff --git a/whups/ticket/queue.php b/whups/ticket/queue.php new file mode 100644 index 000000000..86a8fc6f2 --- /dev/null +++ b/whups/ticket/queue.php @@ -0,0 +1,226 @@ + + * Copyright 2001-2009 The Horde Project (http://www.horde.org/) + * + * See the enclosed file LICENSE for license information (BSD). If you + * did not receive this file, see http://www.horde.org/licenses/bsdl.php. + */ + +@define('WHUPS_BASE', dirname(__FILE__) . '/..'); +require_once WHUPS_BASE . '/lib/base.php'; +require_once WHUPS_BASE . '/lib/Ticket.php'; + +/** + * Queue editing forms. + */ +class SetQueueStep1Form extends Horde_Form { + + function SetQueueStep1Form(&$vars, $title = '') + { + parent::Horde_Form($vars, $title); + + $this->addHidden('', 'id', 'int', true, true); + + /* Queues. */ + $this->addVariable( + _("New Queue"), 'queue', 'enum', true, false, null, + array(Whups::permissionsFilter($GLOBALS['whups_driver']->getQueues(), + 'queue', Horde_Perms::EDIT))); + $this->addVariable(_("Comment"), 'newcomment', 'longtext', false); + + /* Group restrictions. */ + if (Horde_Auth::isAdmin('whups:admin', Horde_Perms::EDIT) || + $GLOBALS['perms']->hasPermission('whups:hiddenComments', + Horde_Auth::getAuth(), Horde_Perms::EDIT)) { + $groups = &Group::singleton(); + $mygroups = $groups->getGroupMemberships(Horde_Auth::getAuth()); + if ($mygroups) { + foreach (array_keys($mygroups) as $gid) { + $grouplist[$gid] = $groups->getGroupName($gid, true); + } + asort($grouplist); + $grouplist = array_merge(array(0 => _("Any Group")), + $grouplist); + $this->addVariable(_("Viewable only by members of"), 'group', + 'enum', true, false, null, + array($grouplist)); + } + } + } + +} + +class SetQueueStep2Form extends Horde_Form { + + function SetQueueStep2Form(&$vars, $title = '') + { + global $whups_driver; + + parent::Horde_Form($vars, $title); + + $this->addHidden('', 'id', 'int', true, true); + $this->addHidden('', 'group', 'int', false, true); + $this->addHidden('', 'queue', 'int', true, true); + $this->addHidden('', 'newcomment', 'longtext', false, true); + + /* Give the user an opportunity to check that type, version, + * etc. are still valid. */ + $queue = $vars->get('queue'); + + $info = $whups_driver->getQueue($queue); + if (!empty($info['versioned'])) { + $versions = $whups_driver->getVersions($vars->get('queue')); + if (count($versions) == 0) { + $vtype = 'invalid'; + $v_params = array(_("This queue requires that you specify a version, but there are no versions associated with it. Until versions are created for this queue, you will not be able to create tickets.")); + } else { + $vtype = 'enum'; + $v_params = array($versions); + } + $this->addVariable(_("Queue Version"), 'version', $vtype, true, false, null, $v_params); + } + + $this->addVariable(_("Type"), 'type', 'enum', true, false, null, array($whups_driver->getTypes($queue))); + } + +} + +class SetQueueStep3Form extends Horde_Form { + + function SetQueueStep3Form(&$vars, $title = '') + { + global $whups_driver; + + parent::Horde_Form($vars, $title); + + $this->addHidden('', 'id', 'int', true, true); + $this->addHidden('', 'group', 'int', false, true); + $this->addHidden('', 'queue', 'int', true, true); + $this->addHidden('', 'type', 'int', true, true); + $this->addHidden('', 'newcomment', 'longtext', false, true); + + $info = $whups_driver->getQueue($vars->get('queue')); + if (!empty($info['versioned'])) { + $this->addHidden('', 'version', 'int', true, true); + } + + /* Give user an opportunity to check that state and priority + * are still valid. */ + $type = $vars->get('type'); + $this->addVariable(_("State"), 'state', 'enum', true, false, null, array($whups_driver->getStates($type))); + $this->addVariable(_("Priority"), 'priority', 'enum', true, false, null, array($whups_driver->getPriorities($type))); + } + +} + +$ticket = Whups::getCurrentTicket(); +$vars = Horde_Variables::getDefaultVariables(); +$vars->set('id', $id = $ticket->getId()); +foreach ($ticket->getDetails() as $varname => $value) { + $vars->add($varname, $value); +} + +// Check permissions on this ticket. +if (!Whups::hasPermission($ticket->get('queue'), 'queue', Horde_Perms::DELETE)) { + $notification->push(_("Permission Denied"), 'horde.error'); + header('Location: ' . Horde::applicationUrl($prefs->getValue('whups_default_view') . '.php', true)); + exit; +} + +$form = $vars->get('formname'); +$action = ''; + +if ($form == 'setqueuestep1form') { + $setqueueform = new SetQueueStep1Form($vars); + if ($setqueueform->validate($vars)) { + $action = 'sq2'; + } +} + +if ($form == 'setqueuestep2form') { + $setqueueform = new SetQueueStep2Form($vars); + if ($setqueueform->validate($vars)) { + $action = 'sq3'; + } else { + $action = 'sq2'; + } +} + +if ($form == 'setqueuestep3form') { + $smform3 = new SetQueueStep3Form($vars); + if ($smform3->validate($vars)) { + $smform3->getInfo($vars, $info); + + $ticket->change('queue', $info['queue']); + $ticket->change('type', $info['type']); + $ticket->change('state', $info['state']); + $ticket->change('priority', $info['priority']); + + if (!empty($info['version'])) { + $ticket->change('version', $info['version']); + } + + if (!empty($info['newcomment'])) { + $ticket->change('comment', $info['newcomment']); + } + + if (!empty($info['group'])) { + $ticket->change('comment-perms', $info['group']); + } + + $result = $ticket->commit(); + if (is_a($result, 'PEAR_Error')) { + $notification->push($result, 'horde.error'); + } else { + $notification->push(sprintf(_("Moved ticket %d to \"%s\""), $id, $ticket->get('queue_name')), 'horde.success'); + $ticket->show(); + } + } else { + $action = 'sq3'; + } +} + +$title = sprintf(_("Set Queue for %s"), '[#' . $id . '] ' . $ticket->get('summary')); +require WHUPS_TEMPLATES . '/common-header.inc'; +require WHUPS_TEMPLATES . '/menu.inc'; +require WHUPS_TEMPLATES . '/prevnext.inc'; + +$tabs = Whups::getTicketTabs($vars, $id); +echo $tabs->render('queue'); + +$r = new Horde_Form_Renderer(); + +switch ($action) { +case 'sq2': + $form1 = new SetQueueStep1Form($vars, _("Set Queue - Step 1")); + $form2 = new SetQueueStep2Form($vars, _("Set Queue - Step 2")); + + $form1->renderInactive($r, $vars); + echo '
'; + $form2->renderActive($r, $vars, 'queue.php', 'post'); + break; + +case 'sq3': + $form1 = new SetQueueStep1Form($vars, _("Set Queue - Step 1")); + $form2 = new SetQueueStep2Form($vars, _("Set Queue - Step 2")); + $form3 = new SetQueueStep3Form($vars, _("Set Queue - Step 3")); + + $form1->renderInactive($r, $vars); + echo '
'; + $form2->renderInactive($r, $vars); + echo '
'; + $form3->renderActive($r, $vars, 'queue.php', 'post'); + break; + +default: + $form1 = new SetQueueStep1Form($vars, _("Set Queue - Step 1")); + $form1->renderActive($r, $vars, 'queue.php', 'post'); + break; +} + +require $registry->get('templates', 'horde') . '/common-footer.inc'; diff --git a/whups/ticket/rss.php b/whups/ticket/rss.php new file mode 100644 index 000000000..14ee48e6d --- /dev/null +++ b/whups/ticket/rss.php @@ -0,0 +1,59 @@ + + * Copyright 2001-2009 The Horde Project (http://www.horde.org/) + * + * See the enclosed file LICENSE for license information (BSD). If you + * did not receive this file, see http://www.horde.org/licenses/bsdl.php. + */ + +@define('WHUPS_BASE', dirname(__FILE__) . '/..'); +require_once WHUPS_BASE . '/lib/base.php'; +require_once 'Horde/Template.php'; + +$ticket = Horde_Util::getFormData('id'); +$ticket = preg_replace('|\D|', '', $ticket); +if (!$ticket) { + exit; +} + +// Get the ticket details first. +$details = $whups_driver->getTicketDetails($ticket); +if (is_a($details, 'PEAR_Error')) { + exit; +} + +// Check permissions on this ticket. +if (!count(Whups::permissionsFilter(array($details['queue'] => ''), 'queue', Horde_Perms::READ))) { + exit; +} + +$history = Whups::permissionsFilter($whups_driver->getHistory($ticket), + 'comment', Horde_Perms::READ); +$items = array(); +$self = Whups::urlFor('ticket', $ticket, true, -1); +foreach (array_keys($history) as $i) { + if (!isset($history[$i]['comment_text'])) { + continue; + } + $items[$i]['title'] = htmlspecialchars(substr($history[$i]['comment_text'], 0, 60)); + $items[$i]['description'] = htmlspecialchars($history[$i]['comment_text']); + $items[$i]['pubDate'] = htmlspecialchars(date('r', $history[$i]['timestamp'])); + $items[$i]['url'] = $self . '#t' . $i; +} + +$template = new Horde_Template(); +$template->set('charset', Horde_Nls::getCharset()); +$template->set('xsl', $registry->get('themesuri') . '/feed-rss.xsl'); +$template->set('pubDate', htmlspecialchars(date('r'))); +$template->set('title', htmlspecialchars($details['summary'])); +$template->set('items', $items, true); +$template->set('url', Whups::urlFor('ticket', $ticket, true)); +$template->set('rss_url', Whups::urlFor('ticket_rss', $ticket, true)); +$template->set('description', htmlspecialchars($details['summary'])); + +$browser->downloadHeaders($details['summary'] . '.rss', + 'text/xml', true); +echo $template->fetch(WHUPS_TEMPLATES . '/rss/items.rss'); diff --git a/whups/ticket/type.php b/whups/ticket/type.php new file mode 100644 index 000000000..8d2b47347 --- /dev/null +++ b/whups/ticket/type.php @@ -0,0 +1,152 @@ + + * Copyright 2001-2009 The Horde Project (http://www.horde.org/) + * + * See the enclosed file LICENSE for license information (BSD). If you + * did not receive this file, see http://www.horde.org/licenses/bsdl.php. + */ + +@define('WHUPS_BASE', dirname(__FILE__) . '/..'); +require_once WHUPS_BASE . '/lib/base.php'; +require_once WHUPS_BASE . '/lib/Ticket.php'; + +class SetTypeStep1Form extends Horde_Form { + + function SetTypeStep1Form(&$vars, $title = '') + { + global $whups_driver; + + parent::Horde_Form($vars, $title); + + $this->addHidden('', 'id', 'int', true, true); + + /* Types */ + $queue = $vars->get('queue'); + $this->addVariable(_("New Type"), 'type', 'enum', true, false, null, array($whups_driver->getTypes($queue))); + $this->addVariable(_("Comment"), 'newcomment', 'longtext', false); + + /* Group restrictions. */ + $groups = &Group::singleton(); + $mygroups = $groups->getGroupMemberships(Horde_Auth::getAuth()); + if ($mygroups) { + foreach (array_keys($mygroups) as $gid) { + $grouplist[$gid] = $groups->getGroupName($gid, true); + } + asort($grouplist); + $grouplist = array_merge(array(0 => _("Any Group")), $grouplist); + $this->addVariable(_("Viewable only by members of"), 'group', 'enum', true, false, null, array($grouplist)); + } + } + +} + +class SetTypeStep2Form extends Horde_Form { + + function SetTypeStep2Form(&$vars, $title = '') + { + global $whups_driver; + + parent::Horde_Form($vars, $title); + + $this->addHidden('', 'id', 'int', true, true); + $this->addHidden('', 'group', 'int', false, false); + $this->addHidden('', 'type', 'int', true, true); + $this->addHidden('', 'newcomment', 'longtext', false, true); + + /* Give user an opportunity to check that state and priority + * are still valid. */ + $type = $vars->get('type'); + $this->addVariable(_("State"), 'state', 'enum', true, false, null, array($whups_driver->getStates($type))); + $this->addVariable(_("Priority"), 'priority', 'enum', true, false, null, array($whups_driver->getPriorities($type))); + } + +} + +$ticket = Whups::getCurrentTicket(); +$details = $ticket->getDetails(); +if (!Whups::hasPermission($details['queue'], 'queue', 'update')) { + $notification->push(_("Permission Denied"), 'horde.error'); + header('Location: ' . Horde::applicationUrl($prefs->getValue('whups_default_view') . '.php', true)); + exit; +} + +$vars = Horde_Variables::getDefaultVariables(); +$vars->set('id', $id = $ticket->getId()); +foreach ($ticket->getDetails() as $varname => $value) { + $vars->add($varname, $value); +} +$action = $vars->get('action'); +$form = $vars->get('formname'); + +/* Set Type action. */ +if ($form == 'settypestep1form') { + $settypeform = new SetTypeStep1Form($vars); + if ($settypeform->validate($vars)) { + $action = 'st2'; + } else { + $action = 'st'; + } +} + +if ($form == 'settypestep2form') { + $settypeform = new SetTypeStep2Form($vars); + if ($settypeform->validate($vars)) { + $settypeform->getInfo($vars, $info); + + $ticket->change('type', $info['type']); + $ticket->change('state', $info['state']); + $ticket->change('priority', $info['priority']); + + if (!empty($info['newcomment'])) { + $ticket->change('comment', $info['newcomment']); + } + + if (!empty($info['group'])) { + $ticket->change('comment-perms', $info['group']); + } + + $result = $ticket->commit(); + if (is_a($result, 'PEAR_Error')) { + $notification->push($result, 'horde.error'); + } else { + $notification->push(_("Successfully changed ticket type."), 'horde.success'); + $ticket->show(); + } + } else { + $notification->push(var_export($settypeform->_errors), 'horde.error'); + $action = 'st2'; + } +} + +$title = sprintf(_("Set Type for %s"), '[#' . $id . '] ' . $ticket->get('summary')); +require WHUPS_TEMPLATES . '/common-header.inc'; +require WHUPS_TEMPLATES . '/menu.inc'; +require WHUPS_TEMPLATES . '/prevnext.inc'; + +$tabs = Whups::getTicketTabs($vars, $id); +echo $tabs->render('type'); + +$r = new Horde_Form_Renderer(); + +switch ($action) { +case 'st2': + $form1 = new SetTypeStep1Form($vars, _("Set Type - Step 1")); + $form2 = new SetTypeStep2Form($vars, _("Set Type - Step 2")); + + $form1->renderInactive($r, $vars); + echo '
'; + $form2->renderActive($r, $vars, 'type.php', 'post'); + break; + +default: + $form1 = new SetTypeStep1Form($vars, _("Set Type - Step 1")); + $form1->renderActive($r, $vars, 'type.php', 'post'); + break; +} + +require $registry->get('templates', 'horde') . '/common-footer.inc'; diff --git a/whups/ticket/update.php b/whups/ticket/update.php new file mode 100644 index 000000000..8e3940bd0 --- /dev/null +++ b/whups/ticket/update.php @@ -0,0 +1,117 @@ + + * Copyright 2001-2009 The Horde Project (http://www.horde.org/) + * + * See the enclosed file LICENSE for license information (BSD). If you + * did not receive this file, see http://www.horde.org/licenses/bsdl.php. + */ + +@define('WHUPS_BASE', dirname(__FILE__) . '/..'); +require_once WHUPS_BASE . '/lib/base.php'; +require_once WHUPS_BASE . '/lib/Ticket.php'; +require_once WHUPS_BASE . '/lib/Forms/EditTicket.php'; + +$ticket = Whups::getCurrentTicket(); + +if (!Whups::hasPermission($ticket->get('queue'), 'queue', 'update')) { + $notification->push(_("Permission Denied"), 'horde.error'); + header('Location: ' . Horde::applicationUrl($prefs->getValue('whups_default_view') . '.php', true)); + exit; +} + +$vars = Horde_Variables::getDefaultVariables(); +$vars->set('id', $id = $ticket->getId()); +foreach ($ticket->getDetails() as $varname => $value) { + $vars->add($varname, $value); +} +if ($tid = $vars->get('transaction')) { + $history = Whups::permissionsFilter($whups_driver->getHistory($ticket->getId()), + 'comment', Horde_Perms::READ); + if (!empty($history[$tid]['comment'])) { + // If this was a restricted comment, load the group_id it was + // restricted to and default to keeping that restriction on + // the reply. + foreach ($history[$tid]['changes'] as $change) { + if (!empty($change['private'])) { + $permission = $GLOBALS['perms']->getPermission('whups:comments:' . $change['value']); + if (!is_a($permission, 'PEAR_Error')) { + $group_id = array_shift(array_keys($permission->getGroupPermissions())); + $vars->set('group', $group_id); + } + break; + } + } + + $flowed = new Horde_Text_Flowed(preg_replace("/\s*\n/U", "\n", $history[$tid]['comment'])); + $vars->set('newcomment', $flowed->toFlowed(true)); + } +} + +// Edit action. +if ($vars->get('formname') == 'editticketform') { + $editform = new EditTicketForm($vars, $ticket); + if ($editform->validate($vars)) { + $editform->getInfo($vars, $info); + + $ticket->change('summary', $info['summary']); + $ticket->change('state', $info['state']); + $ticket->change('priority', $info['priority']); + $ticket->change('due', $info['due']); + if (!empty($info['version'])) { + $ticket->change('version', $info['version']); + } + if (!empty($info['newcomment'])) { + $ticket->change('comment', $info['newcomment']); + } + + // Update user and group assignments. + if (Whups::hasPermission($vars->get('queue'), 'queue', 'assign')) { + $ticket->change('owners', array_merge(isset($info['owners']) ? $info['owners'] : array(), + isset($info['group_owners']) ? $info['group_owners'] : array())); + } + + // Update attributes. + $whups_driver->setAttributes($info, $ticket); + + // Add attachment if one was uploaded. + if (!empty($info['newattachment']['name'])) { + $ticket->change('attachment', array('name' => $info['newattachment']['name'], + 'tmp_name' => $info['newattachment']['tmp_name'])); + } + + // If there was a new comment and permissions were specified + // on it, set them. + if (!empty($info['group'])) { + $ticket->change('comment-perms', $info['group']); + } + + $result = $ticket->commit(); + if (is_a($result, 'PEAR_Error')) { + $notification->push($result, 'horde.error'); + } else { + $notification->push(_("Ticket Updated"), 'horde.success'); + $ticket->show(); + } + } +} + +$title = '[#' . $id . '] ' . $ticket->get('summary'); +require WHUPS_TEMPLATES . '/common-header.inc'; +require WHUPS_TEMPLATES . '/menu.inc'; +require WHUPS_TEMPLATES . '/prevnext.inc'; + +$tabs = Whups::getTicketTabs($vars, $id); +echo $tabs->render('update'); + +$form = new EditTicketForm($vars, $ticket, sprintf(_("Update %s"), $title)); +$form->renderActive($form->getRenderer(), $vars, 'update.php', 'post'); +echo '
'; + +$form = new TicketDetailsForm($vars, $ticket, $title); +$ticket->setDetails($vars); +$form->renderInactive($form->getRenderer(), $vars); + +require $registry->get('templates', 'horde') . '/common-footer.inc'; diff --git a/whups/ticket/watch.php b/whups/ticket/watch.php new file mode 100644 index 000000000..68e812e6f --- /dev/null +++ b/whups/ticket/watch.php @@ -0,0 +1,99 @@ + + * Copyright 2001-2009 The Horde Project (http://www.horde.org/) + * + * See the enclosed file LICENSE for license information (BSD). If you + * did not receive this file, see http://www.horde.org/licenses/bsdl.php. + */ + +@define('WHUPS_BASE', dirname(__FILE__) . '/..'); +require_once WHUPS_BASE . '/lib/base.php'; +require_once WHUPS_BASE . '/lib/Ticket.php'; + +class AddListenerForm extends Horde_Form { + + function AddListenerForm(&$vars, $title = '') + { + parent::Horde_Form($vars, $title); + + $this->addHidden('', 'id', 'int', true, true); + $this->addVariable(_("Email address to notify"), 'add_listener', 'email', true); + } + +} + +class DeleteListenerForm extends Horde_Form { + + function DeleteListenerForm(&$vars, $title = '') + { + parent::Horde_Form($vars, $title); + + $this->addHidden('', 'id', 'int', true, true); + $this->addVariable(_("Email address to remove"), 'del_listener', 'email', true); + } + +} + +$ticket = Whups::getCurrentTicket(); +$vars = Horde_Variables::getDefaultVariables(); +$vars->set('id', $id = $ticket->getId()); +foreach ($ticket->getDetails() as $varname => $value) { + $vars->add($varname, $value); +} + +$addform = new AddListenerForm($vars, _("Add Watcher")); +$delform = new DeleteListenerForm($vars, _("Remove Watcher")); + +if ($vars->get('formname') == 'addlistenerform') { + if ($addform->validate($vars)) { + $addform->getInfo($vars, $info); + + $result = $whups_driver->addListener($id, '**' . $info['add_listener']); + if (is_a($result, 'PEAR_Error')) { + $notification->push($result, 'horde.error'); + } else { + $ticket->notify($info['add_listener'], false, array('**' . $info['add_listener'])); + $notification->push(sprintf(_("%s will be notified when this ticket is updated."), $info['add_listener']), 'horde.success'); + $ticket->show(); + } + } +} elseif ($vars->get('formname') == 'deletelistenerform') { + if ($delform->validate($vars)) { + $delform->getInfo($vars, $info); + + $result = $whups_driver->deleteListener($id, '**' . $info['del_listener']); + if (is_a($result, 'PEAR_Error')) { + $notification->push($result, 'horde.error'); + } else { + $notification->push(sprintf(_("%s will no longer receive updates for this ticket."), $info['del_listener']), 'horde.success'); + $ticket->show(); + } + } +} + +$title = sprintf(_("Watchers for %s"), '[#' . $id . '] ' . $ticket->get('summary')); +require WHUPS_TEMPLATES . '/common-header.inc'; +require WHUPS_TEMPLATES . '/menu.inc'; +require WHUPS_TEMPLATES . '/prevnext.inc'; + +$tabs = Whups::getTicketTabs($vars, $id); +echo $tabs->render('watch'); + +require WHUPS_TEMPLATES . '/ticket/watchers.inc'; + +$r = new Horde_Form_Renderer(); + +$addform->renderActive($r, $vars, 'watch.php', 'post'); +echo '
'; + +$delform->renderActive($r, $vars, 'watch.php', 'post'); +echo '
'; + +$form = new TicketDetailsForm($vars, $ticket, '[#' . $id . '] ' . $ticket->get('summary')); +$ticket->setDetails($vars); +$form->renderInactive($form->getRenderer(), $vars); + +require $registry->get('templates', 'horde') . '/common-footer.inc'; diff --git a/whups/view.php b/whups/view.php new file mode 100644 index 000000000..2e9ce92aa --- /dev/null +++ b/whups/view.php @@ -0,0 +1,86 @@ + + */ + +define('WHUPS_BASE', dirname(__FILE__)); +require_once WHUPS_BASE . '/lib/base.php'; + +$actionID = Horde_Util::getFormData('actionID'); +$id = Horde_Util::getFormData('ticket'); +$filename = Horde_Util::getFormData('file'); +$type = Horde_Util::getFormData('type'); + +// Get the ticket details first. +if (empty($id)) { + exit; +} +$details = $whups_driver->getTicketDetails($id); +if (is_a($details, 'PEAR_Error')) { + if ($details->code === 0) { + // No permissions to this ticket. + $url = Horde::url($registry->get('webroot', 'horde') . '/login.php', true); + $url = Horde_Util::addParameter($url, 'url', Horde::selfUrl(true)); + header('Location: ' . $url); + exit; + } else { + Horde::fatal($details->getMessage(), __FILE__, __LINE__); + } +} + +// Check permissions on this ticket. +if (!count(Whups::permissionsFilter($whups_driver->getHistory($id), 'comment', Horde_Perms::READ))) { + Horde::fatal(sprintf(_("You are not allowed to view ticket %d."), $id), __FILE__, __LINE__); +} + +if (empty($conf['vfs']['type'])) { + Horde::fatal(_("The VFS backend needs to be configured to enable attachment uploads."), __FILE__, __LINE__); +} + +require_once 'VFS.php'; +$vfs = VFS::factory($conf['vfs']['type'], Horde::getDriverConfig('vfs')); +if (is_a($vfs, 'PEAR_Error')) { + Horde::fatal($vfs, __FILE__, __LINE__); +} else { + $data = $vfs->read(WHUPS_VFS_ATTACH_PATH . '/' . $id, $filename); +} +if (is_a($data, 'PEAR_Error')) { + Horde::fatal(sprintf(_("Access denied to %s"), $filename), __FILE__, __LINE__); +} + +/* Run through action handlers */ +switch ($actionID) { +case 'download_file': + $browser->downloadHeaders($filename, null, false, strlen($data)); + echo $data; + exit; + +case 'view_file': + $mime_part = new Horde_Mime_Part(); + $mime_part->setType(Horde_Mime_Magic::extToMime($type)); + $mime_part->setContents($data); + $mime_part->setName($filename); + + $viewer = Horde_Mime_Viewer::factory($mime_part); + + $ret = $viewer->render('full'); + reset($ret); + $key = key($ret); + + if (strpos($ret[$key]['type'], 'text/html') !== false) { + require WHUPS_BASE . '/templates/common-header.inc'; + echo $ret[$key]['data']; + require $registry->get('templates', 'horde') . '/common-footer.inc'; + } else { + $browser->downloadHeaders($ret[$key]['name'], $ret[$key]['type'], true, strlen($ret[$key]['data'])); + echo $ret[$key]['data']; + } + exit; +}
'; + } + + function render($transaction, &$vars) + { + global $prefs, $conf, $registry; + static $canUpdate, $comment_count = 0; + + if (!isset($canUpdate)) { + $canUpdate = Horde_Auth::getAuth() && + Whups::hasPermission($vars->get('queue'), 'queue', 'update'); + } + + $comment = ''; + $private = false; + $changes = array(); + + $changelist = $vars->get('changes'); + if (!$changelist) { + return ''; + } + + /* Format each change in this history entry, including comments, + * etc. */ + foreach ($changelist as $change) { + switch ($change['type']) { + case 'summary': + $changes[] = sprintf(_("Summary ⇒ %s"), + htmlspecialchars($change['value'])); + break; + + case 'attachment': + $ticket = $vars->get('ticket_id'); + if ($file = Whups::getAttachments($ticket, $change['value'])) { + $changes[] = sprintf(_("New Attachment: %s"), + Whups::attachmentUrl($ticket, $file, + $vars->get('queue'))); + } else { + $changes[] = sprintf(_("New Attachment: %s"), + htmlspecialchars($change['value'])); + } + break; + + case 'delete-attachment': + $changes[] = sprintf(_("Deleted Attachment: %s"), + htmlspecialchars($change['value'])); + break; + + case 'assign': + $changes[] = sprintf(_("Assigned to %s"), + Whups::formatUser($change['value'], false, + true, true)); + break; + + case 'unassign': + $changes[] = sprintf(_("Taken from %s"), + Whups::formatUser($change['value'], false, + true, true)); + break; + + case 'comment': + $comment = $change['comment']; + $private = !empty($change['private']); + if ($comment) { + $reply = + Horde::link( + Horde::applicationUrl( + Horde_Util::addParameter( + $canUpdate ? 'ticket/update.php' : 'ticket/comment.php', + array('id' => $vars->get('ticket_id'), + 'transaction' => $transaction)))) + . _("Reply to this comment") . ''; + } + break; + + case 'queue': + $changes[] = sprintf(_("Queue ⇒ %s"), + htmlspecialchars($change['label'])); + break; + + case 'version': + $changes[] = sprintf(_("Version ⇒ %s"), + htmlspecialchars($change['label'])); + break; + + case 'type': + $changes[] = sprintf(_("Type ⇒ %s"), + htmlspecialchars($change['label'])); + break; + + case 'state': + $changes[] = sprintf(_("State ⇒ %s"), + htmlspecialchars($change['label'])); + break; + + case 'priority': + $changes[] = sprintf(_("Priority ⇒ %s"), + htmlspecialchars($change['label'])); + break; + + case 'attribute': + $changes[] = sprintf(_("%s ⇒ %s"), + htmlspecialchars($change['label']), + htmlspecialchars($change['value'])); + break; + + case 'due': + if ($change['label']) { + $changes[] = sprintf( + _("Due ⇒ %s"), + strftime($prefs->getValue('date_format'), + $change['label'])); + } + break; + } + } + + if ($comment) { + $flowed = new Horde_Text_Flowed($comment); + $flowed->setDelSp(true); + $comment = $flowed->toFlowed(false); + $comment = Horde_Text_Filter::filter( + $comment, array('text2html', 'simplemarkup', 'highlightquotes'), + array(array('parselevel' => Horde_Text_Filter_Text2html::MICRO, 'class' => null), + array(), array())); + if ($prefs->getValue('autolink_tickets') && + $conf['prefs']['autolink_terms']) { + $term_regex = '/(' . $conf['prefs']['autolink_terms'] + . ')\s*#?(\d+)/i'; + $comment = preg_replace_callback($term_regex, + array(&$this, '_autolink'), + $comment); + } + + $comment_count++; + if ($private) { + $comment_label = Horde::img('locked.png', '', null, $registry->getImageDir('horde')) + . sprintf(_("Comment #%d (Private)"), $comment_count); + } else { + $comment_label = sprintf(_("Comment #%d"), $comment_count); + } + array_unshift($changes, '' + . $comment_label + . ''); + } + + if (count($changes)) { + ob_start(); + $class = $private ? 'pc' : 'c'; +?> +
+ + + + + + + + + + + + +
getValue('date_format'), $vars->get('timestamp')) ?>get('user_id') ? Whups::formatUser($vars->get('user_id'), false, true, true) : ' ' ?>', $changes) ?>
+
+ +
+
 
+
+' . Horde::link($url, 'View ' . $matches[0]) + . $matches[0] . '
'; + $state = $GLOBALS['whups_driver']->getTicketState($matches[2]); + if (!is_a($state, 'PEAR_Error') && + $state['state_category'] == 'resolved') { + $link = '' . $link . ''; + } + return $link; + } + + function end() + { + echo '