Changeset 1226
- Timestamp:
- 05/17/07 16:25:43 (5 years ago)
- Location:
- trunk/wifidog-auth
- Files:
-
- 23 modified
-
CHANGELOG (modified) (5 diffs)
-
wifidog/classes/Content.php (modified) (4 diffs)
-
wifidog/classes/Content/Avatar/Avatar.php (modified) (2 diffs)
-
wifidog/classes/Content/File/File.php (modified) (3 diffs)
-
wifidog/classes/Content/HTMLeditor/HTMLeditor.php (modified) (4 diffs)
-
wifidog/classes/Content/Picture/Picture.php (modified) (3 diffs)
-
wifidog/classes/Content/SimplePicture/SimplePicture.php (modified) (2 diffs)
-
wifidog/classes/HyperLinkUtils.php (modified) (3 diffs)
-
wifidog/classes/ProfileField.php (modified) (3 diffs)
-
wifidog/classes/User.php (modified) (3 diffs)
-
wifidog/locale/de/LC_MESSAGES/messages.mo (modified) (previous)
-
wifidog/locale/de/LC_MESSAGES/messages.po (modified) (174 diffs)
-
wifidog/locale/es/LC_MESSAGES/messages.mo (modified) (previous)
-
wifidog/locale/es/LC_MESSAGES/messages.po (modified) (156 diffs)
-
wifidog/locale/fr/LC_MESSAGES/messages.mo (modified) (previous)
-
wifidog/locale/fr/LC_MESSAGES/messages.po (modified) (207 diffs)
-
wifidog/locale/ja/LC_MESSAGES/messages.mo (modified) (previous)
-
wifidog/locale/ja/LC_MESSAGES/messages.po (modified) (167 diffs)
-
wifidog/locale/pt/LC_MESSAGES/messages.mo (modified) (previous)
-
wifidog/locale/pt/LC_MESSAGES/messages.po (modified) (190 diffs)
-
wifidog/locale/smarty.txt (modified) (4 diffs)
-
wifidog/media/base_theme/stylesheet.css (modified) (8 diffs)
-
wifidog/templates/classes/MainUI_ToolContent.tpl (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/wifidog-auth/CHANGELOG
r1225 r1226 1 2007-05-17 François Proulx <francois.proulx@gmail.com> 2 * WARNING: This has not been fully tested. Full testing to be completed on 2006-05-18 3 but I'm pretty confident that it works pretty well. 4 * Added automatic resize on Avatars 5 * Added FavoriteHotspots content (mostly used for Profiles) 6 * Added new features to Content and File 7 * Fixed URL regexp bug in HyperlinkUtils 8 * Updated French translations 9 * Updates profiles template 10 * TODO: Add getNewUI et processNewUI to FavoriteHotspots to simplify input 11 1 12 2007-05-03 Benoit Gréoire <bock@step.polymtl.ca> 2 13 * MainUI_ToolContent.tpl: Make preferences_link, login_link, and logout_link CSS targetable. Get rid of some deprecated CSS. … … 9 20 10 21 2007-04-19 Benoit Grégoire <bock@step.polymtl.ca> 11 * RssAggregator.php: Fix bug saving the max item age. 22 * RssAggregator.php: Fix bug saving the max item age. 12 23 * Forgot to remove a bunch of links to faq.php. 13 24 14 25 2007-04-03 Benoit Grégoire <bock@step.polymtl.ca> 15 * AnonymisedDataExport.php: New report. Adds the ability to export anonymised SQL data for academic research. 26 * AnonymisedDataExport.php: New report. Adds the ability to export anonymised SQL data for academic research. 16 27 17 28 2007-03-20 Benoit Grégoire <bock@step.polymtl.ca> 18 * Shoutbox.php: Allow limiting the number of characters entered for a shout. 19 (Ideally, this would also need to be enforced at db write level). 29 * Shoutbox.php: Allow limiting the number of characters entered for a shout. 30 (Ideally, this would also need to be enforced at db write level). 20 31 Move the shout form in the list. 21 32 Allow choosing the number of shouts displayed. … … 35 46 * Add UIUserList content type (work towards #158) 36 47 * portal/index.php: Finish refactoring Smarty usage. 37 48 38 49 2007-03-17 Benoit Grégoire <bock@step.polymtl.ca> 39 50 * install.php: Make sure we are in the right directory when uncompressing Smarty 40 51 * Avatar.php: Don't allow user to hyperlink the image. 41 52 * ProfileTemplate: Display how many profiles will be affected when deleting a template field. 42 * User.php: Don't show the profile creation button if the network has no profile template. 53 * User.php: Don't show the profile creation button if the network has no profile template. 43 54 Don't hyperlink the username if the user has no profile. 44 55 … … 47 58 * ProfileField::getContentField(): Fix bug where the object wouldn't refresh properly. 48 59 * Content: Delicate refactoring of the UI to create new content. 49 The content object now supports directly adding the actual values of a new 50 Content in getNewContentUI(), if the content filter only allows a single content type. 51 For this to work, the Content type must overload the getNewUI() method. 60 The content object now supports directly adding the actual values of a new 61 Content in getNewContentUI(), if the content filter only allows a single content type. 62 For this to work, the Content type must overload the getNewUI() method. 52 63 This saves many mouse clicks for form style interface, like profiles. 53 64 * User: Don't create profile automatically. 54 65 * Don't show profiles when user is invisible. 55 66 * Langstring, SimpleString, HTMLEditor: Support getNewUI(). As a result of these changes, SmartyTemplate, SimpleSmartyTemplate, Stylesheet also get it for free. 56 * Add new standard Smarty value userOriginallyRequestedURL. 67 * Add new standard Smarty value userOriginallyRequestedURL. 57 68 Note that this does NOT fix #266 58 69 * Add new standard Smarty value nodeWebSiteURL … … 71 82 * Fix detection of HTML Safe. 72 83 * Avatar.php: Don't allow editing the picture size. 73 * ContentGroup: In some cases, the same element could be picked twice in the same display. 74 Make sure that doesn't happen. Also, implement the option to not rotate content at all, 84 * ContentGroup: In some cases, the same element could be picked twice in the same display. 85 Make sure that doesn't happen. Also, implement the option to not rotate content at all, 75 86 usefull when showing all elements simultaneously in a specific order. Closes #294 76 87 -
trunk/wifidog-auth/wifidog/classes/Content.php
r1201 r1226 423 423 return $retval; 424 424 } 425 425 426 426 /** 427 427 * Check if this class is NOT any of the class or subclass of one of the content types given as parameter … … 1232 1232 return $retval; 1233 1233 } 1234 1234 1235 /** Get the authors of the Content 1235 1236 * @return null or array of User objects */ … … 1237 1238 $db = AbstractDb :: getObject(); 1238 1239 $retval = array (); 1240 $content_owner_row = null; 1239 1241 $sql = "SELECT user_id FROM content_has_owners WHERE content_id='$this->id' AND is_author=TRUE"; 1240 1242 $db->execSqlUniqueRes($sql, $content_owner_row, false); … … 1246 1248 return $retval; 1247 1249 } 1250 1251 /** Get the owners of the Content 1252 * @return null or array of User objects */ 1253 public function getOwners() { 1254 $db = AbstractDb :: getObject(); 1255 $retval = array (); 1256 $content_owner_row = null; 1257 $sql = "SELECT user_id FROM content_has_owners WHERE content_id='$this->id'"; 1258 $db->execSqlUniqueRes($sql, $content_owner_row, false); 1259 if ($content_owner_row != null) { 1260 $user = User :: getObject($content_owner_row['user_id']); 1261 $retval[] = $user; 1262 } 1263 1264 return $retval; 1265 } 1266 1248 1267 /** @see GenricObject 1249 1268 * @return The id */ -
trunk/wifidog-auth/wifidog/classes/Content/Avatar/Avatar.php
r1194 r1226 56 56 $this -> configEnableEditWidthHeight(false); 57 57 $this -> configEnableHyperlink(false); 58 59 // Max 40x40 pixels 60 $this->setMaxDisplayWidth(40); 61 $this->setMaxDisplayHeight(40); 58 62 } 59 63 … … 62 66 return $html; 63 67 } 68 69 /** 70 * Validates the uploaded file and return a boolean to tell if valid 71 * This method should be overridden when you need to write special validation scripts 72 * 73 * @param string path to input file 74 * @param string path to output file (by ref.), making sure you create a struct that matches the $_FILES[][] format 75 * 76 * @return boolean 77 */ 78 protected function validateUploadedFile($input, &$output) { 79 $errmsg = null; 80 // Only if GD is available, resize to max size 81 if (Dependencies::check("gd", $errmsg)) { 82 // Extract image metadata 83 list($width_orig, $height_orig, $type, $attr) = getimagesize($input['tmp_name']); 84 // Check if it busts the max size 85 if($width_orig > $this->getMaxDisplayWidth() || $height_orig > $this->getMaxDisplayHeight()) { 86 // Init with max values 87 $width = $this->getMaxDisplayWidth(); 88 $height = $this->getMaxDisplayHeight(); 89 90 // Compute ratios 91 $ratio_orig = $width_orig / $height_orig; 92 if ($this->getMaxDisplayWidth() / $this->getMaxDisplayHeight() > $ratio_orig) { 93 $width = $height * $ratio_orig; 94 } else { 95 $height = $width / $ratio_orig; 96 } 97 98 // Resample 99 $image_p = imagecreatetruecolor($width, $height); 100 $image = imagecreatefromjpeg($input['tmp_name']); 101 imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig); 102 103 // Build output metadata struct 104 $output = array(); 105 $output['tmp_name'] = tempnam("/tmp", session_id()); 106 $output['type'] = "image/png"; 107 $output['name'] = $input['name']; 108 109 // Output PNG at full compression (no artefact) 110 imagepng($image_p, $output['tmp_name'], 9); 111 112 // Write new file size 113 $output['size'] = filesize($output['tmp_name']); 114 } 115 } 116 return true; 117 } 64 118 } 65 119 -
trunk/wifidog-auth/wifidog/classes/Content/File/File.php
r1206 r1226 1 1 <?php 2 2 3 3 4 /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ … … 63 64 { 64 65 65 /** 66 * File size unit: Byte 67 68 */ 69 const UNIT_BYTES = 1; 70 71 /** 72 * File size unit: KB 73 74 */ 75 const UNIT_KILOBYTES = 1024; 76 77 /** 78 * File size unit: MB 79 80 */ 81 const UNIT_MEGABYTES = 1048576; 82 83 /** 84 * File size unit: GB 85 86 */ 87 const UNIT_GIGABYTES = 1073741824; 88 89 /** Can the user edit the filename */ 90 private $configEnableEditFilename = true; 91 92 /** Can the user edit the mime type */ 93 private $configEnableEditMimeType = true; 94 /** 95 * Constructor 96 * 97 * @param string $content_id Content id 98 */ 99 protected function __construct($content_id) 100 { 101 102 $db = AbstractDb::getObject(); 103 104 // Init values 105 $row = null; 106 parent :: __construct($content_id); 107 108 $content_id = $db->escapeString($content_id); 109 $sql = "SELECT * FROM content_file WHERE files_id='$content_id'"; 110 $db->execSqlUniqueRes($sql, $row, false); 111 112 if ($row == null) { 113 /* 114 * Since the parent Content exists, the necessary data in 115 * content_group had not yet been created 116 */ 117 $sql = "INSERT INTO content_file (files_id) VALUES ('$content_id')"; 118 $db->execSqlUpdate($sql, false); 119 120 $sql = "SELECT * FROM content_file WHERE files_id='$content_id'"; 121 $db->execSqlUniqueRes($sql, $row, false); 122 123 if ($row == null) { 124 throw new Exception(_("The content with the following id could not be found in the database: ").$content_id); 125 } 126 } 127 128 $this->mBd = &$db; 129 $this->files_row = $row; 130 } 131 132 /** 133 * Set Binary data from a POST form data field 134 * 135 * @param string $upload_field The form field that contains the data 136 * 137 * @return bool True if successful 138 139 */ 140 private function setBinaryDataFromPostVar($upload_field) 141 { 142 // Init values 143 $_retval = false; 144 145 if (!empty ($_FILES[$upload_field]) && $_FILES[$upload_field]['error'] == UPLOAD_ERR_OK) { 146 // Unlink BLOB if any exists 147 $blob_oid = $this->getBinaryDataOid(); 148 149 if ($blob_oid) { 150 $this->mBd->unlinkLargeObject($blob_oid); 151 } 152 153 // Updating database 154 // Create a new BLOB 155 $new_oid = $this->mBd->importLargeObject($_FILES[$upload_field]['tmp_name']); 156 // Switch to new OID and touch file 157 $this->setBinaryDataOid($new_oid); 158 $this->setLocalFileSize($_FILES[$upload_field]['size']); 159 $this->setMimeType($_FILES[$upload_field]['type']); 160 $this->setFilename($_FILES[$upload_field]['name']); 161 162 $_retval = true; 163 } else { 164 switch ($_FILES[$upload_field]['error']) 165 { 166 case 'UPLOAD_ERR_INI_SIZE': 167 echo _("File size exceeds limit specified in PHP.ini"); 168 break; 169 170 case 'UPLOAD_ERR_FORM_SIZE': 171 echo _("File size exceeds limit specified HTML form"); 172 break; 173 174 case 'UPLOAD_ERR_PARTIAL': 175 echo _("File upload was interrupted"); 176 break; 177 178 case 'UPLOAD_ERR_NO_TMP_DIR': 179 echo _("Missing temp folder"); 180 break; 181 182 } 183 } 184 185 return $_retval; 186 } 187 188 /** 189 * Returns the binary data from the database 190 * 191 * @return string Binary data from the database 192 193 */ 194 private function getBinaryDataOid() 195 { 196 return $this->mBd->unescapeBinaryString($this->files_row['data_blob']); 197 } 198 199 /** 200 * Saves the binary data to the database 201 * 202 * @param string $oid Binary data 203 * 204 * @return void 205 206 */ 207 private function setBinaryDataOid($oid) 208 { 209 if (is_null($oid)) { 210 $oid_sql = "NULL"; 211 } 212 else 213 { 214 $oid_sql = $this->mBd->escapeString($oid); 215 } 216 if($this->files_row['data_blob']!=$oid){ 217 $this->mBd->execSqlUpdate("UPDATE content_file SET data_blob = $oid WHERE files_id='".$this->getId()."'", false); 218 // Touch and refresh this object 219 $this->touch(); 220 } 221 } 222 223 /** 224 * Is the MimeType editable 225 * @param $enabled Default is true 226 */ 227 protected function configEnableEditMimeType($enabled=true) 228 { 229 return $this->configEnableEditMimeType=$enabled; 230 } 231 232 /** 233 * Returns the MIME type of the file 234 * 235 * @return string MIME type of file 236 */ 237 public function getMimeType() 238 { 239 return $this->files_row['mime_type']; 240 } 241 242 /** 243 * Saves the MIME type of the file 244 * 245 * @param string $mime_type 246 * 247 * @return void 248 */ 249 private function setMimeType($mime_type) 250 { 251 $mime_type = $this->mBd->escapeString($mime_type); 252 $this->mBd->execSqlUpdate("UPDATE content_file SET mime_type ='".$mime_type."' WHERE files_id='".$this->getId()."'", false); 253 // Touch and refresh this object 254 $this->touch(); 255 } 256 257 /** 258 * Is the filename editable 259 * @param $enabled Default is true 260 */ 261 protected function configEnableEditFilename($enabled=true) 262 { 263 return $this->configEnableEditFilename=$enabled; 264 } 265 266 /** 267 * Returns the filename of the file 268 * 269 * @return string Filename of file 270 271 */ 272 protected function getFilename() 273 { 274 return $this->files_row['filename']; 275 } 276 277 /** 278 * Stores the filename of the file 279 * 280 * @param string $file_name Filename of the file 281 * 282 * @return void 283 */ 284 private function setFilename($file_name) 285 { 286 $file_name = $this->mBd->escapeString($file_name); 287 $this->mBd->execSqlUpdate("UPDATE content_file SET filename ='".$file_name."' WHERE files_id='".$this->getId()."'", false); 288 // Touch and refresh this object 289 $this->touch(); 290 } 291 292 /** 293 * Returns the size of the file 294 * 295 * @param string $unit Name of constant of which kind of filesize unit 296 * to use 297 * Possibilities: 298 * + self::UNIT_BYTES 299 * + self::UNIT_KILOBYTES 300 * + self::MEGABYTES 301 * + self::GIGABYTES 302 * 303 * @return float Size of file 304 */ 305 protected function getFileSize($unit = self::UNIT_BYTES) 306 { 307 if ($this->isLocalFile()) { 308 $size = $this->files_row['local_binary_size']; 309 } else { 310 $size = $this->files_row['remote_size']; 311 } 312 313 switch ($unit) { 314 case self::UNIT_KILOBYTES: 315 case self::UNIT_MEGABYTES: 316 case self::UNIT_GIGABYTES: 317 case self::UNIT_BYTES: 318 $size = round($size / $unit, 2); 319 break; 320 321 } 322 323 return $size; 324 } 325 326 /** 327 * Sets the size of a local file 328 * 329 * @param int $size Size of file 330 * @param string $unit Name of constant of which kind of filesize unit 331 * to use 332 * Possibilities: 333 * + self::UNIT_BYTES 334 * + self::UNIT_KILOBYTES 335 * + self::MEGABYTES 336 * + self::GIGABYTES 337 * 338 * @return void 339 */ 340 private function setLocalFileSize($size, $unit = self::UNIT_BYTES) 341 { 342 if (is_numeric($size)) { 343 $octet_size = $size * $unit; 344 345 $this->mBd->execSqlUpdate("UPDATE content_file SET local_binary_size = $octet_size WHERE files_id='" . $this->getId() . "'", false); 346 $this->refresh(); 347 } 348 } 349 350 /** 351 * Sets the size of a remote file 352 * 353 * @param int $size Size of file 354 * @param string $unit Name of constant of which kind of filesize unit 355 * to use 356 * Possibilities: 357 * + self::UNIT_BYTES 358 * + self::UNIT_KILOBYTES 359 * + self::MEGABYTES 360 * + self::GIGABYTES 361 * 362 * @return void 363 364 */ 365 private function setRemoteFileSize($size, $unit = self::UNIT_KILOBYTES) 366 { 367 if (is_numeric($size)) { 368 $octet_size = $size * $unit; 369 370 $this->mBd->execSqlUpdate("UPDATE content_file SET remote_size = $octet_size WHERE files_id='".$this->getId()."'", false); 371 $this->refresh(); 372 } 373 } 374 375 /** 376 * Get URL of file 377 * 378 * @return string URL of file 379 */ 380 public function getFileUrl() 381 { 382 // Init values 383 $_retval = null; 384 385 if (!$this->isLocalFile()) { 386 $_retval = $this->files_row['url']; 387 } else { 388 $_retval = BASE_SSL_PATH . "file_download.php?file_id=" . $this->getId(); 389 } 390 391 return $_retval; 392 } 393 394 /** 395 * Sets URL of a file 396 * 397 * @param string $url 398 * 399 * @return void 400 401 */ 402 private function setURL($url) 403 { 404 if ($url == null) { 405 $url_sql = "NULL"; 406 } else { 407 $url_sql = "'".$this->mBd->escapeString($url)."'"; 408 } 409 if($this->files_row['url']!=$url){ 410 411 $this->mBd->execSqlUpdate("UPDATE content_file SET url = $url_sql WHERE files_id='".$this->getId()."'", false); 412 $this->refresh(); 413 } 414 } 415 416 /** 417 * Returns if file is a local file 418 * 419 * @return bool True if file is local 420 */ 421 protected function isLocalFile() 422 { 423 return is_null($this->files_row['url']); 424 } 425 426 /** 427 * Shows the administration interface for RssAggregator. 428 * 429 * @param string $subclass_admin_interface HTML code to be added after the 430 * administration interface 431 * 432 * @return string HTML code for the administration interface 433 */ 434 public function getAdminUI($subclass_admin_interface = null, $title=null) 435 { 436 // Init values 437 $html = ''; 438 439 $html .= "<li class='admin_element_item_container'>\n"; 440 $html .= "<div class='admin_element_data'>\n"; 441 $html .= "<input type='radio' name='file_mode".$this->getId()."' value='by_upload' ". ($this->isLocalFile() ? "CHECKED" : "")." />"; 442 $html .= _("Upload a new file (Uploading a new one will replace any existing file)")." : \n"; 443 $html .= '<input type="hidden" name="MAX_FILE_SIZE" value="1073741824" />'; 444 $html .= '<input name="file_file_upload'.$this->getId().'" type="file" />'; 445 $html .= "</div>\n"; 446 $html .= "</li>\n"; 447 448 $html .= "<li class='admin_element_item_container'>\n"; 449 $html .= "<div class='admin_element_data'>\n"; 450 $html .= "<input type='radio' name='file_mode".$this->getId()."' value='remote' ". (!$this->isLocalFile() ? "CHECKED" : "").">"; 451 $html .= _("Remote file via URL")." : \n"; 452 453 454 if ($this->isLocalFile()) { 455 $html .= "<input name='file_url".$this->getId()."' type='text' size='50'/>"; 456 } else { 457 $html .= "<input name='file_url".$this->getId()."' type='text' size='50' value='".$this->getFileUrl()."'/>"; 458 } 459 460 $html .= "</div>\n"; 461 $html .= "</li>\n"; 462 463 if (!$this->isLocalFile()) { 464 $html .= "<div class='admin_element_item_container'>\n"; 465 $html .= "<div class='admin_element_label'>"._("File URL")." : </div>\n"; 466 $html .= "<div class='admin_element_data'>\n"; 467 $html .= $this->getFileUrl(); 468 $html .= "</div>\n"; 469 $html .= "</li>\n"; 470 } 471 472 if($this->configEnableEditFilename) { 473 $html .= "<li class='admin_element_item_container'>\n"; 474 $html .= "<div class='admin_element_label'>"._("Filename to display")." : </div>\n"; 475 $html .= "<div class='admin_element_data'>\n"; 476 $html .= '<input type="text" name="file_file_name'.$this->getId().'" value="'.$this->getFilename().'" />'; 477 $html .= "</div>\n"; 478 $html .= "</li>\n"; 479 } 480 481 if ($this->isLocalFile()) { 482 if($this->configEnableEditMimeType){ 483 $html .= "<li class='admin_element_item_container'>\n"; 484 $html .= "<div class='admin_element_label'>"._("MIME type")." : </div>\n"; 485 $html .= "<div class='admin_element_data'>\n"; 486 $html .= '<input type="text" name="file_mime_type'.$this->getId().'" value="'.$this->getMimeType().'" />'; 487 $html .= "</div>\n"; 488 $html .= "</li>\n"; 489 } 490 491 $html .= "<li class='admin_element_item_container'>\n"; 492 $html .= "<div class='admin_element_data'>"._("Locally stored file size")." : \n"; 493 $html .= $this->getFileSize(self :: UNIT_KILOBYTES)." "._("KB"); 494 } else { 495 $html .= "<div class='admin_element_item_container'>\n"; 496 $html .= "<div class='admin_element_label'>"._("Remote file size (Automatically converted from KB to Bytes)")." : </div>\n"; 497 $html .= "<div class='admin_element_data'>\n"; 498 // The hidden field contains old value to determine if we have to update ( this prevents unwanted successive floating point evaluation ) 499 $html .= '<input type="hidden" name="file_old_remote_size'.$this->getId().'" value="'.$this->getFileSize().'" />'; 500 $html .= '<input type="text" name="file_remote_size'.$this->getId().'" value="'.$this->getFileSize().'" />'; 501 502 } 503 $html .= " <a href='".$this->getFileUrl()."'>"._("Download")."</a>\n"; 504 $html .= " "._("Last update")." : \n"; 505 $html .= $this->getLastUpdateTimestamp(); 506 $html .= "</div>\n"; 507 $html .= "</li>\n"; 508 509 $html .= $subclass_admin_interface; 510 511 return parent::getAdminUI($html, $title); 512 } 513 514 /** 515 * Processes the input of the administration interface for RssAggregator 516 * 517 * @return void 518 */ 519 public function processAdminUI() 520 { 521 //echo "File::processAdminUI()<br/>\n"; 522 if ($this->isOwner(User :: getCurrentUser()) || User :: getCurrentUser()->isSuperAdmin()) { 523 parent :: processAdminUI(); 524 525 // If no file was uploaded, update filename and mime type 526 if (!empty ($_REQUEST["file_mode".$this->getId()])) { 527 if ($this->configEnableEditFilename && !empty($_REQUEST["file_file_name".$this->getId()])) { 528 $this->setFilename($_REQUEST["file_file_name".$this->getId()]); 529 } 530 531 $file_mode = $_REQUEST["file_mode".$this->getId()]; 532 533 if ($file_mode == "by_upload") { 534 if($this->configEnableEditMimeType &&isset($_REQUEST["file_mime_type".$this->getId()])) { 535 $this->setMimeType($_REQUEST["file_mime_type".$this->getId()]); 536 } 537 538 $this->setBinaryDataFromPostVar("file_file_upload".$this->getId()); 539 $this->setURL(null); 540 541 // Reset the remote file size ( not used ) 542 $this->setRemoteFileSize(0); 543 } else { 544 if ($file_mode == "remote") { 545 $this->setURL($_REQUEST["file_url".$this->getId()]); 546 $this->setBinaryDataOid(null); 547 548 // When switching from local to remote, this field does not exist yet 549 if (isset($_REQUEST["file_old_remote_size".$this->getId()])) { 550 if ($_REQUEST["file_remote_size".$this->getId()] != $_REQUEST["file_old_remote_size".$this->getId()]) { 551 $this->setRemoteFileSize($_REQUEST["file_remote_size".$this->getId()]); 552 } 553 } else { 554 $this->setRemoteFileSize(0); 555 } 556 } 557 } 558 } 559 } 560 } 561 562 /** 563 * Retreives the user interface of this object. 564 * 565 * @return string The HTML fragment for this interface 566 */ 567 public function getUserUI() 568 { 569 // Init values 570 $html = ''; 571 572 if($this->getFileSize() > 0) { 573 $append_size = " (".$this->getFileSize(self :: UNIT_KILOBYTES)." "._("KB").")"; 574 } else { 575 $append_size = ""; 576 } 577 578 $html .= "<div class='download_button'><a href='".htmlentities($this->getFileUrl())."'>"._("Download")." ".$this->getFilename()."$append_size</a></div>"; 579 $html = $this->replaceHyperLinks($html); 580 $this->setUserUIMainDisplayContent($html); 581 return parent::getUserUI(); 582 } 583 584 /** 585 * Reloads the object from the database. Should normally be called after 586 * a set operation. This function is private because calling it from a 587 * subclass will call the constructor from the wrong scope. 588 * 589 * @return void 590 */ 591 private function refresh() 592 { 593 $this->__construct($this->id); 594 } 595 596 /** 597 * Deletes a File object 598 * 599 * @param string $errmsg Reference to error message 600 * 601 * @return bool True if deletion was successful 602 * @internal Persistent content will not be deleted 603 */ 604 public function delete(&$errmsg) 605 { 606 if ($this->isPersistent() == false) { 607 // Unlink BLOB if any exists 608 $blob_oid = $this->getBinaryDataOid(); 609 610 if($blob_oid) { 611 $errmsg = "Deleting BLOB OID : $blob_oid"; 612 613 if($this->mBd->UnlinkLargeObject($blob_oid) == false) { 614 $errmsg = _("Unable to successfully unlink BLOB OID : $blob_oid !"); 615 return false; 616 } 617 } 618 619 $this->mBd->execSqlUpdate("DELETE FROM content_file WHERE files_id = '".$this->getId()."'", false); 620 } else { 621 $errmsg = _("Could not delete this file, since it is persistent"); 622 } 623 624 return parent::delete($errmsg); 625 } 66 /** 67 * File size unit: Byte 68 69 */ 70 const UNIT_BYTES = 1; 71 72 /** 73 * File size unit: KB 74 75 */ 76 const UNIT_KILOBYTES = 1024; 77 78 /** 79 * File size unit: MB 80 81 */ 82 const UNIT_MEGABYTES = 1048576; 83 84 /** 85 * File size unit: GB 86 87 */ 88 const UNIT_GIGABYTES = 1073741824; 89 90 /** Can the user edit the filename */ 91 private $configEnableEditFilename = true; 92 93 /** Can the user edit the mime type */ 94 private $configEnableEditMimeType = true; 95 96 // Should the admin UI display metadata about the file 97 private $fileMetadataVerboseFlag = true; 98 99 /** 100 * Constructor 101 * 102 * @param string $content_id Content id 103 */ 104 protected function __construct($content_id) 105 { 106 107 $db = AbstractDb :: getObject(); 108 109 // Init values 110 $row = null; 111 parent :: __construct($content_id); 112 113 $content_id = $db->escapeString($content_id); 114 $sql = "SELECT * FROM content_file WHERE files_id='$content_id'"; 115 $db->execSqlUniqueRes($sql, $row, false); 116 117 if ($row == null) 118 { 119 /* 120 * Since the parent Content exists, the necessary data in 121 * content_group had not yet been created 122 */ 123 $sql = "INSERT INTO content_file (files_id) VALUES ('$content_id')"; 124 $db->execSqlUpdate($sql, false); 125 126 $sql = "SELECT * FROM content_file WHERE files_id='$content_id'"; 127 $db->execSqlUniqueRes($sql, $row, false); 128 129 if ($row == null) 130 { 131 throw new Exception(_("The content with the following id could not be found in the database: ") . $content_id); 132 } 133 } 134 135 $this->mBd = & $db; 136 $this->files_row = $row; 137 } 138 139 public function setFileMetadataVerbose($flag) { 140 if(is_bool($flag)) 141 $this->metadataVerboseFlag = $flag; 142 } 143 144 /** 145 * Validates the uploaded file and return a boolean to tell if valid 146 * This method should be overridden when you need to write special validation scripts 147 * 148 * @param string path to input file 149 * @param string path to output file (by ref.), making sure you create a struct that matches the $_FILES[][] format 150 * 151 * @return boolean 152 */ 153 protected function validateUploadedFile($input, &$output) { 154 return true; 155 } 156 157 /** 158 * Set Binary data from a POST form data field 159 * 160 * @param string $upload_field The form field that contains the data 161 * 162 * @return bool True if successful 163 164 */ 165 private function setBinaryDataFromPostVar($upload_field) 166 { 167 // Init values 168 $_retval = false; 169 $output = null; 170 171 if (!empty ($_FILES[$upload_field]) && $_FILES[$upload_field]['error'] == UPLOAD_ERR_OK && $this->validateUploadedFile($_FILES[$upload_field], $output)) 172 { 173 // Unlink BLOB if any exists 174 $blob_oid = $this->getBinaryDataOid(); 175 176 if ($blob_oid) 177 { 178 $this->mBd->unlinkLargeObject($blob_oid); 179 } 180 181 if(empty($output)) { 182 // input hasn't changed during validation 183 $output = $_FILES[$upload_field]; 184 } 185 186 // Updating database 187 // Create a new BLOB 188 $new_oid = $this->mBd->importLargeObject($output['tmp_name']); 189 // Switch to new OID and touch file 190 $this->setBinaryDataOid($new_oid); 191 $this->setLocalFileSize($output['size']); 192 $this->setMimeType($output['type']); 193 $this->setFilename($output['name']); 194 195 $_retval = true; 196 } 197 else 198 { 199 switch ($_FILES[$upload_field]['error']) 200 { 201 case 'UPLOAD_ERR_INI_SIZE' : 202 echo _("File size exceeds limit specified in PHP.ini"); 203 break; 204 205 case 'UPLOAD_ERR_FORM_SIZE' : 206 echo _("File size exceeds limit specified HTML form"); 207 break; 208 209 case 'UPLOAD_ERR_PARTIAL' : 210 echo _("File upload was interrupted"); 211 break; 212 213 case 'UPLOAD_ERR_NO_TMP_DIR' : 214 echo _("Missing temp folder"); 215 break; 216 217 } 218 } 219 220 return $_retval; 221 } 222 223 /** 224 * Returns the binary data from the database 225 * 226 * @return string Binary data from the database 227 228 */ 229 private function getBinaryDataOid() 230 { 231 return $this->mBd->unescapeBinaryString($this->files_row['data_blob']); 232 } 233 234 /** 235 * Saves the binary data to the database 236 * 237 * @param string $oid Binary data 238 * 239 * @return void 240 241 */ 242 private function setBinaryDataOid($oid) 243 { 244 if (is_null($oid)) 245 { 246 $oid_sql = "NULL"; 247 } 248 else 249 { 250 $oid_sql = $this->mBd->escapeString($oid); 251 } 252 if ($this->files_row['data_blob'] != $oid) 253 { 254 $this->mBd->execSqlUpdate("UPDATE content_file SET data_blob = $oid WHERE files_id='" . $this->getId() . "'", false); 255 // Touch and refresh this object 256 $this->touch(); 257 } 258 } 259 260 /** 261 * Is the MimeType editable 262 * @param $enabled Default is true 263 */ 264 protected function configEnableEditMimeType($enabled = true) 265 { 266 return $this->configEnableEditMimeType = $enabled; 267 } 268 269 /** 270 * Returns the MIME type of the file 271 * 272 * @return string MIME type of file 273 */ 274 public function getMimeType() 275 { 276 return $this->files_row['mime_type']; 277 } 278 279 /** 280 * Saves the MIME type of the file 281 * 282 * @param string $mime_type 283 * 284 * @return void 285 */ 286 private function setMimeType($mime_type) 287 { 288 $mime_type = $this->mBd->escapeString($mime_type); 289 $this->mBd->execSqlUpdate("UPDATE content_file SET mime_type ='" . $mime_type . "' WHERE files_id='" . $this->getId() . "'", false); 290 // Touch and refresh this object 291 $this->touch(); 292 } 293 294 /** 295 * Is the filename editable 296 * @param $enabled Default is true 297 */ 298 protected function configEnableEditFilename($enabled = true) 299 { 300 return $this->configEnableEditFilename = $enabled; 301 } 302 303 /** 304 * Returns the filename of the file 305 * 306 * @return string Filename of file 307 308 */ 309 protected function getFilename() 310 { 311 return $this->files_row['filename']; 312 } 313 314 /** 315 * Stores the filename of the file 316 * 317 * @param string $file_name Filename of the file 318 * 319 * @return void 320 */ 321 private function setFilename($file_name) 322 { 323 $file_name = $this->mBd->escapeString($file_name); 324 $this->mBd->execSqlUpdate("UPDATE content_file SET filename ='" . $file_name . "' WHERE files_id='" . $this->getId() . "'", false); 325 // Touch and refresh this object 326 $this->touch(); 327 } 328 329 /** 330 * Returns the size of the file 331 * 332 * @param string $unit Name of constant of which kind of filesize unit 333 * to use 334 * Possibilities: 335 * + self::UNIT_BYTES 336 * + self::UNIT_KILOBYTES 337 * + self::MEGABYTES 338 * + self::GIGABYTES 339 * 340 * @return float Size of file 341 */ 342 protected function getFileSize($unit = self :: UNIT_BYTES) 343 { 344 if ($this->isLocalFile()) 345 { 346 $size = $this->files_row['local_binary_size']; 347 } 348 else 349 { 350 $size = $this->files_row['remote_size']; 351 } 352 353 switch ($unit) 354 { 355 case self :: UNIT_KILOBYTES : 356 case self :: UNIT_MEGABYTES : 357 case self :: UNIT_GIGABYTES : 358 case self :: UNIT_BYTES : 359 $size = round($size / $unit, 2); 360 break; 361 362 } 363 364 return $size; 365 } 366 367 /** 368 * Sets the size of a local file 369 * 370 * @param int $size Size of file 371 * @param string $unit Name of constant of which kind of filesize unit 372 * to use 373 * Possibilities: 374 * + self::UNIT_BYTES 375 * + self::UNIT_KILOBYTES 376 * + self::MEGABYTES 377 * + self::GIGABYTES 378 * 379 * @return void 380 */ 381 private function setLocalFileSize($size, $unit = self :: UNIT_BYTES) 382 { 383 if (is_numeric($size)) 384 { 385 $octet_size = $size * $unit; 386 387 $this->mBd->execSqlUpdate("UPDATE content_file SET local_binary_size = $octet_size WHERE files_id='" . $this->getId() . "'", false); 388 $this->refresh(); 389 } 390 } 391 392 /** 393 * Sets the size of a remote file 394 * 395 * @param int $size Size of file 396 * @param string $unit Name of constant of which kind of filesize unit 397 * to use 398 * Possibilities: 399 * + self::UNIT_BYTES 400 * + self::UNIT_KILOBYTES 401 * + self::MEGABYTES 402 * + self::GIGABYTES 403 * 404 * @return void 405 406 */ 407 private function setRemoteFileSize($size, $unit = self :: UNIT_KILOBYTES) 408 { 409 if (is_numeric($size)) 410 { 411 $octet_size = $size * $unit; 412 413 $this->mBd->execSqlUpdate("UPDATE content_file SET remote_size = $octet_size WHERE files_id='" . $this->getId() . "'", false); 414 $this->refresh(); 415 } 416 } 417 418 /** 419 * Get URL of file 420 * 421 * @return string URL of file 422 */ 423 public function getFileUrl() 424 { 425 // Init values 426 $_retval = null; 427 428 if (!$this->isLocalFile()) 429 { 430 $_retval = $this->files_row['url']; 431 } 432 else 433 { 434 $_retval = BASE_SSL_PATH . "file_download.php?file_id=" . $this->getId(); 435 } 436 437 return $_retval; 438 } 439 440 /** 441 * Sets URL of a file 442 * 443 * @param string $url 444 * 445 * @return void 446 447 */ 448 private function setURL($url) 449 { 450 if ($url == null) 451 { 452 $url_sql = "NULL"; 453 } 454 else 455 { 456 $url_sql = "'" . $this->mBd->escapeString($url) . "'"; 457 } 458 if ($this->files_row['url'] != $url) 459 { 460 461 $this->mBd->execSqlUpdate("UPDATE content_file SET url = $url_sql WHERE files_id='" . $this->getId() . "'", false); 462 $this->refresh(); 463 } 464 } 465 466 /** 467 * Returns if file is a local file 468 * 469 * @return bool True if file is local 470 */ 471 protected function isLocalFile() 472 { 473 return is_null($this->files_row['url']); 474 } 475 476 /** 477 * Shows the administration interface for RssAggregator. 478 * 479 * @param string $subclass_admin_interface HTML code to be added after the 480 * administration interface 481 * 482 * @return string HTML code for the administration interface 483 */ 484 public function getAdminUI($subclass_admin_interface = null, $title = null) 485 { 486 // Init values 487 $html = ''; 488 489 $html .= "<li class='admin_element_item_container'>\n"; 490 $html .= "<div class='admin_element_data'>\n"; 491 $html .= "<input type='radio' name='file_mode" . $this->getId() . "' value='by_upload' " . ($this->isLocalFile() ? "CHECKED" : "") . " />"; 492 $html .= _("Upload a new file (Uploading a new one will replace any existing file)") . " : \n"; 493 $html .= '<input type="hidden" name="MAX_FILE_SIZE" value="1073741824" />'; 494 $html .= '<input name="file_file_upload' . $this->getId() . '" type="file" />'; 495 $html .= "</div>\n"; 496 $html .= "</li>\n"; 497 498 $html .= "<li class='admin_element_item_container'>\n"; 499 $html .= "<div class='admin_element_data'>\n"; 500 $html .= "<input type='radio' name='file_mode" . $this->getId() . "' value='remote' " . (!$this->isLocalFile() ? "CHECKED" : "") . ">"; 501 $html .= _("Remote file via URL") . " : \n"; 502 503 if ($this->isLocalFile()) 504 { 505 $html .= "<input name='file_url" . $this->getId() . "' type='text' size='50'/>"; 506 } 507 else 508 { 509 $html .= "<input name='file_url" . $this->getId() . "' type='text' size='50' value='" . $this->getFileUrl() . "'/>"; 510 } 511 512 $html .= "</div>\n"; 513 $html .= "</li>\n"; 514 515 if (!$this->isLocalFile()) 516 { 517 $html .= "<div class='admin_element_item_container'>\n"; 518 $html .= "<div class='admin_element_label'>" . _("File URL") . " : </div>\n"; 519 $html .= "<div class='admin_element_data'>\n"; 520 $html .= $this->getFileUrl(); 521 $html .= "</div>\n"; 522 $html .= "</li>\n"; 523 } 524 525 if ($this->configEnableEditFilename) 526 { 527 $html .= "<li class='admin_element_item_container'>\n"; 528 $html .= "<div class='admin_element_label'>" . _("Filename to display") . " : </div>\n"; 529 $html .= "<div class='admin_element_data'>\n"; 530 $html .= '<input type="text" name="file_file_name' . $this->getId() . '" value="' . $this->getFilename() . '" />'; 531 $html .= "</div>\n"; 532 $html .= "</li>\n"; 533 } 534 535 if ($this->isLocalFile()) 536 { 537 if ($this->configEnableEditMimeType) 538 { 539 $html .= "<li class='admin_element_item_container'>\n"; 540 $html .= "<div class='admin_element_label'>" . _("MIME type") . " : </div>\n"; 541 $html .= "<div class='admin_element_data'>\n"; 542 $html .= '<input type="text" name="file_mime_type' . $this->getId() . '" value="' . $this->getMimeType() . '" />'; 543 $html .= "</div>\n"; 544 $html .= "</li>\n"; 545 } 546 547 //$html .= "<li class='admin_element_item_container'>\n"; 548 if($this->metadataVerboseFlag == true) { 549 $html .= "<div class='admin_element_data'>" . _("Locally stored file size") . " : \n"; 550 $html .= $this->getFileSize(self :: UNIT_KILOBYTES) . " " . _("KB"); 551 } 552 } 553 else 554 { 555 $html .= "<div class='admin_element_item_container'>\n"; 556 $html .= "<div class='admin_element_label'>" . _("Remote file size (Automatically converted from KB to Bytes)") . " : </div>\n"; 557 $html .= "<div class='admin_element_data'>\n"; 558 // The hidden field contains old value to determine if we have to update ( this prevents unwanted successive floating point evaluation ) 559 $html .= '<input type="hidden" name="file_old_remote_size' . $this->getId() . '" value="' . $this->getFileSize() . '" />'; 560 $html .= '<input type="text" name="file_remote_size' . $this->getId() . '" value="' . $this->getFileSize() . '" />'; 561 562 } 563 564 if($this->metadataVerboseFlag == true) { 565 $html .= " <a href='" . $this->getFileUrl() . "'>" . _("Download") . "</a>\n"; 566 $html .= " " . _("Last update") . " : \n"; 567 $html .= $this->getLastUpdateTimestamp(); 568 $html .= "</div>\n"; 569 } 570 $html .= "</li>\n"; 571 572 $html .= $subclass_admin_interface; 573 574 return parent :: getAdminUI($html, $title); 575 } 576 577 /** 578 * Processes the input of the administration interface for RssAggregator 579 * 580 * @return void 581 */ 582 public function processAdminUI() 583 { 584 //echo "File::processAdminUI()<br/>\n"; 585 if ($this->isOwner(User :: getCurrentUser()) || User :: getCurrentUser()->isSuperAdmin()) 586 { 587 parent :: processAdminUI(); 588 589 // If no file was uploaded, update filename and mime type 590 if (!empty ($_REQUEST["file_mode" . $this->getId()])) 591 { 592 if ($this->configEnableEditFilename && !empty ($_REQUEST["file_file_name" . $this->getId()])) 593 { 594 $this->setFilename($_REQUEST["file_file_name" . $this->getId()]); 595 } 596 597 $file_mode = $_REQUEST["file_mode" . $this->getId()]; 598 599 if ($file_mode == "by_upload") 600 { 601 if ($this->configEnableEditMimeType && isset ($_REQUEST["file_mime_type" . $this->getId()])) 602 { 603 $this->setMimeType($_REQUEST["file_mime_type" . $this->getId()]); 604 } 605 606 $this->setBinaryDataFromPostVar("file_file_upload" . $this->getId()); 607 $this->setURL(null); 608 609 // Reset the remote file size ( not used ) 610 $this->setRemoteFileSize(0); 611 } 612 else 613 { 614 if ($file_mode == "remote") 615 { 616 $this->setURL($_REQUEST["file_url" . $this->getId()]); 617 $this->setBinaryDataOid(null); 618 619 // When switching from local to remote, this field does not exist yet 620 if (isset ($_REQUEST["file_old_remote_size" . $this->getId()])) 621 { 622 if ($_REQUEST["file_remote_size" . $this->getId()] != $_REQUEST["file_old_remote_size" . $this->getId()]) 623 { 624 $this->setRemoteFileSize($_REQUEST["file_remote_size" . $this->getId()]); 625 } 626 } 627 else 628 { 629 $this->setRemoteFileSize(0); 630 } 631 } 632 } 633 } 634 } 635 } 636 637 /** 638 * Retreives the user interface of this object. 639 * 640 * @return string The HTML fragment for this interface 641 */ 642 public function getUserUI() 643 { 644 // Init values 645 $html = ''; 646 647 if ($this->getFileSize() > 0) 648 { 649 $append_size = " (" . $this->getFileSize(self :: UNIT_KILOBYTES) . " " . _("KB") . ")"; 650 } 651 else 652 { 653 $append_size = ""; 654 } 655 656 $html .= "<div class='download_button'><a href='" . htmlentities($this->getFileUrl()) . "'>" . _("Download") . " " . $this->getFilename() . "$append_size</a></div>"; 657 $html = $this->replaceHyperLinks($html); 658 $this->setUserUIMainDisplayContent($html); 659 return parent :: getUserUI(); 660 } 661 662 /** 663 * Reloads the object from the database. Should normally be called after 664 * a set operation. This function is private because calling it from a 665 * subclass will call the constructor from the wrong scope. 666 * 667 * @return void 668 */ 669 private function refresh() 670 { 671 $this->__construct($this->id); 672 } 673 674 /** 675 * Deletes a File object 676 * 677 * @param string $errmsg Reference to error message 678 * 679 * @return bool True if deletion was successful 680 * @internal Persistent content will not be deleted 681 */ 682 public function delete(& $errmsg) 683 { 684 if ($this->isPersistent() == false) 685 { 686 // Unlink BLOB if any exists 687 $blob_oid = $this->getBinaryDataOid(); 688 689 if ($blob_oid) 690 { 691 $errmsg = "Deleting BLOB OID : $blob_oid"; 692 693 if ($this->mBd->UnlinkLargeObject($blob_oid) == false) 694 { 695 $errmsg = _("Unable to successfully unlink BLOB OID : $blob_oid !"); 696 return false; 697 } 698 } 699 700 $this->mBd->execSqlUpdate("DELETE FROM content_file WHERE files_id = '" . $this->getId() . "'", false); 701 } 702 else 703 { 704 $errmsg = _("Could not delete this file, since it is persistent"); 705 } 706 707 return parent :: delete($errmsg); 708 } 626 709 627 710 } … … 634 717 * End: 635 718 */ 636 637 -
trunk/wifidog-auth/wifidog/classes/Content/HTMLeditor/HTMLeditor.php
r1192 r1226 64 64 65 65 */ 66 pr ivate$_FCKeditorAvailable = false;66 protected $_FCKeditorAvailable = false; 67 67 68 68 /** … … 84 84 } 85 85 } 86 86 87 87 /** Indicate that the content is suitable to store plain text. 88 88 * @return true or false */ 89 89 public function isTextualContent() { 90 return false;90 return false; 91 91 } 92 92 /** … … 109 109 $locale = LocaleList::GetDefault(); 110 110 !empty($userData['typeInterface'])?$typeInterface=$userData['typeInterface']:$typeInterface=null; 111 $html .= "<div class='admin_element_data'>\n"; 112 113 $html .= _("Language") . ": " . $languages->GenererFormSelect($locale, "langstrings_" . $contentId . "_substring_new_language", null, TRUE); 114 115 $_FCKeditor = new FCKeditor('langstrings_' . $contentId . '_substring_new_string'); 116 $_FCKeditor->BasePath = SYSTEM_PATH . "lib/FCKeditor/"; 117 $_FCKeditor->Config["CustomConfigurationsPath"] = BASE_URL_PATH . "js/HTMLeditor.js"; 118 $_FCKeditor->Config["AutoDetectLanguage"] = false; 119 $_FCKeditor->Config["DefaultLanguage"] = substr(Locale::getCurrentLocale()->getId(), 0, 2); 120 $_FCKeditor->Config["StylesXmlPath"] = BASE_URL_PATH . "templates/HTMLeditor/css/" . substr(Locale::getCurrentLocale()->getId(), 0, 2) . ".xml"; 121 $_FCKeditor->Config["TemplatesXmlPath"] = BASE_URL_PATH . "templates/HTMLeditor/templates/" . substr(Locale::getCurrentLocale()->getId(), 0, 2) . ".xml"; 122 $_FCKeditor->ToolbarSet = "WiFiDOG"; 123 124 $_FCKeditor->Value = ""; 125 126 if ($typeInterface == 'LARGE') { 127 $_FCKeditor->Height = 400; 128 } else { 129 $_FCKeditor->Height = 200; 130 } 131 $_FCKeditor->Width = 386; 132 133 $html .= $_FCKeditor->CreateHtml(); 134 135 $html .= "</div>\n"; 136 $html .= "<div class='admin_element_tools'>\n"; 137 138 $html .= "<input type='submit' class='submit' name='langstrings_" . $contentId . "_add_new_entry' value='" . _("Add new string") . "'>"; 139 $html .= "</div>\n"; 111 $html .= "<div class='admin_element_data'>\n"; 112 113 $html .= _("Language") . ": " . $languages->GenererFormSelect($locale, "langstrings_" . $contentId . "_substring_new_language", null, TRUE); 114 115 if (Dependencies::check("FCKeditor")) { 116 // Load FCKeditor class 117 require_once('lib/FCKeditor/fckeditor.php'); 118 119 $_FCKeditor = new FCKeditor('langstrings_' . $contentId . '_substring_new_string'); 120 $_FCKeditor->BasePath = SYSTEM_PATH . "lib/FCKeditor/"; 121 $_FCKeditor->Config["CustomConfigurationsPath"] = BASE_URL_PATH . "js/HTMLeditor.js"; 122 $_FCKeditor->Config["AutoDetectLanguage"] = false; 123 $_FCKeditor->Config["DefaultLanguage"] = substr(Locale::getCurrentLocale()->getId(), 0, 2); 124 $_FCKeditor->Config["StylesXmlPath"] = BASE_URL_PATH . "templates/HTMLeditor/css/" . substr(Locale::getCurrentLocale()->getId(), 0, 2) . ".xml"; 125 $_FCKeditor->Config["TemplatesXmlPath"] = BASE_URL_PATH . "templates/HTMLeditor/templates/" . substr(Locale::getCurrentLocale()->getId(), 0, 2) . ".xml"; 126 $_FCKeditor->ToolbarSet = "WiFiDOG"; 127 128 $_FCKeditor->Value = ""; 129 130 if ($typeInterface == 'LARGE') { 131 $_FCKeditor->Height = 400; 132 } else { 133 $_FCKeditor->Height = 200; 134 } 135 $_FCKeditor->Width = 386; 136 137 $html .= $_FCKeditor->CreateHtml(); 138 } 139 else { 140 $html .= "<textarea name='langstrings_{$contentId}_substring_new_string' class='textarea' cols='60' rows='3'></textarea>"; 141 } 142 143 $html .= "</div>\n"; 144 $html .= "<div class='admin_element_tools'>\n"; 145 146 $html .= "<input type='submit' class='submit' name='langstrings_" . $contentId . "_add_new_entry' value='" . _("Add new string") . "'>"; 147 $html .= "</div>\n"; 140 148 return $html; 141 149 } … … 225 233 } 226 234 227 235 228 236 /** 229 237 * Reloads the object from the database. Should normally be called after -
trunk/wifidog-auth/wifidog/classes/Content/Picture/Picture.php
r1194 r1226 126 126 return $this->configEnableHyperlink = $enabled; 127 127 } 128 128 129 /** 129 130 * Set the maximum width an image can take in the page … … 139 140 public function setMaxDisplayHeight($height) { 140 141 $this->maxDisplayHeight = $height; 142 } 143 144 public function getMaxDisplayWidth() { 145 return $this->maxDisplayWidth; 146 } 147 148 public function getMaxDisplayHeight() { 149 return $this->maxDisplayHeight; 141 150 } 142 151 … … 283 292 // Show File admin UI + display the picture 284 293 $html .= "<li class='admin_element_item_container'>\n"; 294 $html .= _("Preview").":"; 285 295 $html .= $this->getUserUI(); 286 296 $html .= "</li>\n"; -
trunk/wifidog-auth/wifidog/classes/Content/SimplePicture/SimplePicture.php
r1167 r1226 71 71 */ 72 72 parent::setIsPersistent(false); 73 74 $this->setFileMetadataVerbose(false); 73 75 } 74 76 /** When a content object is set as Simple, it means that is is used merely to contain it's own data. No title, description or other metadata will be set or displayed, during display or administration … … 102 104 * End: 103 105 */ 104 105 -
trunk/wifidog-auth/wifidog/classes/HyperLinkUtils.php
r1196 r1226 65 65 * HREF constructs 66 66 * @return array of URLs 67 67 68 68 */ 69 69 private static function findHyperLinks(& $string) { … … 101 101 } 102 102 } 103 103 104 104 /** Is the entered URL a valid URL? 105 105 * @param $url … … 108 108 static public function validateURL($url) { 109 109 $retval = false; 110 if (!preg_match('/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))? \//i', $url, $m)) {110 if (!preg_match('/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?(\/)?/i', $url, $m)) { 111 111 //URL isn't valid 112 112 } else { -
trunk/wifidog-auth/wifidog/classes/ProfileField.php
r1192 r1226 219 219 else 220 220 $content_id = "'".$db->escapeString($content->getId())."'"; 221 221 222 222 $_retVal = $db->execSqlUpdate("UPDATE profile_fields SET content_id = $content_id WHERE profile_field_id = '{$this->getId()}'", false); 223 223 $this->refresh(); … … 286 286 throw new Exception("Could not retrieve the associated content type filter."); 287 287 288 288 289 289 return $html; 290 290 } … … 324 324 //echo "ProfileField::getUserUI()"; 325 325 $html = ""; 326 $template_field = $this->getProfileTemplateField(); 327 $html .= "<div class='user_ui_profile_field ".$template_field->getSemanticId()."'>\n"; 328 329 $content_label = $template_field->getDisplayLabelContent(); 330 if(!empty($content_label)){ 331 $html .= "<div class='profile_field_label'>".$content_label->getUserUI()."</div>\n"; 332 } 333 326 334 $content_field = $this->getContentField(); 327 335 if(!empty($content_field)) { 328 $template_field = $this->getProfileTemplateField();329 $html .= "<div class='user_ui_profile_field ".$template_field->getSemanticId()."'>\n";330 $content_label = $template_field->getDisplayLabelContent();331 if(!empty($content_label)){332 $html .= "<div class='profile_field_label'>".$content_label->getUserUI()."</div>\n";333 }334 336 // Display the actual value from the profile field 335 337 $html .= "<div class='profile_field_content'>".$content_field->getUserUI()."</div>\n"; 336 $html .= "</div>\n";337 }338 } 339 $html .= "</div>\n"; 338 340 339 341 return $html; -
trunk/wifidog-auth/wifidog/classes/User.php
r1220 r1226 300 300 } 301 301 } 302 303 304 302 303 304 305 305 // Display the avatar 306 306 if(empty($avatar)) … … 308 308 else 309 309 $html .= $avatar; 310 310 311 311 // Display the nickname or the username 312 312 $profiles=$this->getAllProfiles(); … … 322 322 } 323 323 $profileTemplates = $this->getNetwork()->getAllProfileTemplates(); 324 if($this==User::getCurrentUser() && $profileTemplates) {325 $html .= "<div class='user_edit_profile_link'> (<a href='".BASE_SSL_PATH."admin/generic_object_admin.php?object_id=".$this->getId()."&object_class=User&action=edit'>"._("edit profile")."</a>)</div>";326 } 324 /*if($this==User::getCurrentUser() && $profileTemplates) { 325 $html .= "<div class='user_edit_profile_link'><br/>(<a href='".BASE_SSL_PATH."admin/generic_object_admin.php?object_id=".$this->getId()."&object_class=User&action=edit'>"._("edit profile")."</a>)</div>"; 326 }*/ 327 327 328 328 } -
trunk/wifidog-auth/wifidog/locale/de/LC_MESSAGES/messages.po
r1175 r1226 9 9 "Project-Id-Version: PACKAGE VERSION\n" 10 10 "Report-Msgid-Bugs-To: \n" 11 "POT-Creation-Date: 2007-0 1-18 13:02-0500\n"11 "POT-Creation-Date: 2007-05-17 16:22-0400\n" 12 12 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 13 13 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" … … 33 33 #: ../change_password.php:49 ../signup.php:69 ../change_password.php:74 34 34 #: ../signup.php:139 ../change_password.php:100 ../classes/User.php:786 35 #: ../classes/User.php:847 35 36 msgid "Passwords do not match." 36 37 msgstr "Die Passwörter stimmen nicht überein." … … 38 39 #: ../change_password.php:54 ../change_password.php:79 39 40 #: ../change_password.php:107 ../change_password.php:122 40 #: ../classes/User.php:783 41 #: ../classes/User.php:783 ../classes/User.php:844 41 42 msgid "Wrong password." 42 43 msgstr "Falsches Passwort." … … 103 104 104 105 #: ../hotspots_map.php:44 smarty.txt:80 smarty.txt:44 smarty.txt:29 105 #: smarty.txt:23 106 #: smarty.txt:23 smarty.txt:30 106 107 msgid "Show me the closest hotspot" 107 108 msgstr "Nächsten Hotspot anzeigen" 108 109 109 110 #: ../hotspots_map.php:46 smarty.txt:81 smarty.txt:45 smarty.txt:30 110 #: smarty.txt:24 111 #: smarty.txt:24 smarty.txt:31 111 112 msgid "Enter your postal code" 112 113 msgstr "Geben Sie ihre Postleitzahl ein" 113 114 114 115 #: ../hotspots_map.php:48 smarty.txt:82 smarty.txt:46 smarty.txt:31 115 #: smarty.txt:25 116 #: smarty.txt:25 smarty.txt:32 116 117 msgid "Show" 117 118 msgstr "Anzeigen" 118 119 119 120 #: ../hotspots_map.php:50 smarty.txt:78 smarty.txt:100 smarty.txt:103 120 #: smarty.txt:83 smarty.txt:47 smarty.txt:32 smarty.txt:26 121 #: smarty.txt:83 smarty.txt:47 smarty.txt:32 smarty.txt:26 smarty.txt:33 121 122 msgid "Refresh map" 122 123 msgstr "Karte aktualisieren" … … 125 126 #: smarty.txt:108 ../hotspots_map.php:155 smarty.txt:85 126 127 #: ../hotspots_map.php:156 smarty.txt:49 smarty.txt:34 smarty.txt:28 128 #: smarty.txt:35 127 129 msgid "Loading, please wait..." 128 130 msgstr "Die Karte wird geladen ..." 129 131 130 132 #: ../hotspots_map.php:57 smarty.txt:84 smarty.txt:106 smarty.txt:109 131 #: smarty.txt:86 smarty.txt:50 smarty.txt:35 smarty.txt:29 133 #: smarty.txt:86 smarty.txt:50 smarty.txt:35 smarty.txt:29 smarty.txt:36 132 134 msgid "Legend" 133 135 msgstr "Legende" … … 225 227 #: smarty.txt:166 smarty.txt:169 smarty.txt:146 ../resend_validation.php:117 226 228 #: ../signup.php:229 ../portal/index.php:209 ../portal/index.php:189 229 #: ../portal/index.php:148 227 230 msgid "An email with confirmation instructions was sent to your email address." 228 231 msgstr "" … … 320 323 #: smarty.txt:39 smarty.txt:103 ../classes/Content.php:796 321 324 #: ../classes/Node.php:959 smarty.txt:59 smarty.txt:53 325 #: ../classes/Content.php:925 smarty.txt:25 322 326 msgid "Description" 323 327 msgstr "Beschreibung" … … 330 334 #: ../admin/generic_object_admin.php:56 ../admin/generic_object_admin.php:134 331 335 #: ../admin/generic_object_admin.php:140 ../admin/generic_object_admin.php:142 336 #: ../admin/generic_object_admin.php:143 332 337 msgid "" 333 338 "Sorry, the object couldn't be created. You probably didn't fill the form " … … 340 345 #: ../admin/generic_object_admin.php:229 ../admin/generic_object_admin.php:215 341 346 #: ../admin/generic_object_admin.php:237 ../admin/generic_object_admin.php:217 342 #: ../admin/generic_object_admin.php:239 347 #: ../admin/generic_object_admin.php:239 ../admin/generic_object_admin.php:218 348 #: ../admin/generic_object_admin.php:240 343 349 msgid "Object successfully deleted" 344 350 msgstr "Objekt erfolgreich gelöscht" … … 347 353 #: ../admin/generic_object_admin.php:232 ../admin/generic_object_admin.php:217 348 354 #: ../admin/generic_object_admin.php:240 ../admin/generic_object_admin.php:219 349 #: ../admin/generic_object_admin.php:242 355 #: ../admin/generic_object_admin.php:242 ../admin/generic_object_admin.php:220 356 #: ../admin/generic_object_admin.php:243 350 357 msgid "Deletion failed, error was: " 351 358 msgstr "Das Löschen ist fehlgeschlagen, der Fehler war: " … … 358 365 #: ../admin/generic_object_admin.php:97 ../admin/generic_object_admin.php:359 359 366 #: ../admin/generic_object_admin.php:360 ../admin/generic_object_admin.php:374 360 #: ../admin/generic_object_admin.php:399 367 #: ../admin/generic_object_admin.php:399 ../admin/generic_object_admin.php:400 361 368 msgid "Sorry, the 'object_id' parameter must be specified" 362 369 msgstr "Der Parameter 'object_id' muss angeben werden" … … 364 371 #: ../admin/generic_object_admin.php:111 ../admin/generic_object_admin.php:375 365 372 #: ../admin/generic_object_admin.php:376 ../admin/generic_object_admin.php:390 366 #: ../admin/generic_object_admin.php:415 373 #: ../admin/generic_object_admin.php:415 ../admin/generic_object_admin.php:416 367 374 msgid "Save" 368 375 msgstr "Sichern" … … 372 379 #: ../admin/generic_object_admin.php:391 ../admin/generic_object_admin.php:202 373 380 #: ../admin/generic_object_admin.php:405 ../admin/generic_object_admin.php:204 374 #: ../admin/generic_object_admin.php:430 381 #: ../admin/generic_object_admin.php:430 ../admin/generic_object_admin.php:205 382 #: ../admin/generic_object_admin.php:431 383 #: ../classes/Content/Picture/Picture.php:285 384 #: ../classes/Content/FavoriteHotspots/FavoriteHotspots.php:152 385 #: ../classes/Content/Picture/Picture.php:294 375 386 msgid "Preview" 376 387 msgstr "Vorschau" … … 405 416 #: ../classes/Content/RssAggregator/RssAggregator.php:621 406 417 #: ../classes/Content.php:826 ../admin/generic_object_admin.php:420 407 #: ../admin/generic_object_admin.php:440 418 #: ../admin/generic_object_admin.php:440 ../admin/generic_object_admin.php:421 419 #: ../admin/generic_object_admin.php:441 ../classes/Content.php:955 408 420 msgid "Delete" 409 421 msgstr "Löschen" … … 411 423 #: ../admin/generic_object_admin.php:135 ../admin/generic_object_admin.php:169 412 424 #: ../admin/generic_object_admin.php:178 ../admin/generic_object_admin.php:180 425 #: ../admin/generic_object_admin.php:181 413 426 msgid "Showing preview as it would appear at " 414 427 msgstr "Vorschau des Inhalts vom Hotspot " … … 423 436 #: ../classes/Content.php:560 ../admin/generic_object_admin.php:208 424 437 #: ../classes/Content.php:607 ../admin/generic_object_admin.php:210 425 #: ../classes/ProfileTemplate.php:368 438 #: ../classes/ProfileTemplate.php:368 ../admin/generic_object_admin.php:211 439 #: ../classes/Content.php:736 426 440 msgid "Edit" 427 441 msgstr "Bearbeiten" … … 429 443 #: ../admin/generic_object_admin.php:167 ../admin/generic_object_admin.php:425 430 444 #: ../admin/generic_object_admin.php:426 ../admin/generic_object_admin.php:440 431 #: ../admin/generic_object_admin.php:465 445 #: ../admin/generic_object_admin.php:465 ../admin/generic_object_admin.php:466 432 446 msgid "Generic object editor" 433 447 msgstr "Allgemeiner Objekteditor" … … 558 572 #: smarty.txt:34 smarty.txt:140 smarty.txt:200 smarty.txt:162 smarty.txt:222 559 573 #: smarty.txt:165 smarty.txt:225 smarty.txt:208 smarty.txt:72 smarty.txt:117 560 #: smarty.txt:36 smarty.txt:104 smarty.txt:30 smarty.txt:98 574 #: smarty.txt:36 smarty.txt:104 smarty.txt:30 smarty.txt:98 smarty.txt:78 561 575 msgid "Online users" 562 576 msgstr "Angemeldete Benutzer" … … 598 612 #: ../classes/Authenticators/AuthenticatorRadius.php:264 599 613 #: ../classes/Authenticators/AuthenticatorRadius.php:284 614 #: ../classes/Authenticators/AuthenticatorLDAP.php:258 615 #: ../classes/Authenticators/AuthenticatorLDAP.php:268 600 616 msgid "Login successfull" 601 617 msgstr "Erfolgreiche Anmeldung" … … 662 678 #: ../classes/Content/ContentGroup/ContentGroupElement.php:231 663 679 #: ../classes/Content.php:189 ../classes/ProfileTemplateField.php:187 680 #: ../classes/ProfileTemplateField.php:186 664 681 msgid "Unable to insert new content into database!" 665 682 msgstr "Der neue Inhalt konnte nicht in der Datenbank gesichert werden!" … … 673 690 #: ../classes/Content.php:230 ../classes/Content.php:1185 674 691 #: ../classes/Content.php:231 ../classes/Content.php:223 675 #: ../classes/Content.php:1363 692 #: ../classes/Content.php:1363 ../classes/Content.php:1492 693 #: ../classes/Content.php:1511 676 694 msgid "You must select a content type: " 677 695 msgstr "Sie müssen die Art des Inhalts auswählen: " … … 697 715 #: ../classes/Content/Picture/Picture.php:100 ../classes/Content.php:124 698 716 #: ../classes/Content.php:274 717 #: ../classes/Content/ContentGroup/ContentGroup.php:111 718 #: ../classes/Content/File/File.php:131 719 #: ../classes/Content/Picture/Picture.php:103 ../classes/Content.php:275 699 720 msgid "The content with the following id could not be found in the database: " 700 721 msgstr "" … … 707 728 #: ../classes/Network.php:711 ../classes/Statistics.php:124 708 729 #: ../classes/Content.php:333 ../classes/NodeList.php:153 730 #: ../classes/Content.php:335 709 731 msgid "Unable to open directory " 710 732 msgstr "Folgendes verzeichnis konnte nicht geöffnet werden: " … … 717 739 #: ../classes/Content.php:451 ../classes/Content.php:884 718 740 #: ../classes/Content.php:440 ../classes/Content.php:896 719 #: ../classes/Content.php:993 741 #: ../classes/Content.php:993 ../classes/Content.php:1122 720 742 msgid "The following content type isn't valid: " 721 743 msgstr "Die folgende Inhaltsart ist ungültig: " … … 741 763 #: ../classes/Content.php:502 ../classes/Content.php:838 742 764 #: ../classes/ProfileTemplate.php:302 ../classes/ProfileTemplateField.php:148 765 #: ../classes/Content.php:545 ../classes/Content.php:967 766 #: ../classes/ProfileTemplateField.php:147 743 767 msgid "Add" 744 768 msgstr "Hinzufügen" … … 753 777 #: ../classes/Content/ContentGroup/ContentGroupElement.php:373 754 778 #: ../classes/Content.php:609 ../classes/ProfileTemplate.php:370 779 #: ../classes/Content/ContentGroup/ContentGroupElement.php:349 780 #: ../classes/Content.php:738 755 781 msgid "Remove" 756 782 msgstr "Entfernen" … … 773 799 #: ../classes/Content.php:571 ../classes/Content.php:890 774 800 #: ../classes/Content.php:901 ../classes/Content.php:998 801 #: ../classes/Content.php:1127 775 802 msgid "Update was unsuccessfull (database error)" 776 803 msgstr "Aktualisierung fehlgeschlagen (Datenbankfehler)" … … 778 805 #: ../classes/Content.php:590 ../classes/Content.php:909 779 806 #: ../classes/Content.php:918 ../classes/Content.php:1015 807 #: ../classes/Content.php:1144 780 808 msgid "Unable to insert the new Owner into database." 781 809 msgstr "Der neue Besitzer konnte nicht in der Datenbank gesichert werden." … … 783 811 #: ../classes/Content.php:609 ../classes/Content.php:928 784 812 #: ../classes/Content.php:935 ../classes/Content.php:1032 813 #: ../classes/Content.php:1161 785 814 msgid "Unable to remove the owner from the database." 786 815 msgstr "Der Besitzer konnte nicht aus der Datenbank entfernt werden." … … 788 817 #: ../classes/Content.php:751 ../classes/Content.php:1070 789 818 #: ../classes/Content.php:1060 ../classes/Content.php:1212 819 #: ../classes/Content.php:1341 ../classes/Content.php:1360 790 820 msgid "Author(s):" 791 821 msgstr "Autor(en):" … … 793 823 #: ../classes/Content.php:775 ../classes/Content.php:1094 794 824 #: ../classes/Content.php:1081 ../classes/Content.php:1233 825 #: ../classes/Content.php:1362 ../classes/Content.php:1381 795 826 msgid "Project information:" 796 827 msgstr "Information über das Projekt:" … … 804 835 #: ../classes/Content.php:1204 ../classes/Content.php:1208 805 836 #: ../classes/Content.php:1396 ../classes/Content.php:1401 837 #: ../classes/Content.php:1525 ../classes/Content.php:1530 838 #: ../classes/Content.php:1544 ../classes/Content.php:1549 806 839 msgid "Title:" 807 840 msgstr "Titel:" … … 810 843 #: ../classes/Content.php:1223 ../classes/Content.php:1227 811 844 #: ../classes/Content.php:1416 ../classes/Content.php:1420 845 #: ../classes/Content.php:1545 ../classes/Content.php:1549 846 #: ../classes/Content.php:1564 ../classes/Content.php:1568 812 847 msgid "Description:" 813 848 msgstr "Beschreibung:" … … 816 851 #: ../classes/Content.php:1240 ../classes/Content.php:1244 817 852 #: ../classes/Content.php:1433 ../classes/Content.php:1437 853 #: ../classes/Content.php:1562 ../classes/Content.php:1566 854 #: ../classes/Content.php:1581 ../classes/Content.php:1585 818 855 msgid "Long description:" 819 856 msgstr "Lange Beschreibung:" … … 822 859 #: ../classes/Content.php:1257 ../classes/Content.php:1261 823 860 #: ../classes/Content.php:1450 ../classes/Content.php:1454 861 #: ../classes/Content.php:1579 ../classes/Content.php:1583 862 #: ../classes/Content.php:1598 ../classes/Content.php:1602 824 863 msgid "Information on this project:" 825 864 msgstr "Information über das Project:" … … 832 871 #: ../classes/Content.php:992 ../classes/Content.php:1337 833 872 #: ../classes/Content.php:1303 ../classes/Content.php:1486 873 #: ../classes/Content.php:1615 ../classes/Content.php:1634 834 874 msgid "Content owner list" 835 875 msgstr "Besitzer des Inhalts" … … 839 879 #: ../classes/Content.php:1333 ../classes/Node.php:968 840 880 #: ../classes/Content.php:1516 ../classes/Node.php:1094 841 #: ../classes/Node.php:1095 881 #: ../classes/Node.php:1095 ../classes/Content.php:1645 882 #: ../classes/Content.php:1664 842 883 msgid "Add owner" 843 884 msgstr "Besitzer hinzufügen" … … 845 886 #: ../classes/Content.php:1208 ../classes/Content.php:1554 846 887 #: ../classes/Content.php:1471 ../classes/Content.php:1648 888 #: ../classes/Content.php:1777 ../classes/Content.php:1796 847 889 msgid "Unable to set as author in the database." 848 890 msgstr "Der Autor konnte nicht in der Datenbank gesichert werden." … … 859 901 #: ../classes/Content/Langstring/Langstring.php:482 860 902 #: ../classes/Content.php:1775 903 #: ../classes/Content/Langstring/Langstring.php:533 904 #: ../classes/Content.php:1904 ../classes/Content.php:1923 861 905 msgid "" 862 906 "Content is persistent (you must make it non persistent before you can delete " … … 875 919 #: ../classes/Content/Langstring/Langstring.php:500 876 920 #: ../classes/Content.php:1799 921 #: ../classes/Content/Langstring/Langstring.php:551 922 #: ../classes/Content.php:1928 ../classes/Content.php:1947 877 923 msgid "Access denied (not owner of content)" 878 924 msgstr "Zugriff verweigert (Sie sind nicht der Besitzer des Inhalts)" … … 882 928 #: ../classes/Content/ContentGroup/ContentGroupElement.php:284 883 929 #: ../classes/Content/ContentGroup/ContentGroupElement.php:325 930 #: ../classes/Content/ContentGroup/ContentGroupElement.php:301 884 931 msgid "(Ignored if display type is random)" 885 932 msgstr "(Ignoriert, falls die Anzeigeart zufällig ist)" … … 904 951 #: ../classes/Content/ContentGroup/ContentGroupElement.php:318 905 952 #: ../classes/Content/ContentGroup/ContentGroupElement.php:385 953 #: ../classes/Content/ContentGroup/ContentGroupElement.php:361 906 954 msgid "Add new allowed node" 907 955 msgstr "Zugelassenen Hotspot hinzufügen" … … 980 1028 981 1029 #: ../classes/MainUI.php:240 smarty.txt:43 smarty.txt:23 smarty.txt:27 982 #: smarty.txt:21 1030 #: smarty.txt:21 smarty.txt:6 983 1031 msgid "I am not logged in." 984 1032 msgstr "Sie sind nicht angemeldet." … … 1010 1058 #: ../classes/MainUI.php:476 smarty.txt:21 smarty.txt:47 smarty.txt:59 1011 1059 #: smarty.txt:27 smarty.txt:65 ../classes/MainUI.php:381 smarty.txt:81 1012 #: smarty.txt:84 smarty.txt:63 smarty.txt:29 smarty.txt:87 1060 #: smarty.txt:84 smarty.txt:63 smarty.txt:29 smarty.txt:87 smarty.txt:15 1013 1061 msgid "Please get in touch with " 1014 1062 msgstr "Support-Meldungen bitte an folgende E-Mail-Adresse richten: " … … 1053 1101 #: ../classes/Server.php:406 ../classes/Network.php:334 1054 1102 #: ../classes/Node.php:440 ../classes/ContentTypeFilter.php:253 1103 #: ../classes/StatisticReport/AnonymisedDataExport.php:97 1055 1104 msgid "Access denied" 1056 1105 msgstr "Zugriff verweigert" … … 1189 1238 #: ../classes/Node.php:1136 ../classes/ContentTypeFilter.php:411 1190 1239 #: ../classes/Network.php:1707 ../classes/Node.php:1137 1191 #: ../classes/ProfileTemplate.php:526 1240 #: ../classes/ProfileTemplate.php:526 ../classes/Content.php:901 1241 #: ../classes/ContentTypeFilter.php:409 ../classes/ProfileTemplate.php:532 1192 1242 msgid "Access denied!" 1193 1243 msgstr "Zugriff verweigert!" … … 1200 1250 #: ../classes/Profile.php:351 ../classes/ProfileTemplate.php:570 1201 1251 #: ../classes/ProfileTemplateField.php:623 ../classes/ProfileField.php:288 1252 #: ../classes/ContentTypeFilter.php:449 ../classes/Profile.php:446 1253 #: ../classes/ProfileField.php:363 ../classes/ProfileTemplate.php:576 1254 #: ../classes/ProfileTemplateField.php:603 1202 1255 msgid "Access denied (must have super admin access)" 1203 1256 msgstr "Zugriff verweigert (Sie müssen volle Administratorrechte besitzen)" … … 1447 1500 #: ../classes/Content.php:1324 ../classes/Node.php:964 1448 1501 #: ../classes/Content.php:1507 ../classes/Node.php:1090 1449 #: ../classes/Node.php:1091 1502 #: ../classes/Node.php:1091 ../classes/Content.php:1636 1503 #: ../classes/Content.php:1655 1450 1504 msgid "Remove owner" 1451 1505 msgstr "Besitzer entfernen" … … 1705 1759 1706 1760 #: ../classes/User.php:292 ../classes/User.php:410 ../classes/User.php:396 1707 #: ../classes/User.php:362 1761 #: ../classes/User.php:362 ../classes/User.php:450 1708 1762 msgid "Could not update status." 1709 1763 msgstr "Der Status konnte nicht aktualisiert werden" … … 1723 1777 1724 1778 #: ../classes/User.php:321 ../classes/User.php:439 ../classes/User.php:425 1725 #: ../classes/User.php:384 ../classes/User.php:419 1779 #: ../classes/User.php:384 ../classes/User.php:419 ../classes/User.php:473 1726 1780 msgid "Your account is currently valid." 1727 1781 msgstr "Ihr Zugang wurde freigeschaltet." 1728 1782 1729 1783 #: ../classes/User.php:327 ../classes/User.php:445 ../classes/User.php:431 1730 #: ../classes/User.php:388 ../classes/User.php:423 1784 #: ../classes/User.php:388 ../classes/User.php:423 ../classes/User.php:477 1731 1785 msgid "Sorry, your account is not valid: " 1732 1786 msgstr "Ihr Zugang wurde gesperrt:" 1733 1787 1734 1788 #: ../classes/User.php:416 ../classes/User.php:534 ../classes/User.php:520 1735 #: ../classes/User.php:470 ../classes/User.php:509 1789 #: ../classes/User.php:470 ../classes/User.php:509 ../classes/User.php:563 1736 1790 msgid "Could not change user's password." 1737 1791 msgstr "Das Benutzerpasswort konnte nicht geändert werden." 1738 1792 1739 1793 #: ../classes/User.php:435 ../classes/User.php:553 ../classes/User.php:539 1740 #: ../classes/User.php:486 ../classes/User.php:525 1794 #: ../classes/User.php:486 ../classes/User.php:525 ../classes/User.php:579 1741 1795 msgid "No users could not be found in the database" 1742 1796 msgstr "Es wurden keinen Benutzer in der Datenbank gefunden" … … 1747 1801 #: ../classes/User.php:494 ../classes/User.php:512 ../classes/User.php:529 1748 1802 #: ../classes/User.php:533 ../classes/User.php:551 ../classes/User.php:568 1803 #: ../classes/User.php:622 1749 1804 msgid "Registration system" 1750 1805 msgstr "Registrierungssystem" 1751 1806 1752 1807 #: ../classes/User.php:447 ../classes/User.php:565 ../classes/User.php:551 1753 #: ../classes/User.php:497 ../classes/User.php:536 1808 #: ../classes/User.php:497 ../classes/User.php:536 ../classes/User.php:590 1754 1809 msgid " lost username request" 1755 1810 msgstr " Anfrage bzgl. eines vergessenen Benutzernamens" 1756 1811 1757 1812 #: ../classes/User.php:448 ../classes/User.php:566 ../classes/User.php:552 1758 #: ../classes/User.php:498 ../classes/User.php:537 1813 #: ../classes/User.php:498 ../classes/User.php:537 ../classes/User.php:591 1759 1814 msgid "" 1760 1815 "Hello,\n" … … 1770 1825 #: ../classes/User.php:609 ../classes/User.php:552 ../classes/User.php:595 1771 1826 #: ../classes/User.php:498 ../classes/User.php:533 ../classes/User.php:537 1772 #: ../classes/User.php:572 1827 #: ../classes/User.php:572 ../classes/User.php:591 ../classes/User.php:626 1773 1828 msgid "" 1774 1829 "\n" … … 1783 1838 1784 1839 #: ../classes/User.php:456 ../classes/User.php:574 ../classes/User.php:560 1785 #: ../classes/User.php:504 ../classes/User.php:543 1840 #: ../classes/User.php:504 ../classes/User.php:543 ../classes/User.php:597 1786 1841 msgid "The user is not in validation period." 1787 1842 msgstr "Der Benutzer befindet sich nicht in dem Bestätigungszeitraum." 1788 1843 1789 1844 #: ../classes/User.php:462 ../classes/User.php:580 ../classes/User.php:566 1790 #: ../classes/User.php:507 ../classes/User.php:546 1845 #: ../classes/User.php:507 ../classes/User.php:546 ../classes/User.php:600 1791 1846 msgid "The validation token is empty." 1792 1847 msgstr "Das Bestätigungskürzel ist leer." 1793 1848 1794 1849 #: ../classes/User.php:472 ../classes/User.php:590 ../classes/User.php:576 1795 #: ../classes/User.php:515 ../classes/User.php:554 1850 #: ../classes/User.php:515 ../classes/User.php:554 ../classes/User.php:608 1796 1851 msgid " new user validation" 1797 1852 msgstr " Bestätigung der E-Mail-Adresse" 1798 1853 1799 1854 #: ../classes/User.php:474 ../classes/User.php:592 ../classes/User.php:578 1800 #: ../classes/User.php:517 ../classes/User.php:556 1855 #: ../classes/User.php:517 ../classes/User.php:556 ../classes/User.php:610 1801 1856 msgid "" 1802 1857 "Hello,\n" … … 1808 1863 1809 1864 #: ../classes/User.php:474 ../classes/User.php:592 ../classes/User.php:578 1810 #: ../classes/User.php:517 ../classes/User.php:556 1865 #: ../classes/User.php:517 ../classes/User.php:556 ../classes/User.php:610 1811 1866 msgid "" 1812 1867 "\n" … … 1821 1876 1822 1877 #: ../classes/User.php:490 ../classes/User.php:608 ../classes/User.php:594 1823 #: ../classes/User.php:532 ../classes/User.php:571 1878 #: ../classes/User.php:532 ../classes/User.php:571 ../classes/User.php:625 1824 1879 msgid " new password request" 1825 1880 msgstr " Anfrage nach einem neuen Passwort" 1826 1881 1827 1882 #: ../classes/User.php:491 ../classes/User.php:609 ../classes/User.php:595 1828 #: ../classes/User.php:533 ../classes/User.php:572 1883 #: ../classes/User.php:533 ../classes/User.php:572 ../classes/User.php:626 1829 1884 msgid "" 1830 1885 "Hello,\n" … … 1839 1894 1840 1895 #: ../classes/User.php:491 ../classes/User.php:609 ../classes/User.php:595 1841 #: ../classes/User.php:533 ../classes/User.php:572 1896 #: ../classes/User.php:533 ../classes/User.php:572 ../classes/User.php:626 1842 1897 msgid "" 1843 1898 "\n" … … 1871 1926 #: ../classes/StatisticReport/UserReport.php:284 ../classes/User.php:657 1872 1927 #: ../classes/User.php:662 ../classes/User.php:710 smarty.txt:94 1928 #: ../classes/User.php:711 ../classes/User.php:716 ../classes/User.php:764 1929 #: smarty.txt:80 smarty.txt:88 1873 1930 msgid "Username" 1874 1931 msgstr "Benutzername" … … 1946 2003 #: ../login/index.php:160 ../login/index.php:161 smarty.txt:115 smarty.txt:137 1947 2004 #: smarty.txt:140 smarty.txt:113 smarty.txt:60 smarty.txt:84 smarty.txt:78 2005 #: smarty.txt:48 1948 2006 msgid "Username (or email)" 1949 2007 msgstr "Benutzername (oder E-Mail-Adresse)" … … 1953 2011 #: smarty.txt:138 smarty.txt:187 smarty.txt:141 smarty.txt:190 smarty.txt:114 1954 2012 #: smarty.txt:169 smarty.txt:61 smarty.txt:44 smarty.txt:85 smarty.txt:38 1955 #: smarty.txt:79 2013 #: smarty.txt:79 smarty.txt:49 smarty.txt:68 1956 2014 msgid "Password" 1957 2015 msgstr "Passwort" … … 1964 2022 #: smarty.txt:62 smarty.txt:63 smarty.txt:68 smarty.txt:76 smarty.txt:80 1965 2023 #: smarty.txt:40 smarty.txt:64 smarty.txt:86 smarty.txt:88 smarty.txt:92 1966 #: smarty.txt:34 smarty.txt:58 smarty.txt:82 2024 #: smarty.txt:34 smarty.txt:58 smarty.txt:82 smarty.txt:50 smarty.txt:51 2025 #: smarty.txt:56 smarty.txt:60 1967 2026 msgid "I'm having difficulties" 1968 2027 msgstr "Ich habe Probleme" … … 2023 2082 #: ../portal/index.php:311 smarty.txt:148 smarty.txt:170 smarty.txt:173 2024 2083 #: smarty.txt:151 ../portal/index.php:281 ../portal/index.php:251 2084 #: ../portal/index.php:210 2025 2085 msgid "Show all available contents for this hotspot" 2026 2086 msgstr "Zeige sämtliche Inhalte dieses Hotspots" … … 2038 2098 #: ../classes/Content/ContentGroup/ContentGroup.php:196 2039 2099 #: ../classes/Content/ContentGroup/ContentGroup.php:148 2100 #: ../classes/Content/ContentGroup/ContentGroup.php:149 2040 2101 msgid "Invalid content selection mode (must be part of CONTENT_ORDERING_MODES)" 2041 2102 msgstr "" … … 2046 2107 #: ../classes/Content/ContentGroup/ContentGroup.php:231 2047 2108 #: ../classes/Content/ContentGroup/ContentGroup.php:177 2109 #: ../classes/Content/ContentGroup/ContentGroup.php:178 2048 2110 msgid "" 2049 2111 "Invalid content selection mode (must be part of CONTENT_CHANGES_ON_MODES)" … … 2055 2117 #: ../classes/Content/ContentGroup/ContentGroup.php:266 2056 2118 #: ../classes/Content/ContentGroup/ContentGroup.php:206 2119 #: ../classes/Content/ContentGroup/ContentGroup.php:207 2057 2120 msgid "Invalid content selection mode (must be part of ALLOW_REPEAT_MODES)" 2058 2121 msgstr "" … … 2065 2128 #: ../classes/Content/RssAggregator/RssAggregator.php:193 2066 2129 #: ../classes/Content/ContentGroup/ContentGroup.php:238 2130 #: ../classes/Content/ContentGroup/ContentGroup.php:239 2067 2131 msgid "You must display at least one element" 2068 2132 msgstr "Sie müssen mindestens ein Element auswählen" … … 2072 2136 #: ../classes/Content/ContentGroup/ContentGroup.php:353 2073 2137 #: ../classes/Content/ContentGroup/ContentGroup.php:263 2138 #: ../classes/Content/ContentGroup/ContentGroup.php:264 2074 2139 msgid "In what order should the content displayed?" 2075 2140 msgstr "In welcher Reihenfolge soll der Inhalt angezeigt werden?" … … 2079 2144 #: ../classes/Content/ContentGroup/ContentGroup.php:371 2080 2145 #: ../classes/Content/ContentGroup/ContentGroup.php:272 2146 #: ../classes/Content/ContentGroup/ContentGroup.php:273 2081 2147 msgid "When does the content rotate?" 2082 2148 msgstr "Wann wechselt der Inhalt?" … … 2086 2152 #: ../classes/Content/ContentGroup/ContentGroup.php:388 2087 2153 #: ../classes/Content/ContentGroup/ContentGroup.php:281 2154 #: ../classes/Content/ContentGroup/ContentGroup.php:282 2088 2155 msgid "Can content be shown more than once to the same user?" 2089 2156 msgstr "" … … 2168 2235 #: ../classes/Content/File/File.php:574 2169 2236 #: ../classes/Content/EmbeddedContent/EmbeddedContent.php:354 2237 #: ../classes/Content/File/File.php:565 ../classes/Content/File/File.php:656 2170 2238 msgid "Download" 2171 2239 msgstr "Download" … … 2181 2249 #: ../classes/Content/File/File.php:569 2182 2250 #: ../classes/Content/EmbeddedContent/EmbeddedContent.php:354 2251 #: ../classes/Content/File/File.php:550 ../classes/Content/File/File.php:649 2183 2252 msgid "KB" 2184 2253 msgstr "kB" … … 2186 2255 #: ../classes/Content/File.php:97 ../classes/Content/File/File.php:165 2187 2256 #: ../classes/Content/File/File.php:160 ../classes/Content/File/File.php:162 2257 #: ../classes/Content/File/File.php:202 2188 2258 msgid "File size exceeds limit specified in PHP.ini" 2189 2259 msgstr "Die Dateigröße überschreitet die in php.ini zugelassene Grenze" … … 2191 2261 #: ../classes/Content/File.php:100 ../classes/Content/File/File.php:169 2192 2262 #: ../classes/Content/File/File.php:164 ../classes/Content/File/File.php:166 2263 #: ../classes/Content/File/File.php:206 2193 2264 msgid "File size exceeds limit specified HTML form" 2194 2265 msgstr "" … … 2197 2268 #: ../classes/Content/File.php:103 ../classes/Content/File/File.php:173 2198 2269 #: ../classes/Content/File/File.php:168 ../classes/Content/File/File.php:170 2270 #: ../classes/Content/File/File.php:210 2199 2271 msgid "File upload was interrupted" 2200 2272 msgstr "Der Upload wurde unterbrochen" … … 2202 2274 #: ../classes/Content/File.php:110 ../classes/Content/File/File.php:177 2203 2275 #: ../classes/Content/File/File.php:172 ../classes/Content/File/File.php:174 2276 #: ../classes/Content/File/File.php:214 2204 2277 msgid "Missing temp folder" 2205 2278 msgstr "Das temporäre Verzeichnis fehlt." … … 2210 2283 #: ../classes/Content/File/File.php:454 ../classes/Content/File/File.php:437 2211 2284 #: ../classes/Content/Avatar/Avatar.php:96 2285 #: ../classes/Content/File/File.php:492 2212 2286 msgid "Upload a new file (Uploading a new one will replace any existing file)" 2213 2287 msgstr "Eine neue Datei hochladen (wird die bestehende überschreiben)" … … 2218 2292 #: ../classes/Content/File/File.php:464 ../classes/Content/File/File.php:447 2219 2293 #: ../classes/Content/Avatar/Avatar.php:106 2294 #: ../classes/Content/File/File.php:501 2220 2295 msgid "Remote file via URL" 2221 2296 msgstr "Datei auf einem anderen Server" … … 2226 2301 #: ../classes/Content/File/File.php:478 ../classes/Content/File/File.php:461 2227 2302 #: ../classes/Content/Avatar/Avatar.php:120 2303 #: ../classes/Content/File/File.php:518 2228 2304 msgid "File URL" 2229 2305 msgstr "Adresse" … … 2231 2307 #: ../classes/Content/File.php:256 ../classes/Content/File/File.php:467 2232 2308 #: ../classes/Content/File/File.php:486 ../classes/Content/File/File.php:470 2309 #: ../classes/Content/File/File.php:528 2233 2310 msgid "Filename to display" 2234 2311 msgstr "Anzuzeigender Dateiname" … … 2236 2313 #: ../classes/Content/File.php:265 ../classes/Content/File/File.php:475 2237 2314 #: ../classes/Content/File/File.php:494 ../classes/Content/File/File.php:480 2315 #: ../classes/Content/File/File.php:540 2238 2316 msgid "MIME type" 2239 2317 msgstr "MIME-Typ" … … 2241 2319 #: ../classes/Content/File.php:272 ../classes/Content/File/File.php:482 2242 2320 #: ../classes/Content/File/File.php:501 ../classes/Content/File/File.php:488 2321 #: ../classes/Content/File/File.php:549 2243 2322 msgid "Locally stored file size" 2244 2323 msgstr "Größe der lokalen Datei" … … 2246 2325 #: ../classes/Content/File.php:281 ../classes/Content/File/File.php:489 2247 2326 #: ../classes/Content/File/File.php:508 ../classes/Content/File/File.php:493 2327 #: ../classes/Content/File/File.php:556 2248 2328 msgid "Remote file size (Automatically converted from KB to Bytes)" 2249 2329 msgstr "" … … 2253 2333 #: ../classes/Content/File.php:377 ../classes/Content/File/File.php:626 2254 2334 #: ../classes/Content/File/File.php:638 ../classes/Content/File/File.php:617 2335 #: ../classes/Content/File/File.php:704 2255 2336 msgid "Could not delete this file, since it is persistent" 2256 2337 msgstr "" … … 2560 2641 #: ../classes/Content/Langstring/Langstring.php:211 2561 2642 #: ../classes/Content/SimpleString/SimpleString.php:101 2643 #: ../classes/Content/Langstring/Langstring.php:286 2644 #: ../classes/Content/SimpleString/SimpleString.php:130 2562 2645 msgid "Only these HTML tags are allowed : " 2563 2646 msgstr "Folgende HTML-Tags sind erlaubt:" … … 2570 2653 #: ../classes/Content/Langstring/Langstring.php:279 2571 2654 #: ../classes/Content/HTMLeditor/HTMLeditor.php:153 2655 #: ../classes/Content/HTMLeditor/HTMLeditor.php:211 2656 #: ../classes/Content/Langstring/Langstring.php:354 2572 2657 msgid "Delete string" 2573 2658 msgstr "Zeichenfolge löschen" … … 2580 2665 #: ../classes/Content/Langstring/Langstring.php:339 2581 2666 #: ../classes/Content/HTMLeditor/HTMLeditor.php:191 2667 #: ../classes/Content/HTMLeditor/HTMLeditor.php:146 2668 #: ../classes/Content/Langstring/Langstring.php:229 2582 2669 msgid "Add new string" 2583 2670 msgstr "Neue Zeichenfolge hinzufügen" … … 2619 2706 #: ../classes/Content/Picture/Picture.php:241 2620 2707 #: ../classes/Content/Picture/Picture.php:259 2708 #: ../classes/Content/Picture/Picture.php:271 2709 #: ../classes/Content/Picture/Picture.php:280 2621 2710 msgid "Width (leave empty if you want to keep original width)" 2622 2711 msgstr "Breite (leer lassen, falls in die Originalbreite benutzt werden soll)" … … 2626 2715 #: ../classes/Content/Picture/Picture.php:248 2627 2716 #: ../classes/Content/Picture/Picture.php:266 2717 #: ../classes/Content/Picture/Picture.php:278 2718 #: ../classes/Content/Picture/Picture.php:287 2628 2719 msgid "Height (leave empty if you want to keep original height)" 2629 2720 msgstr "Höhe (leer lassen, falls die Originalhöhe benutzt werden soll)" … … 2849 2940 msgstr "Der RSS-Feed konnte nicht empfangen werden: %S" 2850 2941 2851 #: smarty.txt:2 smarty.txt:8 ../classes/User.php:735 2942 #: smarty.txt:2 smarty.txt:8 ../classes/User.php:735 ../classes/User.php:789 2852 2943 msgid "Change my password" 2853 2944 msgstr "Mein Passwort ändern" … … 2857 2948 #: smarty.txt:150 smarty.txt:177 smarty.txt:153 smarty.txt:180 smarty.txt:127 2858 2949 #: smarty.txt:158 smarty.txt:65 smarty.txt:66 smarty.txt:90 smarty.txt:84 2950 #: smarty.txt:53 smarty.txt:62 2859 2951 msgid "Your username" 2860 2952 msgstr "Ihr Benutzername" 2861 2953 2862 #: smarty.txt:4 ../classes/User.php:719 2954 #: smarty.txt:4 ../classes/User.php:719 ../classes/User.php:773 2863 2955 msgid "Your current password" 2864 2956 msgstr "Ihr aktuelles Passwort" 2865 2957 2866 #: smarty.txt:5 smarty.txt:6 ../classes/User.php:725 2958 #: smarty.txt:5 smarty.txt:6 ../classes/User.php:725 ../classes/User.php:779 2867 2959 msgid "Your new password" 2868 2960 msgstr "Ihr neues Passwort" … … 2967 3059 #: smarty.txt:22 smarty.txt:83 smarty.txt:34 smarty.txt:95 smarty.txt:40 2968 3060 #: smarty.txt:101 smarty.txt:103 smarty.txt:126 smarty.txt:148 smarty.txt:151 2969 #: smarty.txt:129 smarty.txt:64 smarty.txt:65 smarty.txt:59 3061 #: smarty.txt:129 smarty.txt:64 smarty.txt:65 smarty.txt:59 smarty.txt:52 2970 3062 msgid "Lost password" 2971 3063 msgstr "Vergessenes Passwort" … … 2976 3068 #: smarty.txt:186 smarty.txt:154 smarty.txt:162 smarty.txt:189 smarty.txt:128 2977 3069 #: smarty.txt:168 smarty.txt:66 smarty.txt:70 smarty.txt:43 smarty.txt:67 2978 #: smarty.txt:94 smarty.txt:37 smarty.txt:61 smarty.txt:88 3070 #: smarty.txt:94 smarty.txt:37 smarty.txt:61 smarty.txt:88 smarty.txt:54 3071 #: smarty.txt:58 2979 3072 msgid "Your email address" 2980 3073 msgstr "Ihre E-Mail-Adresse" … … 2987 3080 #: smarty.txt:26 smarty.txt:38 smarty.txt:44 smarty.txt:127 smarty.txt:149 2988 3081 #: smarty.txt:152 smarty.txt:130 smarty.txt:67 smarty.txt:68 smarty.txt:62 3082 #: smarty.txt:55 2989 3083 msgid "Please enter your username or email address to reset your password" 2990 3084 msgstr "" … … 2994 3088 #: smarty.txt:27 smarty.txt:82 smarty.txt:39 smarty.txt:94 smarty.txt:45 2995 3089 #: smarty.txt:100 smarty.txt:102 smarty.txt:135 smarty.txt:157 smarty.txt:160 2996 #: smarty.txt:136 smarty.txt:69 smarty.txt:93 smarty.txt:87 3090 #: smarty.txt:136 smarty.txt:69 smarty.txt:93 smarty.txt:87 smarty.txt:57 2997 3091 msgid "Lost username" 2998 3092 msgstr "Vergessener Benutzername" … … 3005 3099 #: smarty.txt:30 smarty.txt:42 smarty.txt:48 smarty.txt:136 smarty.txt:158 3006 3100 #: smarty.txt:161 smarty.txt:139 smarty.txt:71 smarty.txt:95 smarty.txt:89 3101 #: smarty.txt:59 3007 3102 msgid "Please enter your email address to recover your username" 3008 3103 msgstr "" … … 3136 3231 #: smarty.txt:59 smarty.txt:81 smarty.txt:71 smarty.txt:93 smarty.txt:77 3137 3232 #: smarty.txt:99 smarty.txt:79 smarty.txt:101 smarty.txt:153 smarty.txt:175 3138 #: smarty.txt:178 smarty.txt:157 smarty.txt:89 smarty.txt:83 3233 #: smarty.txt:178 smarty.txt:157 smarty.txt:89 smarty.txt:83 smarty.txt:61 3139 3234 msgid "Re-send validation email" 3140 3235 msgstr "Bestätigungs-E-Mail nochmals anfordern" … … 3147 3242 #: smarty.txt:62 smarty.txt:74 smarty.txt:80 smarty.txt:82 smarty.txt:154 3148 3243 #: smarty.txt:176 smarty.txt:179 smarty.txt:160 smarty.txt:79 smarty.txt:91 3149 #: smarty.txt:85 3244 #: smarty.txt:85 smarty.txt:63 3150 3245 msgid "" 3151 3246 "Please enter your username and the validation email will be resent to your " … … 3157 3252 #: smarty.txt:63 smarty.txt:75 smarty.txt:81 smarty.txt:83 smarty.txt:161 3158 3253 #: smarty.txt:183 smarty.txt:186 smarty.txt:166 smarty.txt:41 smarty.txt:35 3254 #: smarty.txt:65 3159 3255 msgid "Register a free account with" 3160 3256 msgstr "Einen neuen Zugang registrieren bei" … … 3162 3258 #: smarty.txt:64 smarty.txt:76 smarty.txt:82 smarty.txt:84 smarty.txt:163 3163 3259 #: smarty.txt:185 smarty.txt:188 smarty.txt:167 smarty.txt:42 smarty.txt:36 3260 #: smarty.txt:66 3164 3261 msgid "Username desired" 3165 3262 msgstr "Gewünschter Benutzername" … … 3167 3264 #: smarty.txt:67 smarty.txt:79 smarty.txt:85 smarty.txt:87 smarty.txt:166 3168 3265 #: smarty.txt:188 smarty.txt:191 smarty.txt:170 smarty.txt:45 smarty.txt:39 3266 #: smarty.txt:69 3169 3267 msgid "Password (again)" 3170 3268 msgstr "Passwort (wiederholen)" … … 3177 3275 #: smarty.txt:69 smarty.txt:81 smarty.txt:87 smarty.txt:89 smarty.txt:168 3178 3276 #: smarty.txt:190 smarty.txt:193 smarty.txt:172 smarty.txt:86 smarty.txt:46 3179 #: smarty.txt:40 3277 #: smarty.txt:40 smarty.txt:70 3180 3278 msgid "Please note" 3181 3279 msgstr "Bitte beachten Sie" … … 3183 3281 #: smarty.txt:70 smarty.txt:82 smarty.txt:88 smarty.txt:90 smarty.txt:169 3184 3282 #: smarty.txt:191 smarty.txt:194 smarty.txt:173 smarty.txt:87 smarty.txt:47 3185 #: smarty.txt:41 3283 #: smarty.txt:41 smarty.txt:71 3186 3284 msgid "" 3187 3285 "While accounts are free, we <em>strongly</em> suggest that you use your " … … 3193 3291 #: smarty.txt:71 smarty.txt:83 smarty.txt:89 smarty.txt:91 smarty.txt:170 3194 3292 #: smarty.txt:192 smarty.txt:195 smarty.txt:174 smarty.txt:51 smarty.txt:45 3293 #: smarty.txt:75 3195 3294 msgid "Note to free web-based email users" 3196 3295 msgstr "Hinweis an Nutzer von kostenlosen E-Mail-Anbietern" … … 3198 3297 #: smarty.txt:72 smarty.txt:84 smarty.txt:90 smarty.txt:92 smarty.txt:171 3199 3298 #: smarty.txt:193 smarty.txt:196 smarty.txt:175 smarty.txt:52 smarty.txt:46 3299 #: smarty.txt:76 3200 3300 msgid "" 3201 3301 "Sometimes our validation email ends up in the 'spam' folder of some " … … 3209 3309 3210 3310 #: smarty.txt:73 smarty.txt:85 smarty.txt:91 smarty.txt:93 smarty.txt:176 3211 #: smarty.txt:53 smarty.txt:47 3311 #: smarty.txt:53 smarty.txt:47 smarty.txt:77 3212 3312 msgid "You can also use the following links if you need help" 3213 3313 msgstr "Sie können auch die folgenden Links nutzen, falls Sie Hilfe benötigen" … … 3328 3428 #: smarty.txt:124 smarty.txt:136 smarty.txt:142 smarty.txt:148 smarty.txt:150 3329 3429 #: smarty.txt:211 smarty.txt:233 smarty.txt:236 smarty.txt:219 smarty.txt:127 3330 #: smarty.txt:96 smarty.txt:90 3430 #: smarty.txt:96 smarty.txt:90 smarty.txt:84 3331 3431 msgid "User list" 3332 3432 msgstr "Benutzerliste" … … 3334 3434 #: smarty.txt:125 smarty.txt:137 smarty.txt:143 smarty.txt:149 smarty.txt:151 3335 3435 #: smarty.txt:212 smarty.txt:234 smarty.txt:237 smarty.txt:220 smarty.txt:128 3336 #: smarty.txt:97 smarty.txt:91 3436 #: smarty.txt:97 smarty.txt:91 smarty.txt:85 3337 3437 msgid "Sort by:" 3338 3438 msgstr "Sortiert nach:" … … 3340 3440 #: smarty.txt:126 smarty.txt:138 smarty.txt:144 smarty.txt:150 smarty.txt:152 3341 3441 #: smarty.txt:213 smarty.txt:235 smarty.txt:238 smarty.txt:221 smarty.txt:129 3342 #: smarty.txt:98 smarty.txt:92 3442 #: smarty.txt:98 smarty.txt:92 smarty.txt:86 3343 3443 msgid "Direction:" 3344 3444 msgstr "Anordnung" … … 3346 3446 #: smarty.txt:127 smarty.txt:139 smarty.txt:145 smarty.txt:151 smarty.txt:153 3347 3447 #: smarty.txt:214 smarty.txt:236 smarty.txt:239 smarty.txt:222 smarty.txt:130 3348 #: smarty.txt:99 smarty.txt:93 3448 #: smarty.txt:99 smarty.txt:93 smarty.txt:87 3349 3449 msgid "Sort" 3350 3450 msgstr "Sortieren" … … 3356 3456 #: ../classes/StatisticReport/UserReport.php:137 smarty.txt:216 smarty.txt:238 3357 3457 #: smarty.txt:241 smarty.txt:224 smarty.txt:132 smarty.txt:101 3358 #: ../classes/StatisticReport/UserReport.php:132 smarty.txt:95 3458 #: ../classes/StatisticReport/UserReport.php:132 smarty.txt:95 smarty.txt:89 3359 3459 msgid "Network" 3360 3460 msgstr "Netzwerk" … … 3362 3462 #: smarty.txt:130 smarty.txt:142 smarty.txt:148 smarty.txt:154 smarty.txt:156 3363 3463 #: smarty.txt:217 smarty.txt:239 smarty.txt:242 smarty.txt:225 smarty.txt:133 3364 #: smarty.txt:102 smarty.txt:96 3464 #: smarty.txt:102 smarty.txt:96 smarty.txt:90 3365 3465 msgid "Registered On" 3366 3466 msgstr "Registriert am" … … 3371 3471 #: smarty.txt:243 smarty.txt:226 smarty.txt:134 smarty.txt:103 3372 3472 #: ../classes/StatisticReport/UserReport.php:147 ../classes/User.php:698 3373 #: smarty.txt:97 3473 #: smarty.txt:97 ../classes/User.php:752 smarty.txt:91 3374 3474 msgid "Account Status" 3375 3475 msgstr "Status des Zugangs" … … 3401 3501 3402 3502 #: smarty.txt:25 smarty.txt:31 smarty.txt:67 smarty.txt:89 smarty.txt:92 3403 #: smarty.txt:69 smarty.txt:38 smarty.txt:58 smarty.txt:52 3503 #: smarty.txt:69 smarty.txt:38 smarty.txt:58 smarty.txt:52 smarty.txt:24 3404 3504 msgid "Hotspot / Status" 3405 3505 msgstr "Hotspot /Status" 3406 3506 3407 3507 #: smarty.txt:27 smarty.txt:33 smarty.txt:69 smarty.txt:91 smarty.txt:94 3408 #: smarty.txt:71 smarty.txt:40 smarty.txt:60 smarty.txt:54 3508 #: smarty.txt:71 smarty.txt:40 smarty.txt:60 smarty.txt:54 smarty.txt:26 3409 3509 msgid "Location" 3410 3510 msgstr "Adresse" 3411 3511 3412 3512 #: smarty.txt:28 smarty.txt:34 smarty.txt:70 smarty.txt:92 smarty.txt:95 3413 #: smarty.txt:72 smarty.txt:41 smarty.txt:61 smarty.txt:55 3513 #: smarty.txt:72 smarty.txt:41 smarty.txt:61 smarty.txt:55 smarty.txt:27
