diff --git a/inc/media.php b/inc/media.php index c796743..69d633f 100644 --- a/inc/media.php +++ b/inc/media.php @@ -32,6 +32,10 @@ class Media extends PhpObject { $this->sSystemType = (substr(php_uname(), 0, 7) == "Windows")?'win':'unix'; } + public function getProjectCodeName() { + return $this->oProject->getProjectCodeName(); + } + public function getMediasInfo() { if(empty($this->asMedias)) { if($this->oProject->getProjectId()) { @@ -57,8 +61,15 @@ class Media extends PhpObject { public function addMedia($sMediaName, $sMethod='upload') { $sError = ''; - if(!$this->isProjectModeValid() && $sMethod!='sync') $sError = 'Le projet (id='.$this->oProject->getProjectId().') n\'est pas en mode "blog"'; - elseif($this->oDb->pingValue(self::MEDIA_TABLE, array('filename'=>$sMediaName)) && $sMethod!='sync') $sError = 'l\'image existe déjà'; + $asErrorParams = array(); + if(!$this->isProjectModeValid() && $sMethod!='sync') { + $sError = 'upload_wrong_mode'; + $asErrorParams[] = $this->oProject->getProjectCodeName(); + } + elseif($this->oDb->pingValue(self::MEDIA_TABLE, array('filename'=>$sMediaName)) && $sMethod!='sync') { + $sError = 'upload_media_exist'; + $asErrorParams[] = $sMediaName; + } else { //Add media to DB $asMediaInfo = $this->getMediaInfoFromFile($sMediaName); @@ -74,19 +85,14 @@ class Media extends PhpObject { if($sMethod=='sync') $iMediaId = $this->oDb->insertUpdateRow(self::MEDIA_TABLE, $asDbInfo, array(Db::getId(Project::PROJ_TABLE), 'filename')); else $iMediaId = $this->oDb->insertRow(self::MEDIA_TABLE, $asDbInfo); - if(!$iMediaId) $sError = 'l\'image n\'a pas pu être entrée en base'; + if(!$iMediaId) $sError = 'error_commit_db'; else { //Create thumbnail $this->getMediaThumbnail($sMediaName); } } - if($sError!='') { - $sError = 'Erreur lors de l\'ajout de "'.$sMediaName.'" : '.$sError; - $this->addError($sError); - } - - return $sError; + return Spot::getResult(($sError==''), $sError, $asErrorParams); } /** diff --git a/inc/project.php b/inc/project.php index 84f524f..3bfb712 100644 --- a/inc/project.php +++ b/inc/project.php @@ -130,7 +130,6 @@ class Project extends PhpObject { $asProject['geofile'] = Spot::addTimestampToFilePath(Geo::getFilePath($asProject['geofile'], GeoJson::EXT)); $asProject['codename'] = $sCodeName; - $asProject['timezone_desc'] = Spot::getTimeZoneDesc($asProject['timezone']); } return $bSpecificProj?$asProject:$asProjects; } diff --git a/inc/spot.php b/inc/spot.php index 26e4df0..862e045 100755 --- a/inc/spot.php +++ b/inc/spot.php @@ -19,8 +19,6 @@ class Spot extends Main //Database const POST_TABLE = 'posts'; - const FORMAT_TIME = 'd/m/Y à H:i'; - const FEED_CHUNK_SIZE = 15; /** @@ -126,9 +124,7 @@ class Spot extends Main 'consts' => array( 'geo_server' => Settings::GEO_SERVER, 'modes' => Project::MODES, - 'site_timezone' => Settings::TIMEZONE, - 'site_timezone_desc' => self::getTimeZoneDesc(Settings::TIMEZONE), - 'trans' => $this->oLang->getTranslations() + 'site_timezone' => Settings::TIMEZONE ) ), 'index', @@ -225,7 +221,7 @@ class Spot extends Main foreach($asMedias as $iIndex=>$asMedia) { $sTimeRef = $asMedia[$sTimeRefField]; if($sTimeRef >= $this->oProject->getActivePeriod('from') && $sTimeRef <= $this->oProject->getActivePeriod('to')) { - $asMedia['taken_on_formatted'] = date(self::FORMAT_TIME, strtotime($asMedia['taken_on'])); + $asMedia['taken_on_formatted'] = $this->getTimeFormat(strtotime($asMedia['taken_on'])); $asMedia['displayed_id'] = 'N°'.($iIndex + 1); $this->addTimeStamp($asMedia, strtotime($sTimeRef)); @@ -263,8 +259,8 @@ class Spot extends Main private function addTimeStamp(&$asData, $iTime) { $asData['unix_time'] = (int) $iTime; - $asData['relative_time'] = Toolbox::getDateTimeDesc($iTime, 'fr'); - $asData['formatted_time'] = date(self::FORMAT_TIME, $iTime); + $asData['relative_time'] = Toolbox::getDateTimeDesc($iTime, $this->oLang->getLanguage()); + $asData['formatted_time'] = $this->getTimeFormat($iTime); } public function getNewsFeed($iChunk=0) @@ -328,7 +324,7 @@ class Spot extends Main public function upload() { $this->oClassManagement->incClass('uploader', true); - $oUploader = new Uploader($this->oMedia); + $oUploader = new Uploader($this->oMedia, $this->oLang); return $oUploader->sBody; } @@ -355,7 +351,7 @@ class Spot extends Main $bSuccess = $this->oProject->setTimeZone($sValue); break; } - if(!$bSuccess) $sDesc = 'Issue committing to DB'; + if(!$bSuccess) $sDesc = Mask::LANG_PREFIX.'error_commit_db'; return self::getJsonResult($bSuccess, $sDesc, array('values'=>$this->oProject->getProject())); } @@ -380,10 +376,9 @@ class Spot extends Main return $iDegree.'°'.$iMinute.'\''.$fSecond.'"'.$sDirection; } - public static function getTimeZoneDesc($sTimeZone) { - $sCity = substr(strrchr($sTimeZone, '/'), 1); - return 'heure d'.(in_array(strtolower(substr($sCity, 0, 1)), array('a', 'e', 'i', 'o', 'u', 'h'))?'\'':'e ').$sCity; + public function getTimeFormat($iTime) { + $sDate = date('d/m/Y', $iTime); + $sTime = date('H:i', $iTime); + return $this->oLang->getTranslation('date_time', array($sDate, $sTime)); } -} - -?> \ No newline at end of file +} \ No newline at end of file diff --git a/inc/uploader.php b/inc/uploader.php index 1603090..9defd1a 100644 --- a/inc/uploader.php +++ b/inc/uploader.php @@ -8,12 +8,18 @@ class Uploader extends UploadHandler */ private $oMedia; + /** + * Languages + * @var Translator + */ + private $oLang; + public $sBody; - function __construct(&$oMedia) + function __construct(&$oMedia, &$oLang) { - $this->error_messages['wrong_project_mode'] = 'Le projet n\'est pas en mode "blog".'; $this->oMedia = &$oMedia; + $this->oLang = &$oLang; $this->sBody = ''; parent::__construct(array('image_versions'=>array(), 'accept_file_types'=>'/\.(gif|jpe?g|png|mov)$/i')); } @@ -23,7 +29,7 @@ class Uploader extends UploadHandler //Check project mode if(!$this->oMedia->isProjectModeValid()) { - $file->error = $this->get_error_message('wrong_project_mode'); + $file->error = $this->get_error_message('upload_wrong_mode', array($this->oMedia->getProjectCodeName())); $bResult = false; } @@ -34,10 +40,8 @@ class Uploader extends UploadHandler $file = parent::handle_file_upload($uploaded_file, $name, $size, $type, $error, $index, $content_range); if(empty($file->error)) { - $sError = $this->oMedia->addMedia($file->name); - if($sError!='') { - $file->error = $this->get_error_message($sError); - } + $asResult = $this->oMedia->addMedia($file->name); + if(!$asResult['result']) $file->error = $this->get_error_message($asResult['desc'], $asResult['data']); } return $file; @@ -46,6 +50,13 @@ class Uploader extends UploadHandler protected function body($sBodyPart) { $this->sBody .= $sBodyPart; } + + protected function get_error_message($sError, $asParams=array()) { + $sTranslatedError = $this->oLang->getTranslation($sError, $asParams); + if($sTranslatedError) return $sTranslatedError; + elseif(array_key_exists($sError, $this->error_messages)) return $this->error_messages[$sError]; + else return $sError; + } } /* diff --git a/languages/en.lang b/languages/en.lang index 2e3dfcb..388ccd4 100644 --- a/languages/en.lang +++ b/languages/en.lang @@ -1 +1,46 @@ -page_og_desc=Keep contact with François when he is off hiking \ No newline at end of file +locale = en_NZ +page_og_desc = Keep contact with François when he is off hiking +error_commit_db = Issue committing to DB + +admin_save_success = Saved + +track_main = Main track +track_offtrack = Off-track +track_hitchhiking = Hitchhiking + +upload_title = Picture & Video Uploads +upload_wrong_mode = Project "$0" is not in blog mode. No upload allowed +upload_success = $0 uploaded successfully +upload_media_exist = Picture $0 already exists + +post_message = Message +post_name = Name +post_new_message = New message +and = and + +map_satellite = Satellite +map_otm = Open Topo Map +map_ign_france = IGN (France) +map_ign_spain = IGN (Spain) +map_linz = LINZ (New Zealand) + +pic = Picture +pics = Pictures +pic_taken = taken on $0 +video = Video +video_taken = shot on $0 +add_on = added on $0 +click_watch = Click to watch video +click_zoom = Click to zoom +media_count = Media $0 / $1 + +city_time = $0 time + +project = Project +mode = Mode +code_name = Code name +start = Start +end = End + +date_time = $0 at $1 +time_zone = Time zone \ No newline at end of file diff --git a/languages/fr.lang b/languages/fr.lang index cc8b31f..a6b1600 100644 --- a/languages/fr.lang +++ b/languages/fr.lang @@ -1 +1,46 @@ -page_og_desc=Gardez le contact avec François lorsqu'il part sur les chemins \ No newline at end of file +locale = fr_FR +page_og_desc = Gardez le contact avec François lorsqu'il part sur les chemins +error_commit_db = Error lors de la requête SQL + +admin_save_success = Sauvegardé + +track_main = Trajet principal +track_offtrack = Variante +track_hitchhiking = Hors rando + +upload_title = Uploader photos & vidéos +upload_wrong_mode = Le projet "$0" n'est pas en mode blog. Aucun upload possible +upload_success = $0 a été uploadé +upload_media_exist = l'image $0 existe déjà + +post_message = Message +post_name = Nom +post_new_message = Nouveau message +and = et + +map_satellite = Satellite +map_otm = Open Topo Map +map_ign_france = IGN (France) +map_ign_spain = IGN (Espagne) +map_linz = LINZ (Nouvelle-Zélande) + +pic = Photo +pics = Photos +pic_taken = prise le $0 +video = Vidéo +video_taken = filmée le $0 +add_on = ajoutée le $0 +click_watch = Click pour voir la vidéo +click_zoom = Click pour zoomer +media_count = Média $0 sur $1 + +city_time = heure de $0 + +project = Projet +mode = Mode +code_name = Nom de code +start = Départ +end = Arrivée + +date_time = $0 à $1 +time_zone = Fuseau horaire \ No newline at end of file diff --git a/masks/admin.html b/masks/admin.html index 1f2d59c..040c0d4 100644 --- a/masks/admin.html +++ b/masks/admin.html @@ -2,12 +2,12 @@
| Project | -Mode | -Code Name | -Start | -End | -Time Zone | +[#]lang:project[#] | +[#]lang:mode[#] | +[#]lang:code_name[#] | +[#]lang:start[#] | +[#]lang:end[#] | +[#]lang:time_zone[#] |
|---|
').addIcon('fa-media fa-fw fa-lg').append('Photos')) + .append($('
').addIcon('fa-media fa-fw fa-lg').append(oSpot.lang('pics'))) .append($Medias); } @@ -493,7 +484,7 @@ function getPost(asPost) { .append($('
').addIcon('fa-coords', true).append(asPost.lat_dms+' '+asPost.lon_dms)) .append($('
').addIcon('fa-time', true).append(sAbsTime+self.tmp('site_tz_notice')))
.append($('', {'class':'drill'})
- .append($(' ', {'class':'message'})
- .append($('', {'class':'staticmap', title: 'Click pour zoomer', src: getWmtsApiUrl('static', asPost.latitude, asPost.longitude, 13)}))
+ .append($('
', {'class':'staticmap', title: oSpot.lang('click_zoom'), src: getWmtsApiUrl('static', asPost.latitude, asPost.longitude, 13)}))
.append($('', {'class': 'drill-icon fa-stack'})
.addIcon('fa-message-in fa-stack-1x fa-rotate-270')
.addIcon('fa-message fa-stack-2x')
@@ -518,14 +509,14 @@ function getPost(asPost) {
break;
case 'media':
var bVideo = (asPost.subtype == 'video');
- var sTakenOn = (asPost.taken_on == '0000-00-00 00:00:00')?'':' et prise le '+asPost.taken_on_formatted+self.tmp('site_tz_notice');
- var $Image = $('
', {'src': asPost.thumb_path, title: bVideo?'Click pour voir la vidéo':'Click pour zoomer'});
+ var sTakenOn = (asPost.taken_on == '0000-00-00 00:00:00')?'':(' '+oSpot.lang('and')+' '+oSpot.lang(bVideo?'video_taken':'pic_taken', [asPost.taken_on_formatted+self.tmp('site_tz_notice')]));
+ var $Image = $('
', {'src': asPost.thumb_path, title: oSpot.lang(bVideo?'click_watch':'click_zoom')});
$Body = $('', {
'class': 'drill',
href: asPost.media_path,
'data-video': (bVideo?'true':'false'),
'data-lightbox': 'post-medias',
- 'data-title': (bVideo?'Vidéo':'Photo')+' ajoutée le '+sAbsTime+sTakenOn, 'data-orientation': asPost.rotate
+ 'data-title': oSpot.lang(bVideo?'video':'pic')+' '+oSpot.lang('add_on', [sAbsTime+sTakenOn]), 'data-orientation': asPost.rotate
}).append($Image).append($('', {'class': 'drill-icon'}).addIcon('fa-drill-'+(bVideo?'video':'picture')));
break;
case 'post':
@@ -535,8 +526,8 @@ function getPost(asPost) {
break;
case 'poster':
$Body = $('