From fe291cdc8c986732404406c7cb33bcfd9001657c Mon Sep 17 00:00:00 2001 From: Robbt Date: Sun, 19 Oct 2014 23:02:40 -0400 Subject: [PATCH 1/9] Added sort tracks by upload time to smart blocks criteria --- .../application/forms/SmartBlockCriteria.php | 23 +++++++++++- airtime_mvc/application/models/Block.php | 35 ++++++++++++++++--- .../scripts/form/smart-block-criteria.phtml | 13 ++++++- 3 files changed, 64 insertions(+), 7 deletions(-) diff --git a/airtime_mvc/application/forms/SmartBlockCriteria.php b/airtime_mvc/application/forms/SmartBlockCriteria.php index 990d5bde9..5423ab657 100644 --- a/airtime_mvc/application/forms/SmartBlockCriteria.php +++ b/airtime_mvc/application/forms/SmartBlockCriteria.php @@ -4,6 +4,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm private $criteriaOptions; private $stringCriteriaOptions; private $numericCriteriaOptions; + private $sortOptions; private $limitOptions; /* We need to know if the criteria value will be a string @@ -122,6 +123,17 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm } return $this->limitOptions; } + private function getSortOptions() + { + if (!isset($this->sortOptions)) { + $this->sortOptions = array( + "random" => _("random"), + "newest" => _("newest"), + "oldest" => _("oldest") + ); + } + return $this->sortOptions; + } public function init() @@ -288,6 +300,15 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm } $this->addElement($repeatTracks); + $sort = new Zend_Form_Element_Select('sp_sort_options'); + $sort->setAttrib('class', 'sp_input_select') + ->setDecorators(array('viewHelper')) + ->setMultiOptions($this->getSortOptions()); + if (isset($storedCrit["sort"])) { + $sort->setValue($storedCrit["sort"]["value"]); + } + $this->addElement($sort); + $limit = new Zend_Form_Element_Select('sp_limit_options'); $limit->setAttrib('class', 'sp_input_select') ->setDecorators(array('viewHelper')) @@ -344,7 +365,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm public function preValidation($params) { - $data = Application_Model_Block::organizeSmartPlyalistCriteria($params['data']); + $data = Application_Model_Block::organizeSmartPlaylistCriteria($params['data']); // add elelments that needs to be added // set multioption for modifier according to criteria_field $modRowMap = array(); diff --git a/airtime_mvc/application/models/Block.php b/airtime_mvc/application/models/Block.php index babef06a5..4cb183569 100644 --- a/airtime_mvc/application/models/Block.php +++ b/airtime_mvc/application/models/Block.php @@ -1156,7 +1156,7 @@ SQL; */ public function saveSmartBlockCriteria($p_criteria) { - $data = $this->organizeSmartPlyalistCriteria($p_criteria); + $data = $this->organizeSmartPlaylistCriteria($p_criteria); // saving dynamic/static flag $blockType = $data['etc']['sp_type'] == 0 ? 'static':'dynamic'; $this->saveType($blockType); @@ -1224,6 +1224,16 @@ SQL; } } + // insert sort info + $qry = new CcBlockcriteria(); + $qry->setDbCriteria("sort") + ->setDbModifier("N/A") + ->setDbValue($p_criteriaData['etc']['sp_sort_options']) + ->setDbBlockId($this->id) + ->save(); + + + // insert limit info $qry = new CcBlockcriteria(); $qry->setDbCriteria("limit") @@ -1231,7 +1241,8 @@ SQL; ->setDbValue($p_criteriaData['etc']['sp_limit_value']) ->setDbBlockId($this->id) ->save(); - + + // insert repeate track option $qry = new CcBlockcriteria(); $qry->setDbCriteria("repeat_tracks") @@ -1352,6 +1363,7 @@ SQL; "isrc_number" => _("ISRC"), "label" => _("Label"), "language" => _("Language"), + "utime" => _("Upload Time"), "mtime" => _("Last Modified"), "lptime" => _("Last Played"), "length" => _("Length"), @@ -1399,6 +1411,8 @@ SQL; "display_modifier"=>_($modifier)); } else if($criteria == "repeat_tracks") { $storedCrit["repeat_tracks"] = array("value"=>$value); + } else if($criteria == "sort") { + $storedCrit["sort"] = array("value"=>$value); } else { $storedCrit["crit"][$criteria][] = array( "criteria"=>$criteria, @@ -1507,8 +1521,20 @@ SQL; // check if file exists $qry->add("file_exists", "true", Criteria::EQUAL); $qry->add("hidden", "false", Criteria::EQUAL); + if (isset($storedCrit['sort'])) { + $sortTracks = $storedCrit['sort']['value']; + } + if ($sortTracks == 'newest') { + $qry->addDescendingOrderByColumn('utime'); + } + else if ($sortTracks == 'oldest') { + $qry->addAscendingOrderByColumn('utime'); + } + else { $qry->addAscendingOrderByColumn('random()'); } + + } // construct limit restriction $limits = array(); @@ -1537,9 +1563,8 @@ SQL; Logging::info($e); } } - - public static function organizeSmartPlyalistCriteria($p_criteria) - { + public static function organizeSmartPlaylistCriteria($p_criteria) + { $fieldNames = array('sp_criteria_field', 'sp_criteria_modifier', 'sp_criteria_value', 'sp_criteria_extra'); $output = array(); foreach ($p_criteria as $ele) { diff --git a/airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml b/airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml index b0ccc274a..9da7ca765 100644 --- a/airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml +++ b/airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml @@ -95,7 +95,18 @@
- +
+ Sort tracks by + element->getElement('sp_sort_options') ?> + element->getElement("sp_sort_options")->hasErrors()) : ?> + element->getElement("sp_sort_options")->getMessages() as $error): ?> + + + + + +
+
element->getElement('sp_limit_value')->getLabel() ?> element->getElement('sp_limit_value')?> From 7927a035be85367b79d053e54a5a3a473790259a Mon Sep 17 00:00:00 2001 From: Daniel James Date: Wed, 17 Dec 2014 16:01:30 +0000 Subject: [PATCH 2/9] Bring snapshots up to date with current packaging --- debian/changelog | 55 +++++++- debian/compat | 2 +- debian/control | 33 +++-- debian/copyright | 5 +- debian/etc/airtime.ini | 2 + debian/etc/apache.vhost.tpl | 24 +++- debian/etc/apache24.vhost.tpl | 37 +++++ debian/install | 2 +- debian/po/fr.po | 252 ++++++++++++++++++++++++++++++++++ debian/po/templates.pot | 14 +- debian/postinst | 55 ++++++-- gen-snapshot.sh | 6 +- 12 files changed, 449 insertions(+), 38 deletions(-) create mode 100644 debian/etc/apache24.vhost.tpl create mode 100644 debian/po/fr.po diff --git a/debian/changelog b/debian/changelog index 31d2f92ca..7b8a32bc3 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,59 @@ -airtime (2.5.1-1) unstable; urgency=low +airtime (2.5.2-1) unstable; urgency=low * Nightly development snapshot of Airtime 2.5.x series - -- Daniel James Thu, 24 Oct 2013 11:04:56 +0100 + -- Daniel James Wed, 17 Dec 2014 12:06:33 +0000 + +airtime (2.5.1-6) unstable; urgency=low + + * Newer Ubuntu distros use a real directory instead of a symlink for + /etc/php5/apache2/conf.d/ - thanks Mathieu + + -- Daniel James Wed, 17 Dec 2014 12:06:32 +0000 + +airtime (2.5.1-5) unstable; urgency=low + + * Don't set SSL compression to off, it is now the default, for backwards + compatibility with versions of Apache before 2.2.24 or 2.4.3 + + -- Daniel James Tue, 16 Dec 2014 16:42:26 +0000 + +airtime (2.5.1-4) unstable; urgency=low + + * Fix installation of Apache 2.4 file + * Disable SSLv3 and compression by default + + -- Daniel James Thu, 06 Nov 2014 15:15:21 +0000 + +airtime (2.5.1-3) unstable; urgency=low + + * Don't force https access in case of SSL issues + + -- Daniel James Fri, 18 Jul 2014 10:04:30 +0100 + +airtime (2.5.1-2) unstable; urgency=low + + * Upstream 2.5.1a security release + + -- Daniel James Tue, 15 Jul 2014 11:14:01 +0100 + +airtime (2.5.1-1) unstable; urgency=low + + * Upstream 2.5.1-ga release + + -- Daniel James Tue, 17 Dec 2013 11:02:35 +0000 + +airtime (2.5.0-3) unstable; urgency=low + + * Added dependency on php5-json for newer distros + + -- Daniel James Tue, 05 Nov 2013 13:33:10 +0000 + +airtime (2.5.0-2) unstable; urgency=low + + * Fixed error in upgrade handling + + -- Daniel James Thu, 24 Oct 2013 11:17:42 +0100 airtime (2.5.0-1) unstable; urgency=low diff --git a/debian/compat b/debian/compat index 7f8f011eb..ec635144f 100644 --- a/debian/compat +++ b/debian/compat @@ -1 +1 @@ -7 +9 diff --git a/debian/control b/debian/control index 92479d53b..20051bfa3 100644 --- a/debian/control +++ b/debian/control @@ -2,7 +2,7 @@ Source: airtime Section: web Priority: optional Maintainer: Daniel James -Build-Depends: debhelper (>= 7.0.50~), po-debconf +Build-Depends: debhelper (>= 9.20120909), po-debconf Standards-Version: 3.9.3 Homepage: http://www.sourcefabric.org/en/airtime/ @@ -16,25 +16,38 @@ Depends: apache2, flac, gzip (>= 1.3.12), libapache2-mod-php5, - libcamomile-ocaml-data, liquidsoap (>= 1.1.1~), + liquidsoap-plugin-alsa, + liquidsoap-plugin-ao, + liquidsoap-plugin-faad, + liquidsoap-plugin-flac, + liquidsoap-plugin-icecast, + liquidsoap-plugin-lame, + liquidsoap-plugin-mad, + liquidsoap-plugin-ogg, + liquidsoap-plugin-opus, + liquidsoap-plugin-portaudio, + liquidsoap-plugin-pulseaudio, + liquidsoap-plugin-taglib, + liquidsoap-plugin-voaacenc, + liquidsoap-plugin-vorbis, locales, lsof, monit, mp3gain, multitail, - odbc-postgresql, - patch, php5-cli, php5-curl, - php-db, php5-gd, - php-pear, + php5-json, php5-pgsql, + php-apc, + php-pear, pwgen, python, rabbitmq-server, silan (>= 0.3.1~), + ssl-cert, sudo, sysv-rc, tar (>= 1.22), @@ -42,10 +55,10 @@ Depends: apache2, vorbisgain, vorbis-tools, zendframework | libzend-framework-php, - ${misc:Depends} -Recommends: icecast2, php-apc -Suggests: airtime-audio-samples, - alsa-utils + ${misc:Depends}, + ${perl:Depends} +Recommends: icecast2 +Suggests: airtime-audio-samples, alsa-utils Description: open broadcast software for scheduling and station management. Airtime is an open source application that provides remote automation of a broadcast station. diff --git a/debian/copyright b/debian/copyright index 80d81c352..2d7dd13b7 100644 --- a/debian/copyright +++ b/debian/copyright @@ -5,11 +5,11 @@ Source: http://sourceforge.net/projects/airtime/files/ Files: * Copyright: - 2010-2012 Sourcefabric o.p.s + 2010-2014 Sourcefabric z.ú. 2004-2009 Media Development Loan Fund License: GPL-3 -Files: airtime/python_apps/pypo/* +Files: python_apps/pypo/* Copyright: Jonas Ohrstrom Paul Baranowski @@ -51,6 +51,7 @@ License: Expat Files: debian/* Copyright: + 2013-2014 Daniel James 2012 Alessio Treglia 2011 Robin Gareus License: GPL-2+ diff --git a/debian/etc/airtime.ini b/debian/etc/airtime.ini index e35f600b0..c75cf0025 100644 --- a/debian/etc/airtime.ini +++ b/debian/etc/airtime.ini @@ -3,3 +3,5 @@ memory_limit = 512M magic_quotes_gpc = Off file_uploads = On upload_tmp_dir = /tmp +apc.write_lock = 1 +apc.slam_defense = 0 diff --git a/debian/etc/apache.vhost.tpl b/debian/etc/apache.vhost.tpl index 3d7334107..9ee53b3e1 100644 --- a/debian/etc/apache.vhost.tpl +++ b/debian/etc/apache.vhost.tpl @@ -1,4 +1,10 @@ - + + SSLEngine on + SSLProtocol All -SSLv2 -SSLv3 + SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem + SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key + Header always set Strict-Transport-Security "max-age=31536000" + ServerName __SERVER_NAME__ #ServerAlias www.example.com @@ -7,6 +13,22 @@ DocumentRoot /usr/share/airtime/public DirectoryIndex index.php + + Options -Indexes FollowSymLinks MultiViews + AllowOverride all + Order allow,deny + Allow from all + + + + + ServerName __SERVER_NAME__ + + ServerAdmin __SERVER_ADMIN__ + + DocumentRoot /usr/share/airtime/public + Redirect permanent /login https://__SERVER_NAME__/login + SetEnv APPLICATION_ENV "production" diff --git a/debian/etc/apache24.vhost.tpl b/debian/etc/apache24.vhost.tpl new file mode 100644 index 000000000..b1a972b53 --- /dev/null +++ b/debian/etc/apache24.vhost.tpl @@ -0,0 +1,37 @@ + + SSLEngine on + SSLProtocol all -SSLv2 + SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem + SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key + Header always set Strict-Transport-Security "max-age=31536000" + + ServerName __SERVER_NAME__ + #ServerAlias www.example.com + + ServerAdmin __SERVER_ADMIN__ + + DocumentRoot /usr/share/airtime/public + DirectoryIndex index.php + + + AllowOverride all + Require all granted + + + + + ServerName __SERVER_NAME__ + + ServerAdmin __SERVER_ADMIN__ + + DocumentRoot /usr/share/airtime/public + DirectoryIndex index.php + Redirect permanent /login https://__SERVER_NAME__/login + + SetEnv APPLICATION_ENV "production" + + + AllowOverride All + Require all granted + + diff --git a/debian/install b/debian/install index 763300c99..a9ef74bbd 100644 --- a/debian/install +++ b/debian/install @@ -5,9 +5,9 @@ airtime/utils var/lib/airtime/tmp/ airtime/widgets usr/share/doc/airtime/examples/ -debian/etc/apache.conf /etc/airtime/ debian/etc/airtime.ini /etc/airtime/ debian/etc/apache.vhost.tpl /etc/airtime/ +debian/etc/apache24.vhost.tpl /etc/airtime/ debian/usr/bin/airtime-launch-browser /usr/bin/ debian/usr/share/applications/airtime.desktop /usr/share/applications/ diff --git a/debian/po/fr.po b/debian/po/fr.po new file mode 100644 index 000000000..f1edb9c08 --- /dev/null +++ b/debian/po/fr.po @@ -0,0 +1,252 @@ +# Debconf translation strings for Airtime. +# Copyright (C) 2012 Airtime contributors +# This file is distributed under the same license as the Airtime package. +# +# Translators: +# AlbertFR , 2014 +msgid "" +msgstr "" +"Project-Id-Version: Airtime\n" +"Report-Msgid-Bugs-To: contact@sourcefabric.org\n" +"POT-Creation-Date: 2012-07-05 16:49+0100\n" +"PO-Revision-Date: 2014-11-11 17:40+0000\n" +"Last-Translator: AlbertFR \n" +"Language-Team: French (France) (http://www.transifex.com/projects/p/airtime/language/fr_FR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr_FR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. Type: select +#. Choices +#: ../templates:1001 +msgid "dedicated v-host" +msgstr "v-host dédié" + +#. Type: select +#. Choices +#: ../templates:1001 +msgid "no thanks" +msgstr "non merci" + +#. Type: select +#. Description +#: ../templates:1002 +msgid "Create apache2 config:" +msgstr "Création de la configuration d'Apache2 :" + +#. Type: select +#. Description +#: ../templates:1002 +msgid "" +"This setup script can perform Apache web server configuration so that you " +"can connect to Airtime directly after this installation." +msgstr "Ce script d'installation peut effectuer la configuration du serveur Web Apache de sorte que vous pouvez vous connecter à Airtime directement après cette installation." + +#. Type: select +#. Description +#: ../templates:1002 +msgid "" +"Production systems should choose \"dedicated v-host\". This option will ask " +"for a server hostname (FQDN) and will create a minimal Apache virtual host " +"configuration that you can adapt." +msgstr "Les systèmes en production doivent choisir \"dedicated v-host\". Cette option vous demandera un nom d'hôte pour le du serveur (FQDN) et créera une configuration d'hôte virtuel Apache minimal que vous pourrez adapter." + +#. Type: select +#. Description +#: ../templates:1002 +msgid "" +"\"no, thanks\": no problem. You're welcome to set it up however you like. " +"Note that the files in /etc/airtime/ may come in handy doing so." +msgstr "\"Non, merci\": pas de problème. Vous êtes invités à configurer comme bon vous semble. Notez que les fichiers dans /etc/airtime/ peuvent être utiles à modifier..." + +#. Type: select +#. Choices +#: ../templates:2001 +msgid "remove default" +msgstr "Retirer défaut" + +#. Type: select +#. Choices +#: ../templates:2001 +msgid "no change" +msgstr "aucun changement" + +#. Type: select +#. Description +#: ../templates:2002 +msgid "Remove 000-default apache config:" +msgstr "Supprimer 000-default de la configuration d'Apache :" + +#. Type: select +#. Description +#: ../templates:2002 +msgid "" +"By default the Apache webserver is configured to send all virtual hosts to " +"the /var/www/ directory." +msgstr "Par défaut, le serveur Web Apache est configuré pour envoyer tous les hôtes virtuels vers le répertoire / var / www /." + +#. Type: select +#. Description +#: ../templates:2002 +msgid "" +"This option will invoke `sudo a2dissite default` and is recommended when " +"using a virtual host for Airtime." +msgstr "Cette option invoque `sudo a2dissite default` et est recommandé lorsque vous utilisez un hôte virtuel pour Airtime." + +#. Type: string +#. Description +#: ../templates:3001 +msgid "FQDN - Apache virtual host ServerName:" +msgstr "Nom de domaine complet - Nom de l'hôte virtuel du serveur Apache :" + +#. Type: string +#. Description +#: ../templates:3001 +msgid "" +"Enter the main hostname of the web server. The DNS of this name must resolve" +" to the Apache server running on this machine." +msgstr "Entrez le nom d'hôte principal du serveur web. Le DNS de ce nom doit être résolu par le serveur web Apache en cours d'exécution sur cette machine." + +#. Type: string +#. Description +#: ../templates:3001 +msgid "e.g. \"example.com\" or \"www.example.com\" (without the quotes)" +msgstr "ex. \"exemple.fr\" ou \"www.exemple.fr\" (sans les guillemets) " + +#. Type: string +#. Description +#: ../templates:3001 +msgid "" +"You can customize /etc/apache2/sites-enabled/airtime.vhost afterward and add" +" ServerAliases and further custom configuration." +msgstr "Vous pouvez personnaliser /etc/apache2/sites-enabled/airtime.vhost et ajouter des ServerAliases et autres configurations personnalisées." + +#. Type: string +#. Description +#: ../templates:4001 +msgid "Email of the ServerAdmin:" +msgstr "Courriel de l'administrateur du serveur :" + +#. Type: string +#. Description +#: ../templates:4001 +msgid "An email address is required for the virtual host configuration." +msgstr "Une adresse de courriel est requise pour la configuration de l'hôte virtuel." + +#. Type: boolean +#. Description +#: ../templates:5001 +msgid "Enable Icecast2 and set passwords automatically?" +msgstr "Activer Icecast2 et mettre les mots de passe automatiquement ?" + +#. Type: boolean +#. Description +#: ../templates:5001 +msgid "" +"This option enables a local Icecast streaming media server to start on boot," +" and configures passwords for both the Icecast server and Airtime." +msgstr "Cette option permet à un serveur Icecast local de s'activer au démarrage, et configure les mots de passe pour le serveur Icecast et Airtime." + +#. Type: boolean +#. Description +#: ../templates:5001 +msgid "" +"Note: these settings are here for convenience only. Strictly speaking they " +"should be done during Icecast installation - not Airtime installation." +msgstr "Remarque : ces paramètres sont ici pour plus de commodité seulement. Strictement parlant, ils doivent être effectués lors de l'installation d'Icecast - pas pendant l'installation d'Airtime." + +#. Type: boolean +#. Description +#: ../templates:5001 +msgid "" +"If you wish to set Icecast server passwords manually, you should answer No " +"here." +msgstr "Si vous souhaitez saisir manuellement les mots de passe du serveur Icecast, vous devez répondre Non ici." + +#. Type: string +#. Description +#: ../templates:6001 +msgid "Icecast2 hostname:" +msgstr "Nom de l'hote d'Icecast2 :" + +#. Type: string +#. Description +#: ../templates:6001 +msgid "" +"Specify the hostname of the Icecast server. Depending on your setup, this " +"might be the same as the Airtime ServerName. For testing purposes, you can " +"use the default of 'localhost'." +msgstr "Spécifier le nom d'hôte du serveur Icecast. Dépend de vos réglages, celui-ci peut être le même que le nom du serveur Airtime. A des fins de tests, vous pouvez utiliser par défaut 'localhost'." + +#. Type: string +#. Description +#: ../templates:7001 +msgid "Icecast2 Source Password:" +msgstr "Mot de passe Source Icecast 2 : " + +#. Type: string +#. Description +#: ../templates:7001 +msgid "Specify a password to send A/V sources to Icecast" +msgstr "Spécifier un mot de passe pour envoyer les sources A/V à Icecast" + +#. Type: string +#. Description +#: ../templates:8001 +msgid "Icecast2 Relay Password:" +msgstr "Mot de passe Relai d'Icecast2 :" + +#. Type: string +#. Description +#: ../templates:8001 +msgid "" +"Specify a password for stream relay access. This is not needed by Airtime, " +"however you should change it from the default to lock down your system." +msgstr "Indiquez un mot de passe pour l'accès flux relais. Ce n'est pas nécessaire par Airtime, mais vous pouvez changer la valeur par défaut pour verrouiller votre système." + +#. Type: string +#. Description +#: ../templates:9001 +msgid "Icecast2 Admin Password:" +msgstr "Mot de passe administrateur Icecast2 :" + +#. Type: string +#. Description +#: ../templates:9001 +msgid "" +"Specify the admin password for Icecast. You can access icecast2's admin " +"interface via http://localhost:8000/ - and both monitor connection as well " +"as block users." +msgstr "Spécifiez le mot de passe admin pour Icecast. Vous pouvez accéder à l'interface d'administration de icecast2 via http://localhost:8000/ - et surveiller les utilisateurs et flux." + +#. Type: string +#. Description +#: ../templates:10001 +msgid "Airtime Admin Password:" +msgstr "Mot de passe administrateur Airtime :" + +#. Type: string +#. Description +#: ../templates:10001 +msgid "" +"Specify a secure admin password for Airtime. You can access the Airtime " +"administration interface at http://localhost/ to set up other user accounts," +" upload media, create playlists and schedule shows." +msgstr "Indiquez un mot de passe admin sécurisé pour Airtime. Vous pouvez accéder à l'interface d'administration d'Airtime à l'adresse http://localhost/ pour configurer d'autres comptes d'utilisateurs, télécharger des médias, créer des playlists et gérer vos horaires d'émissions." + +#. Type: string +#. Description +#: ../templates:11001 +msgid "Airtime Storage Directory:" +msgstr "Dossier de stockage Airtime :" + +#. Type: string +#. Description +#: ../templates:11001 +msgid "" +"Specify the main storage path which Airtime will use, ending with a slash. " +"You can also specify watched folders in the Airtime administration " +"interface." +msgstr "Indiquez le chemin de stockage principal que va utiliser d'Airtime, se terminant par une barre oblique. Vous pouvez également spécifier des dossiers surveillés dans l'interface d'administration d'Airtime." diff --git a/debian/po/templates.pot b/debian/po/templates.pot index 6458b85ac..7e74b96f7 100644 --- a/debian/po/templates.pot +++ b/debian/po/templates.pot @@ -1,17 +1,17 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. +# Debconf translation strings for Airtime. +# Copyright (C) 2012 Airtime contributors +# This file is distributed under the same license as the Airtime package. +# Daniel James , 2012. # #, fuzzy msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: airtime@packages.debian.org\n" +"Project-Id-Version: Airtime 2.5.1\n" +"Report-Msgid-Bugs-To: contact@sourcefabric.org\n" "POT-Creation-Date: 2012-07-05 16:49+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"Language-Team: Airtime Localization \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/debian/postinst b/debian/postinst index f57c972de..a28c0252d 100755 --- a/debian/postinst +++ b/debian/postinst @@ -12,11 +12,12 @@ fi wwwdir="/usr/share/airtime" tmpdir="/var/lib/airtime/tmp" configdir="/etc/airtime" -includefile="${configdir}/apache.conf" a2tplfile="${configdir}/apache.vhost.tpl" +a24tplfile="${configdir}/apache24.vhost.tpl" phpinifile="${configdir}/airtime.ini" OLDVERSION="$2" NEWVERSION="2.5.1" +POSTGRESRUNNING=$(invoke-rc.d postgresql status | grep main || true) case "$1" in configure|reconfigure) @@ -55,11 +56,23 @@ case "$1" in db_get airtime/apache-serveradmin SA=$RET + # create the config directory if it doesn't exist if [ ! -d /etc/$webserver/sites-available/ ]; then install -d -m755 /etc/$webserver/sites-available/ fi - sed -e "s/__SERVER_ADMIN__/${SA}/;s/__SERVER_NAME__/${SN}/" \ + + # check for apache version 2.4, virtualhost syntax is different + APACHEVERSION=$(dpkg-query -f '${Version}' -W 'apache2' | cut -c 1-3) + + if [ "$APACHEVERSION" = "2.4" ] ; then + echo "Apache 2.4 detected, using newer access configuration..." + sed -e "s/__SERVER_ADMIN__/${SA}/g;s/__SERVER_NAME__/${SN}/g" \ + ${a24tplfile} > /etc/$webserver/sites-available/airtime-vhost.conf + + else + sed -e "s/__SERVER_ADMIN__/${SA}/g;s/__SERVER_NAME__/${SN}/g" \ ${a2tplfile} > /etc/$webserver/sites-available/airtime-vhost.conf + fi command -v a2ensite > /dev/null RETVAL=$? @@ -83,11 +96,11 @@ case "$1" in fi fi - # enable the rewrite module + # enable the alias, headers, rewrite and ssl modules command -v a2enmod > /dev/null RETVAL=$? if [ $RETVAL -eq 0 ]; then - a2enmod rewrite + a2enmod alias headers rewrite ssl fi # remove the default site, if requested to @@ -105,10 +118,21 @@ case "$1" in if [ ! -d /etc/$php/conf.d/ ]; then install -d -m755 /etc/$php/conf.d/ fi + + # Newer Ubuntu distros use a real directory instead of a symlink for /etc/php5/apache2/conf.d/ - thanks Mathieu! + if [ ! -d /etc/$php/$webserver/conf.d/ ]; then + install -d -m755 /etc/$php/$webserver/conf.d/ + fi + if [ ! -e /etc/$php/conf.d/airtime.ini ]; then ln -s ${phpinifile} /etc/$php/conf.d/airtime.ini fi + # Newer style configuration + if [ ! -e /etc/$php/$webserver/conf.d/airtime.ini ]; then + ln -s ${phpinifile} /etc/$php/$webserver/conf.d/airtime.ini + fi + # restart apache invoke-rc.d apache2 restart fi @@ -228,15 +252,20 @@ case "$1" in # don't run airtime-install if the user is doing a dpkg-reconfigure if [ "$1" = "reconfigure" ] || [ -n "$DEBCONF_RECONFIGURE" ] ; then echo "Reconfiguration complete." - else + + # exit here if the current install is too old to be upgraded + elif [ -n "$OLDVERSION" ] && [[ "${OLDVERSION:0:3}" < "2.3" ]]; then + echo "Upgrades from Airtime versions before 2.3.0 are not supported. Please back up your files and perform a clean install." - if [ -n "$OLDVERSION" ] && [[ "${OLDVERSION:0:3}" < "2.1" ]]; then - echo "Upgrades from Airtime versions before 2.1.0 are not supported. Please back up your files and perform a clean install." - - elif [ "${APACHESETUP}" == "no thanks" ]; then + # has the user chosen not to configure the web server? If so, don't run airtime-install + elif [ "${APACHESETUP}" == "no thanks" ]; then echo "Please run the ${tmpdir}/install_minimal/airtime-install script with the -d option after you have set up the web server." - else + # should postgres not be running yet, don't run airtime-install + elif [ -z "${POSTGRESRUNNING}" ]; then + echo "Please run the ${tmpdir}/install_minimal/airtime-install script with the -d option after you have started the database server." + + else mkdir -p /var/log/airtime cd $tmpdir/install_minimal/ @@ -244,6 +273,11 @@ case "$1" in if [ "${OLDVERSION:0:5}" == "${NEWVERSION}" ] ; then echo "Reinstallation detected..." echo | ./airtime-install --disable-deb-check -rp 2> /var/log/airtime/reinstallation-errors.log + + if [ -f /etc/init.d/icecast2 ] ; then + invoke-rc.d icecast2 restart || true + fi + else ./airtime-install --disable-deb-check 2> /var/log/airtime/installation-errors.log @@ -254,7 +288,6 @@ case "$1" in if test -x /usr/bin/update-menus; then update-menus; fi - fi fi ;; diff --git a/gen-snapshot.sh b/gen-snapshot.sh index bb96ddd53..b0c39a4ed 100755 --- a/gen-snapshot.sh +++ b/gen-snapshot.sh @@ -2,7 +2,7 @@ # Script for generating nightly Airtime snapshot packages # Run from the directory containg the files checked out from git -VERSION=2.5.1~$(date "+%Y%m%d") +VERSION=2.5.2~$(date "+%Y%m%d") BUILDDEST=/tmp/airtime-${VERSION}/ DEBDIR=`pwd`/debian @@ -23,9 +23,9 @@ cd ${BUILDDEST} || exit # Set the version of the snapshot package -sed -i "1s:(2.5.1-1):(${VERSION}):g" debian/changelog +sed -i "1s:(2.5.2-1):(${VERSION}):g" debian/changelog -# FIXES for 2.5.1 ############# +# FIXES for 2.5.2 ############# # these are all moved to debian/copyright rm airtime/python_apps/pypo/LICENSE From c614f4d711fb7edf737e3770819c2ad16cf3ecce Mon Sep 17 00:00:00 2001 From: localizer Date: Thu, 15 Jan 2015 11:12:14 +0000 Subject: [PATCH 3/9] updated translation resources --- airtime_mvc/locale/az/LC_MESSAGES/airtime.mo | Bin 474 -> 474 bytes airtime_mvc/locale/az/LC_MESSAGES/airtime.po | 2 +- .../locale/de_AT/LC_MESSAGES/airtime.mo | Bin 63465 -> 63465 bytes .../locale/de_AT/LC_MESSAGES/airtime.po | 2 +- .../locale/en_GB/LC_MESSAGES/airtime.mo | Bin 61416 -> 61416 bytes .../locale/en_GB/LC_MESSAGES/airtime.po | 2 +- .../locale/fr_FR/LC_MESSAGES/airtime.mo | Bin 68579 -> 68579 bytes .../locale/fr_FR/LC_MESSAGES/airtime.po | 2 +- .../locale/hy_AM/LC_MESSAGES/airtime.mo | Bin 487 -> 487 bytes .../locale/hy_AM/LC_MESSAGES/airtime.po | 2 +- airtime_mvc/locale/ka/LC_MESSAGES/airtime.mo | Bin 464 -> 464 bytes airtime_mvc/locale/ka/LC_MESSAGES/airtime.po | 2 +- .../locale/pt_BR/LC_MESSAGES/airtime.mo | Bin 57870 -> 57870 bytes .../locale/pt_BR/LC_MESSAGES/airtime.po | 2 +- 14 files changed, 7 insertions(+), 7 deletions(-) diff --git a/airtime_mvc/locale/az/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/az/LC_MESSAGES/airtime.mo index 6785de6785149cddaf880a948303f9c10017b49c..b09021a2cd7ca24e2c43ed84e510451d25726d9a 100644 GIT binary patch delta 24 fcmcb`e2aO)Dqd4v14CUyQw2jqD?`JL+m#ssV4(*B delta 24 fcmcb`e2aO)Dqa&^LnB=SQw2i\n" "Language-Team: Azerbaijani (http://www.transifex.com/projects/p/airtime/language/az/)\n" "MIME-Version: 1.0\n" diff --git a/airtime_mvc/locale/de_AT/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/de_AT/LC_MESSAGES/airtime.mo index 76942ed77169f8cb72764aaff613ab588c18a207..e07f4df00d62c69e88f6918ad5c9bef1c4b42c01 100644 GIT binary patch delta 28 kcmaF)p84f_<_+&A^P1`!80s3DDi|7C85(Z>J^5WS0JvHU`v3p{ delta 28 kcmaF)p84f_<_+&A^P1=y8tEFCDi|7A85?c>J^5WS0Jvof{Qv*} diff --git a/airtime_mvc/locale/de_AT/LC_MESSAGES/airtime.po b/airtime_mvc/locale/de_AT/LC_MESSAGES/airtime.po index d9ad52eea..dea02c8d1 100644 --- a/airtime_mvc/locale/de_AT/LC_MESSAGES/airtime.po +++ b/airtime_mvc/locale/de_AT/LC_MESSAGES/airtime.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: Airtime\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-13 13:55-0500\n" -"PO-Revision-Date: 2014-12-05 10:32+0000\n" +"PO-Revision-Date: 2015-01-15 11:11+0000\n" "Last-Translator: Daniel James \n" "Language-Team: German (Austria) (http://www.transifex.com/projects/p/airtime/language/de_AT/)\n" "MIME-Version: 1.0\n" diff --git a/airtime_mvc/locale/en_GB/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/en_GB/LC_MESSAGES/airtime.mo index 4ca8d6170c591ca8352b180d8743e6454998c90c..9e6d68da7a2bd014a4d42e6073f3d529c265e89e 100644 GIT binary patch delta 28 kcmaEHpZUdo<_$TscujQ;40R1n6$}ln3=KC|&dLu30H@drRsaA1 delta 28 kcmaEHpZUdo<_$TscujN-jdTr66$}lmjEy!|&dLu30H@;$SO5S3 diff --git a/airtime_mvc/locale/en_GB/LC_MESSAGES/airtime.po b/airtime_mvc/locale/en_GB/LC_MESSAGES/airtime.po index c17dfe604..753cb7f96 100644 --- a/airtime_mvc/locale/en_GB/LC_MESSAGES/airtime.po +++ b/airtime_mvc/locale/en_GB/LC_MESSAGES/airtime.po @@ -11,7 +11,7 @@ msgstr "" "Project-Id-Version: Airtime\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-13 13:55-0500\n" -"PO-Revision-Date: 2014-12-05 10:32+0000\n" +"PO-Revision-Date: 2015-01-15 11:11+0000\n" "Last-Translator: Daniel James \n" "Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/airtime/language/en_GB/)\n" "MIME-Version: 1.0\n" diff --git a/airtime_mvc/locale/fr_FR/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/fr_FR/LC_MESSAGES/airtime.mo index 6a2e72329569abb395919fa2debea10678ec0108..c07671388ea1364e46449220814eae90933d33e1 100644 GIT binary patch delta 17 ZcmaDno#pX#mJQ{zm<$a!SI){R1OQ362g3jW delta 17 ZcmaDno#pX#mJQ{zm<%j8SI){R1OQ3l2g(2d diff --git a/airtime_mvc/locale/fr_FR/LC_MESSAGES/airtime.po b/airtime_mvc/locale/fr_FR/LC_MESSAGES/airtime.po index ba2c9278b..26709555e 100644 --- a/airtime_mvc/locale/fr_FR/LC_MESSAGES/airtime.po +++ b/airtime_mvc/locale/fr_FR/LC_MESSAGES/airtime.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: Airtime\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-13 13:55-0500\n" -"PO-Revision-Date: 2014-12-23 10:09+0000\n" +"PO-Revision-Date: 2014-12-23 10:11+0000\n" "Last-Translator: AlbertFR \n" "Language-Team: French (France) (http://www.transifex.com/projects/p/airtime/language/fr_FR/)\n" "MIME-Version: 1.0\n" diff --git a/airtime_mvc/locale/hy_AM/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/hy_AM/LC_MESSAGES/airtime.mo index 114eb85d3a4f4bb0562bd40b8d65cead176f84ef..76a62ff71e4bd1b49eb96584e1ba089694036b22 100644 GIT binary patch delta 24 fcmaFP{G55hDqd4v14CUyQw2jqD?`JL+YJ~2V-W`_ delta 24 fcmaFP{G55hDqa&^LnB=SQw2i\n" "Language-Team: Armenian (Armenia) (http://www.transifex.com/projects/p/airtime/language/hy_AM/)\n" "MIME-Version: 1.0\n" diff --git a/airtime_mvc/locale/ka/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/ka/LC_MESSAGES/airtime.mo index 1cd4bb1acc82b4cd0c1fbbd2905c7f1a2fb944b6..6411fcaf96f5f070c16601edcee0a9c4c00ee534 100644 GIT binary patch delta 24 fcmcb>e1UnwDqd4v14CUyQw2jqD?`JL+a(zRUcme1UnwDqa&^LnB=SQw2i\n" "Language-Team: Georgian (http://www.transifex.com/projects/p/airtime/language/ka/)\n" "MIME-Version: 1.0\n" diff --git a/airtime_mvc/locale/pt_BR/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/pt_BR/LC_MESSAGES/airtime.mo index abd94d09de69dd70d843750bc615c04bec577c82..8267a2179c9002fa86dd0f88c31914aa714f8b1f 100644 GIT binary patch delta 28 jcmeA>!rXU+d4p>Quc@wqp{}8+f}x?6q2cDBjy;h8iv|fx delta 28 jcmeA>!rXU+d4p>QuZgaqk* Date: Thu, 15 Jan 2015 16:33:03 +0000 Subject: [PATCH 4/9] Fix link to user manual --- README | 2 +- airtime_mvc/application/configs/constants.php | 2 +- airtime_mvc/application/configs/navigation.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README b/README index 0c003c7e7..d83dbde3b 100644 --- a/README +++ b/README @@ -43,7 +43,7 @@ For installation from git on Debian wheezy, run: Quick links to our resources ---------------------------- -User manuals: http://www.sourcefabric.org/en/airtime/manuals/ +User manual: http://sourcefabric.booktype.pro/airtime-25-for-broadcasters/ Forums and mailing lists: http://forum.sourcefabric.org Bug tracker: http://dev.sourcefabric.org Source code: http://github.com/sourcefabric/Airtime diff --git a/airtime_mvc/application/configs/constants.php b/airtime_mvc/application/configs/constants.php index 7b27bc891..5ecf5d21e 100644 --- a/airtime_mvc/application/configs/constants.php +++ b/airtime_mvc/application/configs/constants.php @@ -11,7 +11,7 @@ define('COMPANY_SITE_URL' , 'http://sourcefabric.org/'); define('WHOS_USING_URL' , 'http://sourcefabric.org/en/airtime/whosusing'); define('TERMS_AND_CONDITIONS_URL' , 'http://www.sourcefabric.org/en/about/policy/'); define('PRIVACY_POLICY_URL' , 'http://www.sourcefabric.org/en/about/policy/'); -define('USER_MANUAL_URL' , 'http://www.sourcefabric.org/en/airtime/manuals/'); +define('USER_MANUAL_URL' , 'http://sourcefabric.booktype.pro/airtime-25-for-broadcasters/'); define('LICENSE_VERSION' , 'GNU AGPL v.3'); define('LICENSE_URL' , 'http://www.gnu.org/licenses/agpl-3.0-standalone.html'); diff --git a/airtime_mvc/application/configs/navigation.php b/airtime_mvc/application/configs/navigation.php index f3149f146..21a603900 100644 --- a/airtime_mvc/application/configs/navigation.php +++ b/airtime_mvc/application/configs/navigation.php @@ -123,7 +123,7 @@ $pages = array( ), array( 'label' => _('User Manual'), - 'uri' => "http://www.sourcefabric.org/en/airtime/manuals/", + 'uri' => "http://sourcefabric.booktype.pro/airtime-25-for-broadcasters/", 'target' => "_blank" ), array( From 620029c04e454cefd9419343aa5ebb41433f7555 Mon Sep 17 00:00:00 2001 From: Albert Santoni Date: Thu, 15 Jan 2015 16:45:14 -0500 Subject: [PATCH 5/9] Stop Chrome from flashing white between page loads --- airtime_mvc/public/css/styles.css | 1 + 1 file changed, 1 insertion(+) diff --git a/airtime_mvc/public/css/styles.css b/airtime_mvc/public/css/styles.css index a868e5df7..3f86566c2 100644 --- a/airtime_mvc/public/css/styles.css +++ b/airtime_mvc/public/css/styles.css @@ -10,6 +10,7 @@ body { } html, body { height: 100%; + background: #7f7f7f; } #login-page { From 5980f599e709c44fe6d86662c6e34188207bbde5 Mon Sep 17 00:00:00 2001 From: localizer Date: Mon, 19 Jan 2015 13:02:11 +0000 Subject: [PATCH 6/9] updated translation resources --- .../locale/hu_HU/LC_MESSAGES/airtime.mo | Bin 63839 -> 67078 bytes .../locale/hu_HU/LC_MESSAGES/airtime.po | 41 +++++++++--------- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/airtime_mvc/locale/hu_HU/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/hu_HU/LC_MESSAGES/airtime.mo index 761abbc13ae5727ae7a9cd5bdb65a8cb436718a1..8f7443eb1050a18755a098c35eef4c49975841e9 100644 GIT binary patch delta 20871 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 Z=L1+&p)6lAzCH!H9)EH{rSro|{TK8^79Icq delta 17829 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, 2014 # Zsolt Magyar , 2014 # Sourcefabric , 2012 +# Zsolt Magyar , 2015 msgid "" msgstr "" "Project-Id-Version: Airtime\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-13 13:55-0500\n" -"PO-Revision-Date: 2014-11-14 09:58+0000\n" -"Last-Translator: Daniel James \n" +"PO-Revision-Date: 2015-01-19 13:01+0000\n" +"Last-Translator: Zsolt Magyar \n" "Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/airtime/language/hu_HU/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -80,7 +81,7 @@ msgstr "Leúsztatás" msgid "" "%1$s copyright © %2$s All rights reserved.%3$sMaintained and " "distributed under the %4$s by %5$s" -msgstr "" +msgstr "%1$s szerzői & másolási jog; %2$s Minden jog fenntartva.%3$sFejleszti és forgalmazza %4$s alatt a %5$s" #: airtime_mvc/application/layouts/scripts/livestream.phtml:9 #: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:2 @@ -1097,13 +1098,13 @@ msgstr "Támogatási Visszajelzés Küldése" #: airtime_mvc/application/forms/RegisterAirtime.php:126 #, php-format msgid "Promote my station on %s" -msgstr "" +msgstr "Az állomásom közzététele a %s-on" #: airtime_mvc/application/forms/SupportSettings.php:150 #: airtime_mvc/application/forms/RegisterAirtime.php:151 #, php-format msgid "By checking this box, I agree to %s's %sprivacy policy%s." -msgstr "" +msgstr "A mező bejelölésével, elfogadom a %s %sadatvédelmi irányelveit%s." #: airtime_mvc/application/forms/SupportSettings.php:174 #: airtime_mvc/application/forms/RegisterAirtime.php:169 @@ -1142,7 +1143,7 @@ msgstr "Újraközvetítés?" #: airtime_mvc/application/forms/AddShowLiveStream.php:10 #, php-format msgid "Use %s Authentication:" -msgstr "" +msgstr "%s Hitelesítés Használata:" #: airtime_mvc/application/forms/AddShowLiveStream.php:16 msgid "Use Custom Authentication:" @@ -2614,7 +2615,7 @@ msgstr "Az Ön számára nem érhető el az alábbi erőforrás." #: airtime_mvc/application/controllers/ApiController.php:803 #, php-format msgid "File does not exist in %s" -msgstr "" +msgstr "A fájl nem elérhető itt: %s" #: airtime_mvc/application/controllers/ApiController.php:854 msgid "Bad request. no 'mode' parameter passed." @@ -2825,7 +2826,7 @@ msgstr "Memória" #: airtime_mvc/application/views/scripts/systemstatus/index.phtml:14 #, php-format msgid "%s Version" -msgstr "" +msgstr "%s Verzió" #: airtime_mvc/application/views/scripts/systemstatus/index.phtml:30 msgid "Disk Space" @@ -2910,13 +2911,13 @@ msgid "" " collected regularly in order to enhance your user experience.%2$sClick " "'Yes, help %1$s' and we'll make sure the features you use are constantly " "improving." -msgstr "" +msgstr "Segítsen az %1$s fejlesztésében, tudassa velünk az ötleteit. Az információk gyűjtése fokozza a felhasználás élményét.%2$sKlikk 'Igen, segítek az %1$s-nak' fejlesztésében, és igyekszek folyamatosan a funkciók használatának javításain fáradozni. " #: airtime_mvc/application/views/scripts/form/register-dialog.phtml:29 #: airtime_mvc/application/views/scripts/form/support-setting.phtml:29 #, php-format msgid "Click the box below to promote your station on %s." -msgstr "" +msgstr "Jelöld be a mezőt az állomásod közzétételéhez a %s-on." #: airtime_mvc/application/views/scripts/form/register-dialog.phtml:67 #: airtime_mvc/application/views/scripts/form/register-dialog.phtml:81 @@ -2962,7 +2963,7 @@ msgstr "Jelenlegi Tároló Mappa:" msgid "" "Rescan watched directory (This is useful if it is network mount and may be " "out of sync with %s)" -msgstr "" +msgstr "A figyelt mappa újraellenőrzése (Ez akkor hasznos, ha a hálózati csatolás nincs szinkronban az %s-al)" #: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:44 msgid "Remove watched directory" @@ -3017,7 +3018,7 @@ msgid "" "will be collected regularly in order to enhance your user experience.%sClick" " the 'Send support feedback' box and we'll make sure the features you use " "are constantly improving." -msgstr "" +msgstr "Segítse az %s fejlesztését azáltal, hogy a %s tudja, hogy Ön, hogyan használja azt. Információk összegyűjtése céljából, rendszerezve azokat, hogy fokozza a felhasználás élményét.%sKlikkeljen a 'Támogatási Visszajelzés Küldése' mezőbe és győződjön meg arról, hogy a funkciók használatának minősége folyamatosan javul." #: airtime_mvc/application/views/scripts/form/support-setting.phtml:46 msgid "" @@ -3280,12 +3281,12 @@ msgstr "Hallgatói Statisztika" #: airtime_mvc/application/views/scripts/dashboard/help.phtml:3 #, php-format msgid "Welcome to %s!" -msgstr "" +msgstr "Üdvözöljük az %s-nál!" #: airtime_mvc/application/views/scripts/dashboard/help.phtml:4 #, php-format msgid "Here's how you can get started using %s to automate your broadcasts: " -msgstr "" +msgstr "Itt van, hogyan tudod elindítani adásaid automatizálását használva az %s-t:" #: airtime_mvc/application/views/scripts/dashboard/help.phtml:7 msgid "" @@ -3334,12 +3335,12 @@ msgstr "Adásfolyam:" msgid "" "%1$s %2$s, the open radio software for scheduling and remote station " "management." -msgstr "" +msgstr "%1$s %2$s, a nyitott rádiós szoftver, az ütemezett és távoli állomás menedzsment." #: airtime_mvc/application/views/scripts/dashboard/about.phtml:22 #, php-format msgid "%1$s %2$s is distributed under the %3$s" -msgstr "" +msgstr "%1$s %2$s-ot %3$s mellett terjesztik" #: airtime_mvc/application/views/scripts/login/password-change.phtml:3 msgid "New password" @@ -3372,7 +3373,7 @@ msgstr "Vissza a belépéshez" msgid "" "Welcome to the %s demo! You can log in using the username 'admin' and the " "password 'admin'." -msgstr "" +msgstr "Üdvözöljük az %s demó változatában! Jelentkezzen be 'admin' felhasználónévvel és 'admin' jelszóval." #: airtime_mvc/application/views/scripts/partialviews/header.phtml:3 msgid "Previous:" @@ -3417,7 +3418,7 @@ msgstr "Az Ön próba ideje lejár" #: airtime_mvc/application/views/scripts/partialviews/trialBox.phtml:9 #, php-format msgid "Purchase your copy of %s" -msgstr "" +msgstr "Vásárolja meg az Ön %s másolatát" #: airtime_mvc/application/views/scripts/partialviews/trialBox.phtml:9 msgid "My Account" @@ -3733,7 +3734,7 @@ msgstr "A kapcsolódó műsorok tartalmait bármelyik adás előtt vagy után ke #: airtime_mvc/application/models/Scheduler.php:195 msgid "Cannot schedule a playlist that contains missing files." -msgstr "" +msgstr "Nem lehet ütemezni olyan lejátszási listát, amely tartalmaz hiányzó fájlokat." #: airtime_mvc/application/models/Scheduler.php:216 #: airtime_mvc/application/models/Scheduler.php:305 @@ -3808,7 +3809,7 @@ msgstr "Üdv. %s, \n\nErre a hivatkozásra kattintva visszaállíthatja a jelsza #: airtime_mvc/application/models/Auth.php:36 #, php-format msgid "%s Password Reset" -msgstr "" +msgstr "%s Jelszó Visszaállítás" #: airtime_mvc/application/services/CalendarService.php:50 msgid "Record file doesn't exist" From 974d4199515f1a452ef7d6aece5032871dc2a830 Mon Sep 17 00:00:00 2001 From: localizer Date: Mon, 19 Jan 2015 13:52:08 +0000 Subject: [PATCH 7/9] updated translation resources --- .../locale/hu_HU/LC_MESSAGES/airtime.mo | Bin 67078 -> 67078 bytes .../locale/hu_HU/LC_MESSAGES/airtime.po | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/airtime_mvc/locale/hu_HU/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/hu_HU/LC_MESSAGES/airtime.mo index 8f7443eb1050a18755a098c35eef4c49975841e9..aa239668585c687a5159ec1d274d81438e34c355 100644 GIT binary patch delta 17 YcmZqcVQK4O*-$=<$\n" "Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/airtime/language/hu_HU/)\n" "MIME-Version: 1.0\n" From c399250fbf99a2d4a2f1899eb00f01ed268d642f Mon Sep 17 00:00:00 2001 From: Albert Santoni Date: Mon, 19 Jan 2015 15:39:52 -0500 Subject: [PATCH 8/9] Updated credits --- CREDITS | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/CREDITS b/CREDITS index 826799c99..3c084e044 100644 --- a/CREDITS +++ b/CREDITS @@ -2,6 +2,19 @@ CREDITS ======= +Version 2.5.2 + +Albert Santoni (albert.santoni@sourcefabric.org) +Denise Rigato (denise.rigato@sourcefabric.org) +Cliff Wang (cliff.wang@sourcefabric.org) +Nareg Asmarian (nareg.asmarian@sourcefabric.org) +Daniel James (daniel.james@sourcefabric.org) + +Community Contributors: +Robbt E + + + Version 2.5.1 Albert Santoni (albert.santoni@sourcefabric.org) @@ -25,6 +38,7 @@ Community Contributors: John Chewter + Version 2.5.0 ------------- From 6ac5a2950f834497d0cdeedefc733d837a530bf9 Mon Sep 17 00:00:00 2001 From: drigato Date: Tue, 20 Jan 2015 11:32:15 -0500 Subject: [PATCH 9/9] SAAS-551: Cannot schedule shows due to overlapping show check bug --- airtime_mvc/application/forms/AddShowWhen.php | 32 +++++++++++++++---- .../application/services/ShowService.php | 10 +++--- 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/airtime_mvc/application/forms/AddShowWhen.php b/airtime_mvc/application/forms/AddShowWhen.php index 9644535b9..02fd5271b 100644 --- a/airtime_mvc/application/forms/AddShowWhen.php +++ b/airtime_mvc/application/forms/AddShowWhen.php @@ -209,8 +209,12 @@ class Application_Form_AddShowWhen extends Zend_Form_SubForm $interval = 'P21D'; } elseif ($formData["add_show_repeat_type"] == 5) { $interval = 'P28D'; - } elseif ($formData["add_show_repeat_type"] == 2) { + } elseif ($formData["add_show_repeat_type"] == 2 && $formData["add_show_monthly_repeat_type"] == 2) { $interval = 'P1M'; + } elseif ($formData["add_show_repeat_type"] == 2 && $formData["add_show_monthly_repeat_type"] == 3) { + list($weekNumberOfMonth, $dayOfWeek) = + Application_Service_ShowService::getMonthlyWeeklyRepeatInterval( + new DateTime($start_time, $showTimezone)); } /* Check first show @@ -287,12 +291,26 @@ class Application_Form_AddShowWhen extends Zend_Form_SubForm $this->getElement('add_show_duration')->setErrors(array(_('Cannot schedule overlapping shows'))); break 1; } else { - $repeatShowStart->setTimezone($showTimezone); - $repeatShowEnd->setTimezone($showTimezone); - $repeatShowStart->add(new DateInterval($interval)); - $repeatShowEnd->add(new DateInterval($interval)); - $repeatShowStart->setTimezone($utc); - $repeatShowEnd->setTimezone($utc); + if ($formData["add_show_repeat_type"] == 2 && $formData["add_show_monthly_repeat_type"] == 3) { + $monthlyWeeklyStart = new DateTime($repeatShowStart->format("Y-m"), + new DateTimeZone("UTC")); + $monthlyWeeklyStart->add(new DateInterval("P1M")); + $repeatShowStart = clone Application_Service_ShowService::getNextMonthlyWeeklyRepeatDate( + $monthlyWeeklyStart, + $formData["add_show_timezone"], + $formData['add_show_start_time'], + $weekNumberOfMonth, + $dayOfWeek); + $repeatShowEnd = clone $repeatShowStart; + $repeatShowEnd->add(new DateInterval("PT".$hours."H".$minutes."M")); + } else { + $repeatShowStart->setTimezone($showTimezone); + $repeatShowEnd->setTimezone($showTimezone); + $repeatShowStart->add(new DateInterval($interval)); + $repeatShowEnd->add(new DateInterval($interval)); + $repeatShowStart->setTimezone($utc); + $repeatShowEnd->setTimezone($utc); + } } } } diff --git a/airtime_mvc/application/services/ShowService.php b/airtime_mvc/application/services/ShowService.php index 5a2f22e63..0ffff6c77 100644 --- a/airtime_mvc/application/services/ShowService.php +++ b/airtime_mvc/application/services/ShowService.php @@ -1109,7 +1109,7 @@ SQL; $start = $this->getNextRepeatingPopulateStartDateTime($showDay); if (is_null($repeatInterval)&& $repeatType == REPEAT_MONTHLY_WEEKLY) { - $repeatInterval = $this->getMonthlyWeeklyRepeatInterval($start, $timezone); + $repeatInterval = self::getMonthlyWeeklyRepeatInterval($start, $timezone); } //DatePeriod in user's local time @@ -1212,7 +1212,7 @@ SQL; // We will only need this if the repeat type is MONTHLY_WEEKLY list($weekNumberOfMonth, $dayOfWeek) = - $this->getMonthlyWeeklyRepeatInterval( + self::getMonthlyWeeklyRepeatInterval( new DateTime($first_show, new DateTimeZone($timezone))); $this->repeatType = $showDay->getDbRepeatType(); @@ -1272,7 +1272,7 @@ SQL; $monthlyWeeklyStart = new DateTime($utcStartDateTime->format("Y-m"), new DateTimeZone("UTC")); $monthlyWeeklyStart->add(new DateInterval("P1M")); - $start = $this->getNextMonthlyWeeklyRepeatDate( + $start = self::getNextMonthlyWeeklyRepeatDate( $monthlyWeeklyStart, $timezone, $showDay->getDbStartTime(), @@ -1294,7 +1294,7 @@ SQL; * @param string $showStart * @param string $timezone user's local timezone */ - private function getMonthlyWeeklyRepeatInterval($showStart) + public static function getMonthlyWeeklyRepeatInterval($showStart) { $start = clone $showStart; $dayOfMonth = $start->format("j"); @@ -1369,7 +1369,7 @@ SQL; * @param string (i.e. 'first', 'second') $weekNumberOfMonth * @param string (i.e. 'Monday') $dayOfWeek */ - private function getNextMonthlyWeeklyRepeatDate( + public static function getNextMonthlyWeeklyRepeatDate( $start, $timezone, $startTime,