diff --git a/PHPCI/Application.php b/PHPCI/Application.php
index 88380c87..a8790804 100644
--- a/PHPCI/Application.php
+++ b/PHPCI/Application.php
@@ -22,6 +22,11 @@ use PHPCI\Model\Build;
*/
class Application extends b8\Application
{
+ /**
+ * @var \PHPCI\Controller
+ */
+ protected $controller;
+
/**
* Initialise PHPCI - Handles session verification, routing, etc.
*/
@@ -100,7 +105,7 @@ class Application extends b8\Application
$this->response->setContent($view->render());
}
- if ($this->response->hasLayout()) {
+ if ($this->response->hasLayout() && $this->controller->layout) {
$this->setLayoutVariables($this->controller->layout);
$this->controller->layout->content = $this->response->getContent();
diff --git a/PHPCI/Controller.php b/PHPCI/Controller.php
index b065e857..5fd22594 100644
--- a/PHPCI/Controller.php
+++ b/PHPCI/Controller.php
@@ -30,6 +30,11 @@ class Controller extends \b8\Controller
*/
protected $view;
+ /**
+ * @var \b8\View
+ */
+ public $layout;
+
/**
* Initialise the controller.
*/
diff --git a/PHPCI/Helper/Lang.php b/PHPCI/Helper/Lang.php
index 1877426c..c86de1aa 100644
--- a/PHPCI/Helper/Lang.php
+++ b/PHPCI/Helper/Lang.php
@@ -13,6 +13,7 @@ use b8\Config;
/**
* Languages Helper Class - Handles loading strings files and the strings within them.
+ *
* @package PHPCI\Helper
*/
class Lang
@@ -23,6 +24,7 @@ class Lang
/**
* Get a specific string from the language file.
+ *
* @param $string
* @return mixed|string
*/
@@ -48,6 +50,7 @@ class Lang
/**
* Get the currently active language.
+ *
* @return string|null
*/
public static function getLanguage()
@@ -57,7 +60,9 @@ class Lang
/**
* Try and load a language, and if successful, set it for use throughout the system.
+ *
* @param $language
+ *
* @return bool
*/
public static function setLanguage($language)
@@ -73,6 +78,7 @@ class Lang
/**
* Return a list of available languages and their names.
+ *
* @return array
*/
public static function getLanguageOptions()
@@ -90,6 +96,7 @@ class Lang
/**
* Get the strings for the currently active language.
+ *
* @return string[]
*/
public static function getStrings()
@@ -99,6 +106,7 @@ class Lang
/**
* Initialise the Language helper, try load the language file for the user's browser or the configured default.
+ *
* @param Config $config
*/
public static function init(Config $config)
@@ -137,6 +145,7 @@ class Lang
/**
* Load a specific language file.
+ *
* @return string[]|null
*/
protected static function loadLanguage()
@@ -168,4 +177,24 @@ class Lang
}
}
}
+
+ /**
+ * Create a time tag for localization.
+ *
+ * See http://momentjs.com/docs/#/displaying/format/ for a list of supported formats.
+ *
+ * @param \DateTime $dateTime The dateTime to represent.
+ * @param string $format The moment.js format to use.
+ *
+ * @return string The formatted tag.
+ */
+ public static function formatDateTime(\DateTime $dateTime, $format = 'lll')
+ {
+ return sprintf(
+ '',
+ $dateTime->format(\DateTime::ISO8601),
+ $format,
+ $dateTime->format(\DateTime::RFC2822)
+ );
+ }
}
diff --git a/PHPCI/Helper/SshKey.php b/PHPCI/Helper/SshKey.php
index ca12a815..47bd85bd 100644
--- a/PHPCI/Helper/SshKey.php
+++ b/PHPCI/Helper/SshKey.php
@@ -63,7 +63,7 @@ class SshKey
*/
public function canGenerateKeys()
{
- $keygen = @shell_exec('ssh-keygen -h');
+ $keygen = @shell_exec('ssh-keygen --help');
$canGenerateKeys = !empty($keygen);
return $canGenerateKeys;
diff --git a/PHPCI/Languages/lang.fr.php b/PHPCI/Languages/lang.fr.php
index bd85bccd..9e7cd339 100644
--- a/PHPCI/Languages/lang.fr.php
+++ b/PHPCI/Languages/lang.fr.php
@@ -14,21 +14,21 @@ $strings = array(
// Log in:
'log_in_to_phpci' => 'Connectez-vous à PHPCI',
'login_error' => 'Adresse email ou mot de passe invalide',
- 'forgotten_password_link' => 'Mot de passe oublié ?',
+ 'forgotten_password_link' => 'Mot de passe oublié ?',
'reset_emailed' => 'Nous vous avons envoyé un email avec un lien pour réinitialiser votre mot de passe.',
'reset_header' => 'Pas d\'inquiétude
Entrez simplement votre adresse email ci-dessous
et nous vous enverrons un message avec un lien pour réinitialiser votre mot de passe.',
'reset_email_address' => 'Entrez votre adresse email:',
'reset_send_email' => 'Envoyer le mail',
'reset_enter_password' => 'Veuillez entrer un nouveau mot de passe',
- 'reset_new_password' => 'Nouveau mot de passe :',
+ 'reset_new_password' => 'Nouveau mot de passe :',
'reset_change_password' => 'Modifier le mot de passe',
'reset_no_user_exists' => 'Il n\'existe aucun utilisateur avec cette adresse email, merci de réessayer.',
'reset_email_body' => 'Bonjour %s,
Vous avez reçu cet email parce qu\'une demande de réinitialisation de mot de passe a été faite pour votre compte PHPCI.
-Si c\'est bien vous, merci de cliquer sur le lien suivant pour réinitialiser votre mot de passe : %ssession/reset-password/%d/%s
+Si c\'est bien vous, merci de cliquer sur le lien suivant pour réinitialiser votre mot de passe : %ssession/reset-password/%d/%s
Sinon, merci d\'ignorer ce message.
@@ -49,9 +49,9 @@ PHPCI',
'n_builds_running' => '%d builds en cours d\'exécution',
'edit_profile' => 'Éditer le profil',
'sign_out' => 'Déconnexion',
- 'branch_x' => 'Branche : %s',
- 'created_x' => 'Créé à : %s',
- 'started_x' => 'Démarré à : %s',
+ 'branch_x' => 'Branche : %s',
+ 'created_x' => 'Créé à : %s',
+ 'started_x' => 'Démarré à : %s',
// Sidebar
'hello_name' => 'Salut %s',
@@ -67,19 +67,19 @@ PHPCI',
'delete_project' => 'Supprimer le projet',
// Project Summary:
- 'no_builds_yet' => 'Aucun build pour le moment!',
- 'x_of_x_failed' => '%d parmis les derniers %d builds ont échoué.',
- 'x_of_x_failed_short' => '%d / %d ont échoué.',
- 'last_successful_build' => ' Le dernier build qui a réussi est %s.',
- 'never_built_successfully' => ' Aucun build n\'a été exécuté avec succès sur ce projet.',
- 'all_builds_passed' => 'Les derniers %d builds ont réussis.',
- 'all_builds_passed_short' => '%d / %d ont réussis.',
- 'last_failed_build' => ' Le dernier build en échec est %s.',
- 'never_failed_build' => ' Ce projet n\'a jamais eu un build en échec.',
+ 'no_builds_yet' => 'Aucun build pour le moment !',
+ 'x_of_x_failed' => '%d des %d derniers builds ont échoué.',
+ 'x_of_x_failed_short' => '%d échecs / %d.',
+ 'last_successful_build' => ' Le dernier build réussi date du %s.',
+ 'never_built_successfully' => ' Aucun build de ce projet n\'a réussi.',
+ 'all_builds_passed' => 'Les %d derniers builds ont réussi.',
+ 'all_builds_passed_short' => '%d réussites / %d.',
+ 'last_failed_build' => ' Le dernier build en échec date du %s.',
+ 'never_failed_build' => ' Aucun build de ce projet n\'a échoué.',
'view_project' => 'Voir le projet',
// Timeline:
- 'latest_builds' => 'Les derniers Builds',
+ 'latest_builds' => 'Derniers builds',
'pending' => 'En attente',
'running' => 'En cours',
'success' => 'Terminé',
@@ -102,8 +102,8 @@ PHPCI',
'local' => 'Chemin local',
'hg' => 'Mercurial',
- 'where_hosted' => 'Où est hébergé votre projet ?',
- 'choose_github' => 'Choisissez un dépôt GitHub :',
+ 'where_hosted' => 'Où est hébergé votre projet ?',
+ 'choose_github' => 'Choisissez un dépôt GitHub :',
'repo_name' => 'Nom du dépôt / URL (distance) ou chemin (local)',
'project_title' => 'Titre du projet',
@@ -112,7 +112,7 @@ PHPCI',
'build_config' => 'Configuration PHPCI spécifique pour ce projet
(si vous ne pouvez pas ajouter de fichier phpci.yml à la racine du dépôt)',
'default_branch' => 'Nom de la branche par défaut',
- 'allow_public_status' => 'Activer la page de statut publique et l\'image pour ce projet ?',
+ 'allow_public_status' => 'Activer la page de statut publique et l\'image pour ce projet ?',
'save_project' => 'Enregistrer le projet',
'error_mercurial' => 'Les URLs de dépôt Mercurial doivent commencer par http:// ou https://',
@@ -155,7 +155,7 @@ PHPCI',
'committed_by_x' => 'Committé par %s',
- 'commit_id_x' => 'Commit: %s',
+ 'commit_id_x' => 'Commit : %s',
'chart_display' => 'Ce graphique s\'affichera une fois que le build sera terminé.',
@@ -207,7 +207,7 @@ PHPCI',
'update_your_details' => 'Mettre à jour vos préférences',
'your_details_updated' => 'Vos préférences ont été bien mises à jour.',
'add_user' => 'Ajouter un utilisateur',
- 'is_admin' => 'Est-il administrateur ?',
+ 'is_admin' => 'Est-il administrateur ?',
'yes' => 'Oui',
'no' => 'Non',
'edit' => 'Éditer',
@@ -287,17 +287,17 @@ PHPCI',
'config_path' => 'Chemin vers le fichier de configuration',
'install_phpci' => 'Installer PHPCI',
'welcome_to_phpci' => 'Bienvenue sur PHPCI',
- 'please_answer' => 'Merci de répondre aux questions suivantes:',
+ 'please_answer' => 'Merci de répondre aux questions suivantes :',
'phpci_php_req' => 'PHPCI requiert au moins PHP 5.3.8 pour fonctionner.',
- 'extension_required' => 'Extensions requises: %s',
+ 'extension_required' => 'Extensions requises : %s',
'function_required' => 'PHPCI doit être capable d\'appeler la fonction %s(). Est-ce qu\'elle est désactivée dans votre php.ini?',
'requirements_not_met' => 'PHPCI ne peut pas être installé parce que toutes les conditions requises ne sont pas respectées.
Merci de corriger les erreurs ci-dessus avant de continuer.',
'must_be_valid_email' => 'Doit être une adresse email valide.',
'must_be_valid_url' => 'Doit être une URL valide.',
- 'enter_name' => 'Nom de l\'admin:',
- 'enter_email' => 'Email de l\'admin:',
- 'enter_password' => 'Mot de passe de l\'admin:',
+ 'enter_name' => 'Nom de l\'admin :',
+ 'enter_email' => 'Email de l\'admin :',
+ 'enter_password' => 'Mot de passe de l\'admin :',
'enter_phpci_url' => 'Votre URL vers PHPCI (par exemple "http://phpci.local"): ',
'enter_db_host' => 'Merci d\'entrer le nom d\'hôte MySQL [localhost]: ',
@@ -306,7 +306,7 @@ PHPCI',
'enter_db_pass' => 'Merci d\'entrer le mot de passe MySQL: ',
'could_not_connect' => 'PHPCI ne peut pas se connecter à MySQL à partir des informations fournies. Veuillez réessayer..',
'setting_up_db' => 'Paramétrage de la base de données... ',
- 'user_created' => 'Le compte utilisateur a été créé!',
+ 'user_created' => 'Le compte utilisateur a été créé !',
'failed_to_create' => 'PHPCI n\'a pas réussi à créer votre compte admin.',
'config_exists' => 'Le fichier de configuration PHPCI existe et n\'est pas vide.',
'update_instead' => 'Si vous essayez de mettre à jour PHPCI, merci d\'utiliser la commande phpci:update.',
@@ -365,7 +365,7 @@ PHPCI',
'n_emails_sent' => '%d emails envoyés.',
'n_emails_failed' => '%d emails dont l\'envoi a échoué.',
'unable_to_set_env' => 'Impossible d\'initialiser la variable d\'environnement',
- 'tag_created' => 'Tag créé par PHPCI: %s',
+ 'tag_created' => 'Tag créé par PHPCI : %s',
'x_built_at_x' => '%PROJECT_TITLE% construit à %BUILD_URI%',
'hipchat_settings' => 'Merci de définir une "room" et un "authToken" pour le plugin hipchat_notify',
'irc_settings' => 'Vous devez configurer un serveur, une "room" et un "nick".',
diff --git a/PHPCI/Languages/lang.ru.php b/PHPCI/Languages/lang.ru.php
index 4abc9721..dfef84d9 100644
--- a/PHPCI/Languages/lang.ru.php
+++ b/PHPCI/Languages/lang.ru.php
@@ -84,7 +84,7 @@ PHPCI',
'success' => 'Успешно',
'successful' => 'Успешна',
'failed' => 'Провалена',
- 'manual_build' => 'Ручной сборки',
+ 'manual_build' => 'Запущена вручную',
// Add/Edit Project:
'new_project' => 'Новый проект',
diff --git a/PHPCI/Model/Build.php b/PHPCI/Model/Build.php
index b5928cfe..5561d51e 100644
--- a/PHPCI/Model/Build.php
+++ b/PHPCI/Model/Build.php
@@ -194,6 +194,10 @@ class Build extends BuildBase
return $rtn;
}
+ /**
+ * Returns the commit message for this build.
+ * @return string
+ */
public function getCommitMessage()
{
$rtn = htmlspecialchars($this->data['commit_message']);
diff --git a/PHPCI/Plugin/Email.php b/PHPCI/Plugin/Email.php
index 98b226e3..7c5171d6 100644
--- a/PHPCI/Plugin/Email.php
+++ b/PHPCI/Plugin/Email.php
@@ -182,7 +182,7 @@ class Email implements \PHPCI\Plugin
$addresses[] = $this->options['default_mailto_address'];
return $addresses;
}
- return $addresses;
+ return array_unique($addresses);
}
/**
diff --git a/PHPCI/Plugin/Pgsql.php b/PHPCI/Plugin/Pgsql.php
index 9a5f630c..9d0f924d 100644
--- a/PHPCI/Plugin/Pgsql.php
+++ b/PHPCI/Plugin/Pgsql.php
@@ -83,7 +83,7 @@ class Pgsql implements \PHPCI\Plugin
$pdo = new PDO('pgsql:host=' . $this->host, $this->user, $this->pass, $opts);
foreach ($this->queries as $query) {
- $pdo->query($query);
+ $pdo->query($this->phpci->interpolate($query));
}
} catch (\Exception $ex) {
$this->phpci->logFailure($ex->getMessage());
diff --git a/PHPCI/Plugin/Sqlite.php b/PHPCI/Plugin/Sqlite.php
index 1ffdcc88..f80ece3d 100644
--- a/PHPCI/Plugin/Sqlite.php
+++ b/PHPCI/Plugin/Sqlite.php
@@ -70,7 +70,7 @@ class Sqlite implements \PHPCI\Plugin
$pdo = new PDO('sqlite:' . $this->path, $opts);
foreach ($this->queries as $query) {
- $pdo->query($query);
+ $pdo->query($this->phpci->interpolate($query));
}
} catch (\Exception $ex) {
$this->phpci->logFailure($ex->getMessage());
diff --git a/PHPCI/Service/BuildService.php b/PHPCI/Service/BuildService.php
index b4721779..ca2336c8 100644
--- a/PHPCI/Service/BuildService.php
+++ b/PHPCI/Service/BuildService.php
@@ -100,6 +100,7 @@ class BuildService
$build = new Build();
$build->setValues($data);
$build->setCreated(new \DateTime());
+ $build->setStatus(0);
return $this->buildStore->save($build);
}
diff --git a/PHPCI/View/Home/index.phtml b/PHPCI/View/Home/index.phtml
index 11db43cf..6e27bb79 100644
--- a/PHPCI/View/Home/index.phtml
+++ b/PHPCI/View/Home/index.phtml
@@ -48,7 +48,7 @@
?>